diff -Nrcpad gcc-17-20260621/ChangeLog gcc-17-20260628/ChangeLog
*** gcc-17-20260621/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/ChangeLog	Sun Jun 28 22:32:05 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-23  Richard Earnshaw  <rearnsha@arm.com>
+ 
+ 	* MAINTAINERS (Write After): Add details for Robert Dubner,
+ 	Ben Kosnik, James Lowden, Yunhai Shang and Andrew Waterman.
+ 	(CPU Ports, nds32): Remove Shiva Chen - stepped down.
+ 
  2026-06-10  Pierre-Emmanuel Patry  <pierre-emmanuel.patry@embecosm.com>
  
  	* MAINTAINERS (Write After Approval): Add myself.
diff -Nrcpad gcc-17-20260621/LAST_UPDATED gcc-17-20260628/LAST_UPDATED
*** gcc-17-20260621/LAST_UPDATED	Sun Jun 21 22:32:20 2026
--- gcc-17-20260628/LAST_UPDATED	Sun Jun 28 22:32:23 2026
***************
*** 1 ****
! Obtained from git: master revision 4073a7927b1644f5b56b83f04f92e81b31f6517b
--- 1 ----
! Obtained from git: master revision 08944b7000261068c846532326c02e245d39ba7f
diff -Nrcpad gcc-17-20260621/MAINTAINERS gcc-17-20260628/MAINTAINERS
*** gcc-17-20260621/MAINTAINERS	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/MAINTAINERS	Sun Jun 28 22:32:05 2026
*************** mn10300 port            Jeff Law
*** 100,106 ****
  mn10300 port            Alexandre Oliva         <aoliva@gcc.gnu.org>
  moxie port              Anthony Green           <green@moxielogic.com>
  msp430 port             Nick Clifton            <nickc@redhat.com>
- nds32 port              Shiva Chen              <shiva0217@gmail.com>
  nds32 port              Chung-Ju Wu             <jasonwucj@gmail.com>
  nvptx port              Thomas Schwinge         <tschwinge@baylibre.com>
  nvptx port              Tom de Vries            <tdevries@suse.de>
--- 100,105 ----
*************** Dimitar Dimitrov                dimitar
*** 463,468 ****
--- 462,468 ----
  Benoit Dupont de Dinechin       bd3             <benoit.dupont-de-dinechin@st.com>
  Lehua Ding                      lhtin           <lehua.ding@rivai.ai>
  Ulrich Drepper                  drepper         <drepper@gmail.com>
+ Robert Dubner                   rdubner         <rdubner@symas.com>
  François Dumont                 fdumont         <fdumont@gcc.gnu.org>
  Zdenek Dvorak                   rakdver         <ook@ucw.cz>
  Michael Eager                   eager           <eager@eagercon.com>
*************** Thomas König                    tkoenig
*** 609,614 ****
--- 609,615 ----
  Paul Koning                     pkoning         <ni1d@arrl.net>
  Bruce Korb                      korbb           <bkorb@gnu.org>
  Dave Korn                       davek           <dave.korn.cygwin@gmail.com>
+ Benjamin De Kosnik              bkoz            <bkoz@gnu.org>
  Julia Koval                     jkoval          <julia.koval@intel.com>
  Matt Kraai                      kraai           <kraai@ftbfs.org>
  Daniel Kraft                    domob           <d@domob.eu>
*************** Matthieu Longo                  mlongo
*** 658,663 ****
--- 659,665 ----
  Sandra Loosemore                sandra          <sloosemore@baylibre.com>
  Manuel López-Ibáñez             manu            <manu@gcc.gnu.org>
  Carl Love                       carll           <cel@linux.ibm.com>
+ James K. Lowden                 jklowden        <jklowden@cobolworx.com>
  Martin v. Löwis                 loewis          <loewis@informatik.hu-berlin.de>
  Edwin Lu                        ewlu            <ewlu@rivosinc.com>
  H.J. Lu                         hjl             <hjl.tools@gmail.com>
*************** Senthil Kumar Selvaraj          saaadhu
*** 818,823 ****
--- 820,826 ----
  Kostya Serebryany               kcc             <kcc@google.com>
  Thiemo Seufer                   ths             <ths@networkno.de>
  Bill Seurer                     seurer          <seurer@linux.vnet.ibm.com>
+ Yunhai Shang                    shangyunhai     <yunhai@linux.alibaba.com>
  Nathaniel Shead                 nshead          <nathanieloshead@gmail.com>
  Tim Shen                        timshen         <timshen@google.com>
  Joel Sherrill                   joel            <joel@oarcorp.com>
*************** Feng Wang                       fengwang
*** 897,902 ****
--- 900,906 ----
  Feng Wang                       fengwang1792    <wangfeng@eswincomputing.com>
  Hongyu Wang                     hongyuw         <hongyu.wang@intel.com>
  Jiong Wang                      jiwang          <jiong.wang@arm.com>
+ Andrew Waterman                 aswaterman      <andrew@sifive.com>
  Stephen M. Webb                 smw             <stephen.webb@bregmasoft.com>
  John Wehle                      wehle           <john@feith.com>
  Ulrich Weigand                  uweigand        <uweigand@de.ibm.com>
diff -Nrcpad gcc-17-20260621/MD5SUMS gcc-17-20260628/MD5SUMS
*** gcc-17-20260621/MD5SUMS	Sun Jun 21 22:32:25 2026
--- gcc-17-20260628/MD5SUMS	Sun Jun 28 22:32:28 2026
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260621.tar.xz tarball.
  #
  # Besides verifying that all files in the tarball were correctly expanded,
  # it also can be used to determine if any files have changed since the
--- 1,5 ----
  # This file contains the MD5 checksums of the files in the
! # gcc-17-20260628.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
*** 25,36 ****
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! 57f74f88ec22ecd1be4b690758a7f343  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 3c79c4bccb3a2ea5dbe17b649dd9ad82  LAST_UPDATED
! 1880c45c9da11cb64c9dc58b606aed25  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
  1c50f15d0e3e9ca32ee2b28db19f45bd  Makefile.tpl
--- 25,36 ----
  fe60d87048567d4fe8c8a0ed2448bcc8  COPYING.RUNTIME
  d32239bcb673463ab874e80d47fae504  COPYING3
  6a6a8e020838b23406c81b19c1d46df6  COPYING3.LIB
! bb62b46f29ca2bc16acf3b4dddcea02a  ChangeLog
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! e87a2d96b3c3df970e8e8e6b82fd9344  LAST_UPDATED
! 56daf5fe0f8a0ed972b31d33e9d8ac41  MAINTAINERS
  f1b0fe5b41f7272f173407bd21947846  Makefile.def
  fbda720c413d124746752b72dbcfff21  Makefile.in
  1c50f15d0e3e9ca32ee2b28db19f45bd  Makefile.tpl
*************** e8b207b9c7a9bb52bc0c9235781da723  contri
*** 389,395 ****
  b524c6a57df4d9803b79df5ecd4f368f  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! e2bd0c22276e811e96aaefb2d9cfa9f8  fixincludes/ChangeLog
  4afe55f959b7cceb7055ff11a9ca0e32  fixincludes/Makefile.in
  faccd3495bc1e8ec7f076d7dd5935b91  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
--- 389,395 ----
  b524c6a57df4d9803b79df5ecd4f368f  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! dee1559a59f4fee670d18000e7a5d6f0  fixincludes/ChangeLog
  4afe55f959b7cceb7055ff11a9ca0e32  fixincludes/Makefile.in
  faccd3495bc1e8ec7f076d7dd5935b91  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
*************** baef7ba9b787bf0e8083a807ade166c2  fixinc
*** 400,406 ****
  b6ffc204128adbd2c41ac0cb4ce98dc7  fixincludes/configure.ac
  2002770d703d59245d89f941a21f783d  fixincludes/fixfixes.c
  e5c012264bf10be63e36230140635373  fixincludes/fixinc.in
! f56137a09319b94742c51929a5922d0f  fixincludes/fixincl.c
  7f0fed08dfa61ea12896569a2a5375d1  fixincludes/fixincl.tpl
  29056a389be8fc8500fbef580f62b505  fixincludes/fixincl.x
  2dae6ba43a509ff4b52ddaa7a634ba87  fixincludes/fixlib.c
--- 400,406 ----
  b6ffc204128adbd2c41ac0cb4ce98dc7  fixincludes/configure.ac
  2002770d703d59245d89f941a21f783d  fixincludes/fixfixes.c
  e5c012264bf10be63e36230140635373  fixincludes/fixinc.in
! f7e16772ef2f4a5463025aa042b43812  fixincludes/fixincl.c
  7f0fed08dfa61ea12896569a2a5375d1  fixincludes/fixincl.tpl
  29056a389be8fc8500fbef580f62b505  fixincludes/fixincl.x
  2dae6ba43a509ff4b52ddaa7a634ba87  fixincludes/fixlib.c
*************** f15bc3c5de22eac0bdd4f611502139a0  gcc/AB
*** 532,538 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 249bac14b6c64f79e73eced1997d757b  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 532,538 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 39aba32161e8ba77f2924fbfba69985a  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 570,576 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 922bb419f6a90a8463445d7dea5a2e54  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 570,576 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! bb2b5334ef69c5c7ea149a0135bbd49a  gcc/DATESTAMP
  deb513e591f23901188e22323bd3b1d4  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** c8c9dd1eaee4ffd4d5d9f3ab70fddd4b  gcc/RE
*** 582,588 ****
  e05b8711bb51c17451a3e7f034cc4d95  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 595afeb4fb022ba75e982a8199d16350  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
--- 582,588 ----
  e05b8711bb51c17451a3e7f034cc4d95  gcc/acinclude.m4
  e74733ebf762151e601c9e0aa1461a20  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 207ac1ea06e6d928251c6d9f6a30a665  gcc/ada/ChangeLog
  c2094c0d3135f9ac89917f162046ee04  gcc/ada/ChangeLog-2001
  fa410b57f5d814d5d3ac3b45f486cdcf  gcc/ada/ChangeLog-2002
  2dbefa7bdc8dc28ec746002028861278  gcc/ada/ChangeLog-2003
*************** eea9961506181531b5f7f1a7f62fe428  gcc/ad
*** 613,619 ****
  1ddbf3755fbef2d964b15c7104b9937d  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
  3ebb03ee52f4fae5761923e2635f75c0  gcc/ada/Makefile.rtl
! a55c91bb79f5a5c57c59f615b6b54a38  gcc/ada/accessibility.adb
  9d57247b96be39de99edf90f7eab072b  gcc/ada/accessibility.ads
  ae606358a99a7aabe5c0eb16329624b3  gcc/ada/ada_get_targ.adb
  c40d997c0c713985ad13faa6d354b016  gcc/ada/adabkend.adb
--- 613,619 ----
  1ddbf3755fbef2d964b15c7104b9937d  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
  3ebb03ee52f4fae5761923e2635f75c0  gcc/ada/Makefile.rtl
! a0fcd1331f235a306f736c423a5e95aa  gcc/ada/accessibility.adb
  9d57247b96be39de99edf90f7eab072b  gcc/ada/accessibility.ads
  ae606358a99a7aabe5c0eb16329624b3  gcc/ada/ada_get_targ.adb
  c40d997c0c713985ad13faa6d354b016  gcc/ada/adabkend.adb
*************** ace7dfdd53834601d964efef9557e0f4  gcc/ad
*** 784,794 ****
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
  56c0b56695ab0e16a29f022e8494d839  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
! 4808d7da36856c92f5afa061365caf03  gcc/ada/exp_ch4.adb
! 2d9cf8b148fdc7a07edde2cf9fbb59f8  gcc/ada/exp_ch4.ads
  f2ee63cc3c5f9f1809803f876187e83a  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
! fe531803d36f45fa8237cac8e12034e8  gcc/ada/exp_ch6.adb
  06c642df831eac4b8b06e06e0cc2672b  gcc/ada/exp_ch6.ads
  209d78b894ee84003b9eb29efd6e6911  gcc/ada/exp_ch7.adb
  0328c88aa1134f7af3891cb24a0b27c8  gcc/ada/exp_ch7.ads
--- 784,794 ----
  aec86f795b370fca1379a25f37651fdf  gcc/ada/exp_ch2.ads
  56c0b56695ab0e16a29f022e8494d839  gcc/ada/exp_ch3.adb
  52ca7939bd6b0e1da9e20d902813d109  gcc/ada/exp_ch3.ads
! 9e1783713357b27de95bf4196fb7d621  gcc/ada/exp_ch4.adb
! 4410361f9df9739a168f50599c2f07b4  gcc/ada/exp_ch4.ads
  f2ee63cc3c5f9f1809803f876187e83a  gcc/ada/exp_ch5.adb
  962c51f1fad8395553b843179ba06b79  gcc/ada/exp_ch5.ads
! 7d03d787b4bd3aa3820aa8c5a0a906f7  gcc/ada/exp_ch6.adb
  06c642df831eac4b8b06e06e0cc2672b  gcc/ada/exp_ch6.ads
  209d78b894ee84003b9eb29efd6e6911  gcc/ada/exp_ch7.adb
  0328c88aa1134f7af3891cb24a0b27c8  gcc/ada/exp_ch7.ads
*************** fc57966056b0077a0fadd4887212d6bd  gcc/ad
*** 2854,2860 ****
  72384ae4f876d171cf561494dcce5966  gcc/ada/par-ch3.adb
  63a2db0c45fffcb07ad9774a590ba474  gcc/ada/par-ch4.adb
  0585d7a7aad5f825e2f48c263b0e0ee8  gcc/ada/par-ch5.adb
! 956af2f3ecb912bdea2819ff321692b6  gcc/ada/par-ch6.adb
  558ef22825b7a759e5b43d40e9566848  gcc/ada/par-ch7.adb
  8088c92c25aa6f8d485fa42b1326be8d  gcc/ada/par-ch8.adb
  f1e8c6c878d014498b8b3b88dd99b012  gcc/ada/par-ch9.adb
--- 2854,2860 ----
  72384ae4f876d171cf561494dcce5966  gcc/ada/par-ch3.adb
  63a2db0c45fffcb07ad9774a590ba474  gcc/ada/par-ch4.adb
  0585d7a7aad5f825e2f48c263b0e0ee8  gcc/ada/par-ch5.adb
! f60de53d7a547575a527746c23608afd  gcc/ada/par-ch6.adb
  558ef22825b7a759e5b43d40e9566848  gcc/ada/par-ch7.adb
  8088c92c25aa6f8d485fa42b1326be8d  gcc/ada/par-ch8.adb
  f1e8c6c878d014498b8b3b88dd99b012  gcc/ada/par-ch9.adb
*************** acf67cc2ad3c40fe466a03f76c6450e1  gcc/ad
*** 2912,2918 ****
  65869457d1676879dc545835475f7421  gcc/ada/sem.ads
  1f1ea5b059ab31ee369cc51ba1071c8c  gcc/ada/sem_aggr.adb
  d5ddab4fcf440bf2f49a9a190fd12829  gcc/ada/sem_aggr.ads
! 123516e551b0632b4e9939da0d585a20  gcc/ada/sem_attr.adb
  f5a25d26b815f5d376e2873f3ab69359  gcc/ada/sem_attr.ads
  39892cb912c9fe4b0d512cfc104e5bd7  gcc/ada/sem_aux.adb
  5df4642fb17b29da9f787e48f24551b9  gcc/ada/sem_aux.ads
--- 2912,2918 ----
  65869457d1676879dc545835475f7421  gcc/ada/sem.ads
  1f1ea5b059ab31ee369cc51ba1071c8c  gcc/ada/sem_aggr.adb
  d5ddab4fcf440bf2f49a9a190fd12829  gcc/ada/sem_aggr.ads
! b1c3315aa473548d42fb846c33d163d1  gcc/ada/sem_attr.adb
  f5a25d26b815f5d376e2873f3ab69359  gcc/ada/sem_attr.ads
  39892cb912c9fe4b0d512cfc104e5bd7  gcc/ada/sem_aux.adb
  5df4642fb17b29da9f787e48f24551b9  gcc/ada/sem_aux.ads
*************** a7cdba01724a5a0d104d93575163a3ea  gcc/ad
*** 2930,2944 ****
  ec60ecc54472eacb95e7a2bc99058514  gcc/ada/sem_ch13.ads
  260948dd8c7af25b5acaa288032c9327  gcc/ada/sem_ch2.adb
  ea86a0345845800d7aaf07f22bb4bf6c  gcc/ada/sem_ch2.ads
! 871ea8446a3c444c010ef12e6885dc15  gcc/ada/sem_ch3.adb
  2d8f83bc46638356bc311ccd50015b1f  gcc/ada/sem_ch3.ads
! 2656c66e51cd968130b08cd344827a00  gcc/ada/sem_ch4.adb
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
  a9398364ab25c6bd5af8f323cb3a4763  gcc/ada/sem_ch5.adb
  0851668baacc82a6125a6cdd3254a804  gcc/ada/sem_ch5.ads
! c86d18936d863882ec6446a79ec1f959  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
! f0e6feb2c279675d7b84790cc8c73c2e  gcc/ada/sem_ch7.adb
  b15ba6dec89e775b188e9d07764efc63  gcc/ada/sem_ch7.ads
  90c7969914972d9a9f9e40436b94bba1  gcc/ada/sem_ch8.adb
  5bcf24e9f3725dd07ba44097469a5101  gcc/ada/sem_ch8.ads
--- 2930,2944 ----
  ec60ecc54472eacb95e7a2bc99058514  gcc/ada/sem_ch13.ads
  260948dd8c7af25b5acaa288032c9327  gcc/ada/sem_ch2.adb
  ea86a0345845800d7aaf07f22bb4bf6c  gcc/ada/sem_ch2.ads
! 1df3c91b7668c3568b22f00077d2d2e2  gcc/ada/sem_ch3.adb
  2d8f83bc46638356bc311ccd50015b1f  gcc/ada/sem_ch3.ads
! b5b240fdd471e2c2d8f056282e5a0918  gcc/ada/sem_ch4.adb
  fdd750bd30c3186d912dfed4717a2c0c  gcc/ada/sem_ch4.ads
  a9398364ab25c6bd5af8f323cb3a4763  gcc/ada/sem_ch5.adb
  0851668baacc82a6125a6cdd3254a804  gcc/ada/sem_ch5.ads
! 162c576c8b6697fc9f879c3e412a4c42  gcc/ada/sem_ch6.adb
  9ac8c4c57213097618cdb7c0b7b4f47b  gcc/ada/sem_ch6.ads
! 33013f2a509aa93b2c13c0a8a7636749  gcc/ada/sem_ch7.adb
  b15ba6dec89e775b188e9d07764efc63  gcc/ada/sem_ch7.ads
  90c7969914972d9a9f9e40436b94bba1  gcc/ada/sem_ch8.adb
  5bcf24e9f3725dd07ba44097469a5101  gcc/ada/sem_ch8.ads
*************** be5bd8727bcc81e7515f2a0386cf8af3  gcc/ad
*** 2962,2977 ****
  39b96f04803db97ae1f7376d30a0cfec  gcc/ada/sem_mech.ads
  ee6e41995c43f0c4420c529b33e9383b  gcc/ada/sem_prag.adb
  74c910ce428c01e6523f86e202f26040  gcc/ada/sem_prag.ads
! fa731adc2024465e7c72134fa38ce4ea  gcc/ada/sem_res.adb
! e3b9f77c37497d7f7824085d3df8fde8  gcc/ada/sem_res.ads
  4e8a9bc2b398560942d0c08f4017fabb  gcc/ada/sem_scil.adb
  64ae38c93be63a67f143484eba77604b  gcc/ada/sem_scil.ads
  102f98875b216b8fcbe1ed80f8079009  gcc/ada/sem_smem.adb
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
! 1de99683c6514c34448d2bbc7ddb8856  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! 095eb1ddbe339bed2396358b45575316  gcc/ada/sem_util.adb
! 4be4a63392ef73c291b1a95cb8f92049  gcc/ada/sem_util.ads
  9f2ddb5c1f96bfb925bc1c9fbbc0c3a5  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
  75ee1e8bae201fd70d666856c4dbb8e5  gcc/ada/set_targ.adb
--- 2962,2977 ----
  39b96f04803db97ae1f7376d30a0cfec  gcc/ada/sem_mech.ads
  ee6e41995c43f0c4420c529b33e9383b  gcc/ada/sem_prag.adb
  74c910ce428c01e6523f86e202f26040  gcc/ada/sem_prag.ads
! 37f6510313fc653044902a4c7269f6bd  gcc/ada/sem_res.adb
! 8909dffcc7f45c0fbe30840278381a64  gcc/ada/sem_res.ads
  4e8a9bc2b398560942d0c08f4017fabb  gcc/ada/sem_scil.adb
  64ae38c93be63a67f143484eba77604b  gcc/ada/sem_scil.ads
  102f98875b216b8fcbe1ed80f8079009  gcc/ada/sem_smem.adb
  21afb93e10bb9446fcbf7577bbf39c7f  gcc/ada/sem_smem.ads
! e88c721aecd60ff49f0090121637484a  gcc/ada/sem_type.adb
  65653b347d1d3f800e49cd916a551d1c  gcc/ada/sem_type.ads
! b732c369e0629f74c79fb8f85ff57c97  gcc/ada/sem_util.adb
! 7945410f9fd30da644dbc987fbad7e90  gcc/ada/sem_util.ads
  9f2ddb5c1f96bfb925bc1c9fbbc0c3a5  gcc/ada/sem_warn.adb
  1952fbda97ea4c6506f452eac9934bb4  gcc/ada/sem_warn.ads
  75ee1e8bae201fd70d666856c4dbb8e5  gcc/ada/set_targ.adb
*************** d22c314f3748309f812d78f5217dda61  gcc/ad
*** 3075,3088 ****
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebd823843d8793364a7f82ee9f833c88  gcc/adjust-alignment.cc
! 85126b8cefa884ee5f3fcdf75dae71f0  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
  b2f984d7f0c7122003e5ce03b3e8724e  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
  27119d3e1e8fce1677a27ca87cc9de1e  gcc/algol68/a68-exports.cc
  03c9c1d0f8621e44f9807e21e9191c07  gcc/algol68/a68-imports-archive.cc
! 0ba775e2350612831eb78c681330c00d  gcc/algol68/a68-imports.cc
! 1dac1ca86874d9b7205cbcd76a3a083b  gcc/algol68/a68-lang.cc
  6430e67f3d47b364ff04181a73b26fea  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
--- 3075,3088 ----
  06b46bffb1b84e16a6f48b29177f42c4  gcc/ada/xutil.ads
  faeebcb240c1559aceb7d9c18c8e6b89  gcc/addresses.h
  ebd823843d8793364a7f82ee9f833c88  gcc/adjust-alignment.cc
! 5327c7f6f5e9e863c570286847e757c2  gcc/algol68/ChangeLog
  66ab60a51bd61854d9b2898856651b15  gcc/algol68/Make-lang.in
  b2f984d7f0c7122003e5ce03b3e8724e  gcc/algol68/README
  43ae40e82c1a7a144e905d40b101214e  gcc/algol68/a68-diagnostics.cc
  27119d3e1e8fce1677a27ca87cc9de1e  gcc/algol68/a68-exports.cc
  03c9c1d0f8621e44f9807e21e9191c07  gcc/algol68/a68-imports-archive.cc
! 750e58b3777dfade1024ef8128c185a2  gcc/algol68/a68-imports.cc
! af0a68c040d309006d387c1c35423ad9  gcc/algol68/a68-lang.cc
  6430e67f3d47b364ff04181a73b26fea  gcc/algol68/a68-low-bits.cc
  284cf6c8827f78791575949cc1f634ef  gcc/algol68/a68-low-bools.cc
  421c70a781dc2c00722aa019bc39f683  gcc/algol68/a68-low-builtins.cc
*************** de4cb485173b396d55860a98e328be5b  gcc/al
*** 3111,3117 ****
  5c0c66ed30007b50d34d279047ef4bc6  gcc/algol68/a68-low.cc
  57f5f332612b159fdee8fb6fb9d8ab16  gcc/algol68/a68-moids-diagnostics.cc
  c8f59e26255a9bc185068084b4135289  gcc/algol68/a68-moids-misc.cc
! 943207507077d65185cd6d089f1249da  gcc/algol68/a68-moids-sorting.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  5cba262e501051ca9bc9e3c0cec33e74  gcc/algol68/a68-parser-attrs.def
  9bdbc6f28f194a0713f8b2d2da7ff395  gcc/algol68/a68-parser-bottom-up.cc
--- 3111,3117 ----
  5c0c66ed30007b50d34d279047ef4bc6  gcc/algol68/a68-low.cc
  57f5f332612b159fdee8fb6fb9d8ab16  gcc/algol68/a68-moids-diagnostics.cc
  c8f59e26255a9bc185068084b4135289  gcc/algol68/a68-moids-misc.cc
! c1b701fe2d529ad91d964a18d5d9ea87  gcc/algol68/a68-moids-sorting.cc
  93ab5a30cda3f697bee77eba313c66d6  gcc/algol68/a68-moids-to-string.cc
  5cba262e501051ca9bc9e3c0cec33e74  gcc/algol68/a68-parser-attrs.def
  9bdbc6f28f194a0713f8b2d2da7ff395  gcc/algol68/a68-parser-bottom-up.cc
*************** c277cfbf6dc22b5e43687f22a6ef9adb  gcc/bb
*** 3295,3305 ****
  8bcfe8e53c7811d339aa0efc4671eca1  gcc/bitmap.h
  8ba8cc55d4c38f126d32b3291cec4312  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
! 199995f5aa749f6b6a1170f2307d8e3b  gcc/builtin-types.def
! c6e78ac148b4eadc30dfea92c3414885  gcc/builtins.cc
! d5db4c3fd8f2f6328a72905271146ce0  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! 4f5138cf5782686ea62268da0e82e183  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
--- 3295,3305 ----
  8bcfe8e53c7811d339aa0efc4671eca1  gcc/bitmap.h
  8ba8cc55d4c38f126d32b3291cec4312  gcc/btfout.cc
  6da486aac72d8ac53fc6618dea4dcf2e  gcc/builtin-attrs.def
! fea6b5b48893aa4b0ce22c46ca96691b  gcc/builtin-types.def
! 8925a4aab21fe60c0eff69d3baa0ab63  gcc/builtins.cc
! c69491e1e06e8252126bfd579bd74d4d  gcc/builtins.def
  4f577c1f20985f1ba3c1672476f1a2da  gcc/builtins.h
! e2b6e81c1bd4a132256deb55d818ee28  gcc/c-family/ChangeLog
  ea3fa1f4d7390a105fa3caab4f79aaf7  gcc/c-family/ChangeLog.gimple-classes
  aaea141fd41a559841cb76e33800c289  gcc/c-family/c-ada-spec.cc
  f60a13b470e8e51db83383bf9f9f921e  gcc/c-family/c-ada-spec.h
*************** bfd2965f7d480323f9543caf12c3ec8b  gcc/c-
*** 3316,3322 ****
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
  4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
! 189b2e72aaba00910cfae87a0c0a8ee3  gcc/c-family/c-omp.cc
  ad14806f3955cf38561572129b17ecab  gcc/c-family/c-opts.cc
  a7304c009aa63ce6c8e80612b426724a  gcc/c-family/c-pch.cc
  cb9706138b571f810527200a1e24035c  gcc/c-family/c-ppoutput.cc
--- 3316,3322 ----
  382fde18b48d137c66c91e21de978037  gcc/c-family/c-indentation.h
  4893d50b962d5e680a44bb72d2097469  gcc/c-family/c-lex.cc
  eb6a10cfada98679dc204a82e929e9e3  gcc/c-family/c-objc.h
! 5edfc0bf13f4daff32a1653000781001  gcc/c-family/c-omp.cc
  ad14806f3955cf38561572129b17ecab  gcc/c-family/c-opts.cc
  a7304c009aa63ce6c8e80612b426724a  gcc/c-family/c-pch.cc
  cb9706138b571f810527200a1e24035c  gcc/c-family/c-ppoutput.cc
*************** eb0fcc324140f72001698df8e19f05c4  gcc/c-
*** 3342,3363 ****
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! a4fac236517f9db616d18bc05b553b60  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! 0714c1ad09a4fa0053ca1069b9a8b3dc  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  fb28bfedbe8c8f41f339af7936b3b22f  gcc/c/c-fold.cc
  9087221c62ac81d002665b0e3ae2c55f  gcc/c/c-lang.cc
  62012039da265ed806754029f67a24a9  gcc/c/c-lang.h
  0faaa7bc26e8df40db69dd9caad8ced6  gcc/c/c-objc-common.cc
  cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/c-objc-common.h
! 088825084771eb196b861ce5d5f3bdc1  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! 3ee5aefcb5c9ebc5fed7991af22b0426  gcc/c/c-tree.h
! 947f1a41132f4959712992150f01dfa3  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
--- 3342,3363 ----
  377686cbbf62a7d61d251d3f74cddb5b  gcc/c-family/known-headers.h
  431045382c41554804be1959c1596be4  gcc/c-family/name-hint.h
  3bae9e281cc87b35f63e906373f3b446  gcc/c-family/stub-objc.cc
! 1541c38e97bf723fada67295bb48f459  gcc/c/ChangeLog
  cbffb341640e7c4b16792e0951fffeca  gcc/c/Make-lang.in
  3920e3ee16f5b5955d40584fea53c441  gcc/c/c-aux-info.cc
  cd5bab8a4deeaa0369ae59b9403d06a2  gcc/c/c-convert.cc
! 6a0f501da87bbc7ed3a4ab43c87c05f5  gcc/c/c-decl.cc
  92707173973fa48fbb8dda88f5af625a  gcc/c/c-errors.cc
  fb28bfedbe8c8f41f339af7936b3b22f  gcc/c/c-fold.cc
  9087221c62ac81d002665b0e3ae2c55f  gcc/c/c-lang.cc
  62012039da265ed806754029f67a24a9  gcc/c/c-lang.h
  0faaa7bc26e8df40db69dd9caad8ced6  gcc/c/c-objc-common.cc
  cbfdd140f14c43c01a6bdf8b1c24b317  gcc/c/c-objc-common.h
! f324d0b84a110790909734ef326e960a  gcc/c/c-parser.cc
  f6b634d7c0204c419cf4fb7b48193fad  gcc/c/c-parser.h
  4db955734effe2d0c9aac0379d2e6a8c  gcc/c/c-tree.def
! b0201ab49a706ee18aa68d28efef4030  gcc/c/c-tree.h
! f1040ded443d558e5b8df46e4aac3fef  gcc/c/c-typeck.cc
  5804f7ee3eccdfb7c9a64e40b20ccc79  gcc/c/config-lang.in
  58370619d5c4739b7d81d5f899913a0c  gcc/c/gccspec.cc
  3006cd4ab743e1a8087fc267168774ce  gcc/c/gimple-parser.cc
*************** c620b176c09eda90b566ae49703a8346  gcc/cf
*** 3376,3382 ****
  1759b500ef3ebaa71f165d1004be0c28  gcc/cfgbuild.h
  4c93b442fb2c3908e2b49dbd5e1d5d2c  gcc/cfgcleanup.cc
  19b842f671a6c6284b654d712d52e513  gcc/cfgcleanup.h
! 35c86c649a626306de23fc6c5342c55a  gcc/cfgexpand.cc
  7bcce78536f3bff0e046d9a3ece5ea9a  gcc/cfgexpand.h
  9009ba1d3f596dbdd73e13ac8c13aa03  gcc/cfghooks.cc
  168a35792653beee5d2b951ef1708665  gcc/cfghooks.h
--- 3376,3382 ----
  1759b500ef3ebaa71f165d1004be0c28  gcc/cfgbuild.h
  4c93b442fb2c3908e2b49dbd5e1d5d2c  gcc/cfgcleanup.cc
  19b842f671a6c6284b654d712d52e513  gcc/cfgcleanup.h
! 2d882f432a252dec63236e823096925a  gcc/cfgexpand.cc
  7bcce78536f3bff0e046d9a3ece5ea9a  gcc/cfgexpand.h
  9009ba1d3f596dbdd73e13ac8c13aa03  gcc/cfghooks.cc
  168a35792653beee5d2b951ef1708665  gcc/cfghooks.h
*************** b50dcacbe77c96809023aa599a556717  gcc/cg
*** 3394,3408 ****
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 8dafd976049096243d626337a41159b3  gcc/cobol/ChangeLog
  7e9a5134b9a255eadbcb53d2153defa2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! b070f3c6106cd3d724702c4cc3996f1a  gcc/cobol/cbldiag.h
  5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
! ee4d6e4c1e79091d054c200ed00073b8  gcc/cobol/cdf.y
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! 6f0781c00ff23cb0dc92a545a8a9feb0  gcc/cobol/cobol1.cc
  b7fdf5b7df9733140ec9ca1b153cbf9c  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
--- 3394,3408 ----
  a9229e8ac3f0d366e296e57756becd23  gcc/cgraphunit.cc
  45b21ab7ea818c3a3ce60bf8d3cbd252  gcc/channels.h
  f2981f79a749a2269d7ea349ab37ca3e  gcc/cif-code.def
! 87756a34f10f46aa3afccd2d7229befa  gcc/cobol/ChangeLog
  7e9a5134b9a255eadbcb53d2153defa2  gcc/cobol/Make-lang.in
  0a84e784d2bc4066654d2377fc6a2930  gcc/cobol/TODO
! de7a1dd71b6ec640080ccccde82e384c  gcc/cobol/cbldiag.h
  5fdc70643a73d31fa87ca25eb9bca477  gcc/cobol/cdf-copy.cc
! 9f1414cfb23d8d1b5874202bda6a3a97  gcc/cobol/cdf.y
  314ba2fe46efd7508b3cd6ef99aa964f  gcc/cobol/cdfval.h
  39a7cc8aae37a642491e77796d652ebe  gcc/cobol/cobol-system.h
! a800f30431cfe90b668018187bd2c2db  gcc/cobol/cobol1.cc
  b7fdf5b7df9733140ec9ca1b153cbf9c  gcc/cobol/compare.cc
  30fe1e768a76bb15b7d6d2d12bb53a3a  gcc/cobol/compare.h
  8b7f26d4855e5bb69a66eecc586d9742  gcc/cobol/config-lang.in
*************** d5c6387d56f84eecf1320e4209ae02fe  gcc/co
*** 3412,3450 ****
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
  5faeacdf9fba68f3991fa3a6f65be405  gcc/cobol/exceptg.h
  b14c53972a7aa91a15097c505f00473b  gcc/cobol/gcobc
! 8270363979a1301d5c5a68a78bf909a4  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
  6706b38ffb89e0e80c1b2fff552c98c3  gcc/cobol/genapi.cc
  080b7c465c851dab0832fbd0f5cce8c7  gcc/cobol/genapi.h
! e84856f59c534c371a140bb307ff575f  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
  463a149c0c51397aaf084b9d67787fdc  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 28732838782240d114e6b49eaf05dc35  gcc/cobol/genutil.cc
! 23bac852032c67691559774c157b64cc  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
! 05f191861e37d52870bb5257c188632f  gcc/cobol/lang-specs.h
! 113196853f880813f91d266fa26d968c  gcc/cobol/lang.opt
! 308db23ce9180bc0d0ed62e98f2b08ae  gcc/cobol/lang.opt.urls
! 1d207e469faf9e98edadff1362b88c6e  gcc/cobol/lexio.cc
  c4e48ed28c747d296af503552da42055  gcc/cobol/lexio.h
! e22025b8adf93c444f899af935b6c427  gcc/cobol/messages.cc
! 662462a808f43be69239f43b0d7a2ad5  gcc/cobol/move.cc
! e2ebe7a24b248ccf802836be6afbfec4  gcc/cobol/parse.y
! cef205dfd7af7182e8bc8908cf3437f1  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
! b1ba7674e5b7a213da2e9950afdd7a35  gcc/cobol/scan.l
! dd7e70cf35b55cbc7261c701bbda9c5e  gcc/cobol/scan_ante.h
! 749730a2135b83da188daf4b17bfa5d4  gcc/cobol/scan_post.h
  74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
  75161ca42023dad15cbea413b6d34380  gcc/cobol/structs.cc
  e82b261f1753be53d32fb056a39f498b  gcc/cobol/structs.h
  8adbe13738cf3039ac90116ebe6696c6  gcc/cobol/symbols.cc
  4adbb76938ce7cc9078da06487249df9  gcc/cobol/symbols.h
  2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
! 2f32d8b900fd38fa259875ca2ca5c9a1  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
  e246fcd7bc99c38f9910d124f8add039  gcc/cobol/util.cc
  395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
--- 3412,3450 ----
  79fd5c6d108a5a1af2ebda2296d91440  gcc/cobol/except.cc
  5faeacdf9fba68f3991fa3a6f65be405  gcc/cobol/exceptg.h
  b14c53972a7aa91a15097c505f00473b  gcc/cobol/gcobc
! 5fd8a970faa5c6919d491732f242c58c  gcc/cobol/gcobol.1
  7a73ffe93cdd304879a42f225aa554ee  gcc/cobol/gcobol.3
  21b840090e9923bdd5cb47e4468e3fd9  gcc/cobol/gcobolspec.cc
  6706b38ffb89e0e80c1b2fff552c98c3  gcc/cobol/genapi.cc
  080b7c465c851dab0832fbd0f5cce8c7  gcc/cobol/genapi.h
! eeeca905e5679aa6edaec841b7363420  gcc/cobol/gengen.cc
  8d0ab0fc1957927b07dd60145858e817  gcc/cobol/gengen.h
  463a149c0c51397aaf084b9d67787fdc  gcc/cobol/genmath.cc
  78d263e35c67698f367e118c95157cb4  gcc/cobol/genmath.h
! 56b6fd8f8c6944a74789c6d47587b1fe  gcc/cobol/genutil.cc
! 83670650e85afb5c91f00e75d86874dd  gcc/cobol/genutil.h
  7b9c1ead6f9d3661133f7f732811719c  gcc/cobol/help.gen
  0c56a591cf166a8d83553c2afd4b3ce3  gcc/cobol/inspect.h
! 3d9b3d19800f5ee15910accfc528aeb8  gcc/cobol/lang-specs.h
! 3ce266c05077f5e07b2412270ff3f424  gcc/cobol/lang.opt
! fd4809576031a8df82aa91899e5e6a5f  gcc/cobol/lang.opt.urls
! 9fe73b216b79989a974880ca437017bc  gcc/cobol/lexio.cc
  c4e48ed28c747d296af503552da42055  gcc/cobol/lexio.h
! bd59aa9de483021d005bb9faa15e3f1f  gcc/cobol/messages.cc
! cb28269acbadaf664730e5112050f881  gcc/cobol/move.cc
! af3d6202a00c38602c163e641953b737  gcc/cobol/parse.y
! d5c128d288f27778bb9ca41b323e9514  gcc/cobol/parse_ante.h
  658e59750efa818db284c44387330580  gcc/cobol/parse_util.h
! 43faec6ac9c62d787bdfae40292930d3  gcc/cobol/scan.l
! ff991b8a3eac20d9e6a54b25c2137986  gcc/cobol/scan_ante.h
! 0e56ecd630e8eb4c45ccc8b2af09fc4a  gcc/cobol/scan_post.h
  74a3f55d7d2740db3d3e1945335d4faa  gcc/cobol/show_parse.h
  75161ca42023dad15cbea413b6d34380  gcc/cobol/structs.cc
  e82b261f1753be53d32fb056a39f498b  gcc/cobol/structs.h
  8adbe13738cf3039ac90116ebe6696c6  gcc/cobol/symbols.cc
  4adbb76938ce7cc9078da06487249df9  gcc/cobol/symbols.h
  2052d3215a215928b26c5296b9e2eea1  gcc/cobol/symfind.cc
! e46c348276950beff20df278e4e041c8  gcc/cobol/token_names.h
  434f4899280e27d0717b2e56d5bf12f2  gcc/cobol/udf/stored-char-length.cbl
  e246fcd7bc99c38f9910d124f8add039  gcc/cobol/util.cc
  395c97f0b12382690815b0e1c1702ec4  gcc/cobol/util.h
*************** b218f741c2f54f950d065bb40f5125ea  gcc/co
*** 3482,3490 ****
  4d82eb0ae58ac44e02bff98ed16ac27d  gcc/common/config/frv/frv-common.cc
  5b41dfaa1b910962a78074d1e5d611d6  gcc/common/config/gcn/gcn-common.cc
  30ff9a49f51b477d26fe8159736f2269  gcc/common/config/h8300/h8300-common.cc
! 68bff662fc543c7d7a0665a388c9b0b7  gcc/common/config/i386/cpuinfo.h
! 09a6376270c5020d2d202134437a4f15  gcc/common/config/i386/i386-common.cc
! bb4bd3d394753429207b9fa1027157f5  gcc/common/config/i386/i386-cpuinfo.h
  37e6649cf36e5ffa1040bb2a7d9c55f2  gcc/common/config/i386/i386-isas.h
  9dda9971db0422e2c982905c5e39202c  gcc/common/config/ia64/ia64-common.cc
  24847f756d827cf6015cbb798500e296  gcc/common/config/iq2000/iq2000-common.cc
--- 3482,3490 ----
  4d82eb0ae58ac44e02bff98ed16ac27d  gcc/common/config/frv/frv-common.cc
  5b41dfaa1b910962a78074d1e5d611d6  gcc/common/config/gcn/gcn-common.cc
  30ff9a49f51b477d26fe8159736f2269  gcc/common/config/h8300/h8300-common.cc
! f574312c1a5605d4fb4dd6510d703a54  gcc/common/config/i386/cpuinfo.h
! 56038843a55180dec91a495433704ed1  gcc/common/config/i386/i386-common.cc
! 40b5989893d835614717d5893ee7965b  gcc/common/config/i386/i386-cpuinfo.h
  37e6649cf36e5ffa1040bb2a7d9c55f2  gcc/common/config/i386/i386-isas.h
  9dda9971db0422e2c982905c5e39202c  gcc/common/config/ia64/ia64-common.cc
  24847f756d827cf6015cbb798500e296  gcc/common/config/iq2000/iq2000-common.cc
*************** d3b8ce30c6110489fd0b57d6792f3f29  gcc/co
*** 3520,3528 ****
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! 121ab97762e23095e2720fde066015b0  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
! 34da5cde8b9bc078646ece2f7754fa2f  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
--- 3520,3528 ----
  88eac990ca6879dcd747cf5113888b1e  gcc/compare-elim.cc
  6137f3da8f70ec4262acab21bb549148  gcc/conditions.h
  4250c8b8d57bf1315174cf436a74a88b  gcc/config.build
! afb930cfc53c99c2513d5b6fb4236004  gcc/config.gcc
  d8b0b26795a60b3a991dfbdafe4cd756  gcc/config.host
! ed5fcae0262853be51496f187c521cf0  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  09ab460c021260083d94d95ece3cdb5d  gcc/config/aarch64/aarch64-abi-ms-protos.h
  c47b4191f7bac0196ab63ca2c66bfa98  gcc/config/aarch64/aarch64-abi-ms.cc
*************** b824341b8f6fdb8eb1667425adf63db8  gcc/co
*** 3572,3581 ****
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
  d8a09875663911c993135dcb394a85a2  gcc/config/aarch64/aarch64-simd-builtins.def
  8f0acfd5455d9572e381b98441bf47a5  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! 3188584e5d5b43a5b7d7a5101e1c3b37  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  49d4ace4311e9b1d77ff31b3b8883769  gcc/config/aarch64/aarch64-speculation.cc
! ccd6947cd840e66d1fd0939f222554b6  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  8b08d9a2c35427a6672b61f1b4dcb6ee  gcc/config/aarch64/aarch64-sve-builtins-base.def
  a3c2d7ae7f5a958e8d85a84f0153cbc3  gcc/config/aarch64/aarch64-sve-builtins-base.h
  3b74ccb1bb630368ce4bcb319e098b43  gcc/config/aarch64/aarch64-sve-builtins-functions.h
--- 3572,3581 ----
  da15606bcbef7961db958c042bf81c05  gcc/config/aarch64/aarch64-simd-builtin-types.def
  d8a09875663911c993135dcb394a85a2  gcc/config/aarch64/aarch64-simd-builtins.def
  8f0acfd5455d9572e381b98441bf47a5  gcc/config/aarch64/aarch64-simd-pragma-builtins.def
! c3a2ed443506bfbfc4ed36cb25ef5e84  gcc/config/aarch64/aarch64-simd.md
  f27b31555e077ce25b7e0120a532cfdf  gcc/config/aarch64/aarch64-sme.md
  49d4ace4311e9b1d77ff31b3b8883769  gcc/config/aarch64/aarch64-speculation.cc
! e8ea80cf0a9cf06aaf082fccdec35c26  gcc/config/aarch64/aarch64-sve-builtins-base.cc
  8b08d9a2c35427a6672b61f1b4dcb6ee  gcc/config/aarch64/aarch64-sve-builtins-base.def
  a3c2d7ae7f5a958e8d85a84f0153cbc3  gcc/config/aarch64/aarch64-sve-builtins-base.h
  3b74ccb1bb630368ce4bcb319e098b43  gcc/config/aarch64/aarch64-sve-builtins-functions.h
*************** dee6542d81ff6dc82b52eb6d296ca061  gcc/co
*** 3590,3603 ****
  4b18b1308753ec5ff20bee8d6e7953d6  gcc/config/aarch64/aarch64-sve-builtins.cc
  0aaa296fe7e877e67b85468885fdb8b5  gcc/config/aarch64/aarch64-sve-builtins.def
  88f4473ff255da227dee1dbc66c11a5f  gcc/config/aarch64/aarch64-sve-builtins.h
! e4380ce8ebca750ee1afa500e3416b2a  gcc/config/aarch64/aarch64-sve.md
  99e2b5bf86169c73e478d3aa7c9f0ce4  gcc/config/aarch64/aarch64-sve2.md
  ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
  e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! 438120e458df424ecbbb5484b8d107be  gcc/config/aarch64/aarch64.cc
  753a74c5f9dbe74e4bb48a1c87e1f9b4  gcc/config/aarch64/aarch64.h
  f406cbc23fb4dfe94405d633070da548  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
--- 3590,3603 ----
  4b18b1308753ec5ff20bee8d6e7953d6  gcc/config/aarch64/aarch64-sve-builtins.cc
  0aaa296fe7e877e67b85468885fdb8b5  gcc/config/aarch64/aarch64-sve-builtins.def
  88f4473ff255da227dee1dbc66c11a5f  gcc/config/aarch64/aarch64-sve-builtins.h
! 64f79feffeec46d4287bb0bbde5d07c7  gcc/config/aarch64/aarch64-sve.md
  99e2b5bf86169c73e478d3aa7c9f0ce4  gcc/config/aarch64/aarch64-sve2.md
  ce756734c2d086ac2b6f48267acb68ea  gcc/config/aarch64/aarch64-sys-regs.def
  e101bed95b5d0264c364d8bcf1a7705f  gcc/config/aarch64/aarch64-tune.md
  dec4c8fd03ac5636ba08d9523bee06be  gcc/config/aarch64/aarch64-tuning-enums.def
  95775c91d04e9c5cacdd63e6802ca879  gcc/config/aarch64/aarch64-tuning-flags.def
  0eec0dd3dbc5fa83349625d27ac091df  gcc/config/aarch64/aarch64-vxworks.h
! ece526effb9f548bbcca883e282b6b08  gcc/config/aarch64/aarch64.cc
  753a74c5f9dbe74e4bb48a1c87e1f9b4  gcc/config/aarch64/aarch64.h
  f406cbc23fb4dfe94405d633070da548  gcc/config/aarch64/aarch64.md
  dabea943ce1adc1cd1db5e4de971fbeb  gcc/config/aarch64/aarch64.opt
*************** e219596493ffcd798a48b24b22b5e077  gcc/co
*** 3884,3898 ****
  7e576974bac73c35660c3df419ddabf4  gcc/config/avr/avr-devices.cc
  6d6cb0cd00b1f0982b71a547d16c599b  gcc/config/avr/avr-dimode.md
  b35a61cad18471c12c8d298d86fb1aa3  gcc/config/avr/avr-fixed.md
! 4b0f2e6eed1ea251598e926ddc1e28a1  gcc/config/avr/avr-log.cc
  c29ebb93bbe48714c53c5d397dedbe7f  gcc/config/avr/avr-mcus.def
  b05978bd2969a943265d3549c23b8b59  gcc/config/avr/avr-modes.def
  6c45ecfd28874e5791ad3e04448486e9  gcc/config/avr/avr-passes-fuse-move.h
  d893aaf4f67074e751cfdcb34f3a8fb9  gcc/config/avr/avr-passes.cc
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
! 2c1245f6b00a23bda3f0127e56f015c5  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! 1cbfa1a4d89286b623a49a7055e9db94  gcc/config/avr/avr.cc
  7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
  ceaabfa9f3ad7f42cc0e5417e7599750  gcc/config/avr/avr.md
  2c8e496ccc33a4c3b5ea998449a69941  gcc/config/avr/avr.opt
--- 3884,3898 ----
  7e576974bac73c35660c3df419ddabf4  gcc/config/avr/avr-devices.cc
  6d6cb0cd00b1f0982b71a547d16c599b  gcc/config/avr/avr-dimode.md
  b35a61cad18471c12c8d298d86fb1aa3  gcc/config/avr/avr-fixed.md
! dd94bc6b2b88cf9b874b0e6b50f17ac0  gcc/config/avr/avr-log.cc
  c29ebb93bbe48714c53c5d397dedbe7f  gcc/config/avr/avr-mcus.def
  b05978bd2969a943265d3549c23b8b59  gcc/config/avr/avr-modes.def
  6c45ecfd28874e5791ad3e04448486e9  gcc/config/avr/avr-passes-fuse-move.h
  d893aaf4f67074e751cfdcb34f3a8fb9  gcc/config/avr/avr-passes.cc
  7694efecfa1a86f5d70c1dcee34a8ffd  gcc/config/avr/avr-passes.def
! aed97a2b02b21f1df8924d81ddb284c9  gcc/config/avr/avr-protos.h
  4ee8705558d223eb1da7a1266af8c799  gcc/config/avr/avr-stdint.h
! 9af9f74ffb44867cb6d77db783b8b914  gcc/config/avr/avr.cc
  7e4633dda230d367d9859c29b7534ae4  gcc/config/avr/avr.h
  ceaabfa9f3ad7f42cc0e5417e7599750  gcc/config/avr/avr.md
  2c8e496ccc33a4c3b5ea998449a69941  gcc/config/avr/avr.opt
*************** c40c01da4802f0f9431628ebe3d73752  gcc/co
*** 4243,4249 ****
  5d36c928833df6662f7ca00cd7ce93ff  gcc/config/i386/bmmintrin.h
  26cd4d7bf7e6af86bf03c11fa4c6d439  gcc/config/i386/bsd.h
  df838ea382d3d2da7371deb51180cf60  gcc/config/i386/btver2.md
! bd9042674774f704d293f83b8ff37719  gcc/config/i386/c86-4g-m7.md
  4eed45e27bfe70305d922be37f809913  gcc/config/i386/c86-4g.md
  910cac3feca708c7269e72c17735ac87  gcc/config/i386/cet.h
  3af5d025bacebb10ac3eecc45363f3f5  gcc/config/i386/cetintrin.h
--- 4243,4249 ----
  5d36c928833df6662f7ca00cd7ce93ff  gcc/config/i386/bmmintrin.h
  26cd4d7bf7e6af86bf03c11fa4c6d439  gcc/config/i386/bsd.h
  df838ea382d3d2da7371deb51180cf60  gcc/config/i386/btver2.md
! afea153e44e811fa249af8fc0ec8e9ef  gcc/config/i386/c86-4g-m7m8.md
  4eed45e27bfe70305d922be37f809913  gcc/config/i386/c86-4g.md
  910cac3feca708c7269e72c17735ac87  gcc/config/i386/cet.h
  3af5d025bacebb10ac3eecc45363f3f5  gcc/config/i386/cetintrin.h
*************** ca79ed6b45db789c76673ad8ab56752f  gcc/co
*** 4272,4278 ****
  b5bf289667d7414f0f070d1d6195c05b  gcc/config/i386/djgpp.opt
  1b346c8cab1daa697ecd6c31e8e0e1d5  gcc/config/i386/djgpp.opt.urls
  6e6ed34837087e891dbe64159c7aceaf  gcc/config/i386/dragonfly.h
! 9a6a9e4051a54dbd274309dd1b2b21e4  gcc/config/i386/driver-i386.cc
  c3f8400c2cd15cc6fdc2c91d79a3039c  gcc/config/i386/driver-mingw32.cc
  f7e63c0c0bc7833d6119bebb9abe588d  gcc/config/i386/emmintrin.h
  9137411ae180f544dbdf04c71fa244bd  gcc/config/i386/enqcmdintrin.h
--- 4272,4278 ----
  b5bf289667d7414f0f070d1d6195c05b  gcc/config/i386/djgpp.opt
  1b346c8cab1daa697ecd6c31e8e0e1d5  gcc/config/i386/djgpp.opt.urls
  6e6ed34837087e891dbe64159c7aceaf  gcc/config/i386/dragonfly.h
! 54411bed22acbd3c66919279d3ea175d  gcc/config/i386/driver-i386.cc
  c3f8400c2cd15cc6fdc2c91d79a3039c  gcc/config/i386/driver-mingw32.cc
  f7e63c0c0bc7833d6119bebb9abe588d  gcc/config/i386/emmintrin.h
  9137411ae180f544dbdf04c71fa244bd  gcc/config/i386/enqcmdintrin.h
*************** b18770c338209a9276ef5d52a49bde7b  gcc/co
*** 4304,4331 ****
  0ba4d62f46027afe4bb4e8b65a9ab7c2  gcc/config/i386/i386-builtin.def
  8dbd55fdf807ba9b636b99fdf4277e4d  gcc/config/i386/i386-builtins.cc
  be7f06e3ea032dfb39fcda012c812683  gcc/config/i386/i386-builtins.h
! 1b045b6ffdf1c6d3f762c9b92c593851  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! fc2e9fb7c0b7126b23c7b1005dea314a  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 89f8d961f14839ac01947c10d6cddaeb  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
  d743703707286fafa2ce425b1d062ee0  gcc/config/i386/i386-jit.h
  31871dc86b95e35e45aee6cbaaddb18d  gcc/config/i386/i386-modes.def
! 411098a0ed20da8e4c730094b09bc0cf  gcc/config/i386/i386-options.cc
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
! 331a40abbc6a04f61b36fddb948545a0  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 633aad69fa1bd63557d9bf418fa36f57  gcc/config/i386/i386.cc
! ea7ae4e75b096ab3c94baa5216e47601  gcc/config/i386/i386.h
! 6258c4a4414f6ea1c91c89593a26d93a  gcc/config/i386/i386.md
  7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
  b9e680863ab278314c1f2990d2d04fcc  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
--- 4304,4331 ----
  0ba4d62f46027afe4bb4e8b65a9ab7c2  gcc/config/i386/i386-builtin.def
  8dbd55fdf807ba9b636b99fdf4277e4d  gcc/config/i386/i386-builtins.cc
  be7f06e3ea032dfb39fcda012c812683  gcc/config/i386/i386-builtins.h
! 50ad4cf0d315208b5fa32cdd199b1e01  gcc/config/i386/i386-c.cc
  a0261d6cc006fb86b99f338bdc94ae04  gcc/config/i386/i386-d.cc
  e9c7eebd4e344796f248c93990aa5166  gcc/config/i386/i386-d.h
! 4413b8a808e843b2cd2cf8d061666890  gcc/config/i386/i386-expand.cc
  386e1be7f608621b79970d4d036694f8  gcc/config/i386/i386-expand.h
! 60962eb72cae80af5ffcac0dd35ed997  gcc/config/i386/i386-features.cc
  52056c666db06e99d6978e69f82ed68d  gcc/config/i386/i386-features.h
  dca59d9c03f5b12366f9a926169f396d  gcc/config/i386/i386-isa.def
  848d1b1aa8faaad07d31b78764004e7f  gcc/config/i386/i386-jit.cc
  d743703707286fafa2ce425b1d062ee0  gcc/config/i386/i386-jit.h
  31871dc86b95e35e45aee6cbaaddb18d  gcc/config/i386/i386-modes.def
! 38dad08e84ed5898049e1a571842cfaf  gcc/config/i386/i386-options.cc
  106bb7043496820d393f0522178e1287  gcc/config/i386/i386-options.h
  2db6ec1e569468279f31d11379fe9d8f  gcc/config/i386/i386-opts.h
  9a75f0c116528508f4f48d128eceac38  gcc/config/i386/i386-passes.def
! b27f555de50f373127abeb8bcafb02cc  gcc/config/i386/i386-protos.h
  5b778b3296ea91dab0ca82338ca6828d  gcc/config/i386/i386-rust-and-jit.inc
  91b8b50cba997aef17a61929b5b55a87  gcc/config/i386/i386-rust.cc
  25b3947a11eb9ca52892133ddb36f3f2  gcc/config/i386/i386-rust.h
! 2d821519a90c2e5e525b1eb1aecfb78d  gcc/config/i386/i386.cc
! 2bca9c740dfd2497bcc671f8c94c1c22  gcc/config/i386/i386.h
! 7edcde1f005212316cbb06c4cfb9176c  gcc/config/i386/i386.md
  7f5e2eb20e3b7ca8af1b3ee7416e8eaf  gcc/config/i386/i386.opt
  b9e680863ab278314c1f2990d2d04fcc  gcc/config/i386/i386.opt.urls
  ec8782b40feb0fc958bf2d6974c70f12  gcc/config/i386/i386elf.h
*************** bc129bffab46f1b3f4e8385e129dad2d  gcc/co
*** 4350,4356 ****
  55b88c976269e37a537664690c4fab53  gcc/config/i386/mingw-w64.opt.urls
  cbcab4624612809c185831072d24010d  gcc/config/i386/mm3dnow.h
  aea42afde883cdcf14febc5bd88dba2f  gcc/config/i386/mmintrin.h
! aa43fdd9573bfdbe285f31f85eb533e3  gcc/config/i386/mmx.md
  fff495daa14e84982509339259b2cf60  gcc/config/i386/movdirintrin.h
  67270a67aaa79980333c4d8c2a80f360  gcc/config/i386/movrsintrin.h
  378170cac6027b6537c718aced0ca31c  gcc/config/i386/mwaitintrin.h
--- 4350,4356 ----
  55b88c976269e37a537664690c4fab53  gcc/config/i386/mingw-w64.opt.urls
  cbcab4624612809c185831072d24010d  gcc/config/i386/mm3dnow.h
  aea42afde883cdcf14febc5bd88dba2f  gcc/config/i386/mmintrin.h
! c613eb310898e95e30d283bc2dd3c0b3  gcc/config/i386/mmx.md
  fff495daa14e84982509339259b2cf60  gcc/config/i386/movdirintrin.h
  67270a67aaa79980333c4d8c2a80f360  gcc/config/i386/movrsintrin.h
  378170cac6027b6537c718aced0ca31c  gcc/config/i386/mwaitintrin.h
*************** de02b2c2a1d52a8d046ebc5e2a93c700  gcc/co
*** 4369,4377 ****
  aaad1a6a46fe0fae4f4f080ec25979a2  gcc/config/i386/pmmintrin.h
  e3a5e8aba8408fe534c82a5f831ac343  gcc/config/i386/popcntintrin.h
  0d9fe20f90097f2260c0d3dd226004b1  gcc/config/i386/ppro.md
! 581fabb9dde6289d06cc8cf5b9163fcc  gcc/config/i386/predicates.md
  49c1e916a421c63ab688a51702818f36  gcc/config/i386/prfchiintrin.h
! 2c409488751db6ad5078dd4951efbd09  gcc/config/i386/prfchwintrin.h
  ae0d15567f15a04257774556b0d4dab6  gcc/config/i386/raointintrin.h
  be5a1341757e73ebb9004398fc5687ea  gcc/config/i386/rdos.h
  81d4402adf95b7a118c98cc3e5796495  gcc/config/i386/rdos64.h
--- 4369,4377 ----
  aaad1a6a46fe0fae4f4f080ec25979a2  gcc/config/i386/pmmintrin.h
  e3a5e8aba8408fe534c82a5f831ac343  gcc/config/i386/popcntintrin.h
  0d9fe20f90097f2260c0d3dd226004b1  gcc/config/i386/ppro.md
! 18f6393936dee91ddd07f445b23414f4  gcc/config/i386/predicates.md
  49c1e916a421c63ab688a51702818f36  gcc/config/i386/prfchiintrin.h
! 868a894ab62c112487f47c41c273b276  gcc/config/i386/prfchwintrin.h
  ae0d15567f15a04257774556b0d4dab6  gcc/config/i386/raointintrin.h
  be5a1341757e73ebb9004398fc5687ea  gcc/config/i386/rdos.h
  81d4402adf95b7a118c98cc3e5796495  gcc/config/i386/rdos64.h
*************** db114ac74c87743a142214fddaad2687  gcc/co
*** 4386,4393 ****
  94b0dab281a8deeed2a925444aed552a  gcc/config/i386/sm3intrin.h
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
! 5b7a5d6bd6f2cbb1ca44a113b598ee56  gcc/config/i386/sol2.h
! 7e2011ef99b034b336fda9b3279a76d5  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
--- 4386,4393 ----
  94b0dab281a8deeed2a925444aed552a  gcc/config/i386/sm3intrin.h
  92210572b9f9f6481e4649a42d9ac3b0  gcc/config/i386/sm4intrin.h
  5298b8261e081859bbf068b710158e8f  gcc/config/i386/smmintrin.h
! 592f748733487ebc51326f6cbf8f1f54  gcc/config/i386/sol2.h
! 7d09275cd0e068df3d7dd3fe8543bce7  gcc/config/i386/sse.md
  52e0114cb9ab8d55aac3c17d06657d71  gcc/config/i386/ssemath.h
  8a6ab9e02097018bc9f1c2b347d29cfa  gcc/config/i386/stringop.def
  a626b4e6cd3e15f4e9d5c769b6391243  gcc/config/i386/subst.md
*************** b4cde95b709fc93c90bf4d6b3edc7fd0  gcc/co
*** 4435,4446 ****
  c2cfb83eb28cbbc487a62ee85650286e  gcc/config/i386/x-mingw32
  5d8e585db0fd38674f683b0e8aafb897  gcc/config/i386/x-mingw32-utf8
  c98679993951718aa4177acc76b998b3  gcc/config/i386/x86-64.h
! 49c0e2f90999b761f88c9df6a6ac03a9  gcc/config/i386/x86-tune-costs.h
  1a895f070eb6bb8cabffb78a3daa7738  gcc/config/i386/x86-tune-sched-atom.cc
  33b66e2688b9fbf775f4dc603512548f  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
! 965a22f0bdb084c3f0d48fb944930b22  gcc/config/i386/x86-tune-sched.cc
! 6487e794f0f8b2d52de2f12996fad7ef  gcc/config/i386/x86-tune.def
  75b1f0e8f79cfd04f898a4099aff669d  gcc/config/i386/x86gprintrin.h
  e5335d55cec73bd3270862ccac7a02e8  gcc/config/i386/x86intrin.h
  76f88cf5ac857d392ddb81b244c5b9b0  gcc/config/i386/xm-cygwin.h
--- 4435,4446 ----
  c2cfb83eb28cbbc487a62ee85650286e  gcc/config/i386/x-mingw32
  5d8e585db0fd38674f683b0e8aafb897  gcc/config/i386/x-mingw32-utf8
  c98679993951718aa4177acc76b998b3  gcc/config/i386/x86-64.h
! 1e658f4f5595aba100e6c8f5626bb81e  gcc/config/i386/x86-tune-costs.h
  1a895f070eb6bb8cabffb78a3daa7738  gcc/config/i386/x86-tune-sched-atom.cc
  33b66e2688b9fbf775f4dc603512548f  gcc/config/i386/x86-tune-sched-bd.cc
  864e537089cc92c5002cefd76ede977a  gcc/config/i386/x86-tune-sched-core.cc
! 41c7d7433f3ee2960a480fccdce3dc37  gcc/config/i386/x86-tune-sched.cc
! 4219a3cccd9526b259ac2189044ca961  gcc/config/i386/x86-tune.def
  75b1f0e8f79cfd04f898a4099aff669d  gcc/config/i386/x86gprintrin.h
  e5335d55cec73bd3270862ccac7a02e8  gcc/config/i386/x86intrin.h
  76f88cf5ac857d392ddb81b244c5b9b0  gcc/config/i386/xm-cygwin.h
*************** c7eeb48ab4223ecfdb09fa5e4ce61d71  gcc/co
*** 4559,4565 ****
  dadec2097ca9c4947a49a5766ac8ee89  gcc/config/loongarch/loongarch-str.h
  fc623524d75c7561f85f81615ecad0ac  gcc/config/loongarch/loongarch-target-attr.cc
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
! ee35709134b24a86a3c28cbd76458915  gcc/config/loongarch/loongarch.cc
  ad66539c6bf3f1a1fe18304e126ac7fc  gcc/config/loongarch/loongarch.h
  1bee87f91939a40f1c758e1f7624494a  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
--- 4559,4565 ----
  dadec2097ca9c4947a49a5766ac8ee89  gcc/config/loongarch/loongarch-str.h
  fc623524d75c7561f85f81615ecad0ac  gcc/config/loongarch/loongarch-target-attr.cc
  3cfb174db8bc99a9361e597a3e9bd35e  gcc/config/loongarch/loongarch-tune.h
! d56143e5f5703b89f55fb70217a28ac1  gcc/config/loongarch/loongarch.cc
  ad66539c6bf3f1a1fe18304e126ac7fc  gcc/config/loongarch/loongarch.h
  1bee87f91939a40f1c758e1f7624494a  gcc/config/loongarch/loongarch.md
  62f9bea81246c3dac622d969dabefc1b  gcc/config/loongarch/loongarch.opt
*************** a0561d5189d936a2b3f76e586c0a2aa1  gcc/co
*** 4725,4731 ****
  9cb506f69bfb4828b4dc81c2e14b3238  gcc/config/mips/mips-ps-3d.md
  345d90586064a6b98108ed27f48d4599  gcc/config/mips/mips-tables.opt
  216c87627424d946f6245f736be7b5f1  gcc/config/mips/mips-tables.opt.urls
! 07dd8fec1f4227f9ddab8943df36d424  gcc/config/mips/mips.cc
  5341095aad822bd0c82d793e8fcd163a  gcc/config/mips/mips.h
  49c4faf7412dfa6a56c131062bfb11b4  gcc/config/mips/mips.md
  09db4f2e8c03333595305c1b1c1c0fc7  gcc/config/mips/mips.opt
--- 4725,4731 ----
  9cb506f69bfb4828b4dc81c2e14b3238  gcc/config/mips/mips-ps-3d.md
  345d90586064a6b98108ed27f48d4599  gcc/config/mips/mips-tables.opt
  216c87627424d946f6245f736be7b5f1  gcc/config/mips/mips-tables.opt.urls
! 6780eb247f72ed9cdaa498ae66ca7454  gcc/config/mips/mips.cc
  5341095aad822bd0c82d793e8fcd163a  gcc/config/mips/mips.h
  49c4faf7412dfa6a56c131062bfb11b4  gcc/config/mips/mips.md
  09db4f2e8c03333595305c1b1c1c0fc7  gcc/config/mips/mips.opt
*************** f913aafadf901518cfbd1709bf303845  gcc/co
*** 5013,5025 ****
  8d50880f7d63f8f9ccbabf76a8de5cff  gcc/config/riscv/andes.def
  3781b6037a5c704d1ff44bb98a38265e  gcc/config/riscv/andes.md
  4a021a2fda3f1fcb2ebb0b295d676d96  gcc/config/riscv/andes_vector.h
! f8ec88f62721861232564e0992e62a62  gcc/config/riscv/arch-canonicalize
  b7544a05ff53accc3d2defcb758626a9  gcc/config/riscv/arcv-rhx100.md
  4a634d8ec9f394f560c8538634cd937a  gcc/config/riscv/arcv-rmx100.md
! f49571de41621c4751ab6aefa9b372ee  gcc/config/riscv/autovec-opt.md
! ba4c660e0aeebd868870a318ae434e75  gcc/config/riscv/autovec.md
! 18e8deb10c1d46dfbfb3ec75cf2ee584  gcc/config/riscv/bitmanip.md
! db5b3680a38178246dffb8a5874ebaf9  gcc/config/riscv/constraints.md
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
  e2422c2fce6d2a652b60158b9d2bad0e  gcc/config/riscv/crypto.md
--- 5013,5025 ----
  8d50880f7d63f8f9ccbabf76a8de5cff  gcc/config/riscv/andes.def
  3781b6037a5c704d1ff44bb98a38265e  gcc/config/riscv/andes.md
  4a021a2fda3f1fcb2ebb0b295d676d96  gcc/config/riscv/andes_vector.h
! d9ed529190073197d920aa6a15ff07f7  gcc/config/riscv/arch-canonicalize
  b7544a05ff53accc3d2defcb758626a9  gcc/config/riscv/arcv-rhx100.md
  4a634d8ec9f394f560c8538634cd937a  gcc/config/riscv/arcv-rmx100.md
! 67bbc5a81e29ba7c346e27e6a7782608  gcc/config/riscv/autovec-opt.md
! 49c1131e6b1116d7b606f67b60199a26  gcc/config/riscv/autovec.md
! ba775667dc55efc0e0dbc0705c3cdd87  gcc/config/riscv/bitmanip.md
! 79dfcd2a0bedb02de4194552f2712fe0  gcc/config/riscv/constraints.md
  cea5b702841429deff64e2e6fd0b626f  gcc/config/riscv/corev.def
  3541ce4817aa1b4ca8a8e3799ba716d8  gcc/config/riscv/corev.md
  e2422c2fce6d2a652b60158b9d2bad0e  gcc/config/riscv/crypto.md
*************** bdea5a038db730633426d4ab8652a37c  gcc/co
*** 5058,5065 ****
  6aef0384f848e091b1f84d7e64ab667c  gcc/config/riscv/riscv-ext-spacemit.def
  0d561344b80507521c8e686db17fd207  gcc/config/riscv/riscv-ext-thead.def
  ca88603cd61372d621963af0d282a93b  gcc/config/riscv/riscv-ext-ventana.def
! 2e065322e5546447dd9bbd9552d4e537  gcc/config/riscv/riscv-ext.def
! 9e949c6f7a1518c233014cac46a6d437  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  055aff307d7b174891aad40963ef1a9f  gcc/config/riscv/riscv-feature-bits.h
  70f0932c77decbbcedce26f2f38b3a3e  gcc/config/riscv/riscv-ftypes.def
--- 5058,5065 ----
  6aef0384f848e091b1f84d7e64ab667c  gcc/config/riscv/riscv-ext-spacemit.def
  0d561344b80507521c8e686db17fd207  gcc/config/riscv/riscv-ext-thead.def
  ca88603cd61372d621963af0d282a93b  gcc/config/riscv/riscv-ext-ventana.def
! 35cc6091445e5818478b68bce82225ed  gcc/config/riscv/riscv-ext.def
! ce40c79a3b7c82c242dd41b984368a7f  gcc/config/riscv/riscv-ext.opt
  8463b74f5d66e1a7f0d58a7ae087d8ad  gcc/config/riscv/riscv-ext.opt.urls
  055aff307d7b174891aad40963ef1a9f  gcc/config/riscv/riscv-feature-bits.h
  70f0932c77decbbcedce26f2f38b3a3e  gcc/config/riscv/riscv-ftypes.def
*************** f345cbe9d8c50068508e75fe59e6b4a6  gcc/co
*** 5069,5075 ****
  7580ff2b6ee1a7e6e08368bacae2ac95  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  e1ac1647825642c1e551b9a174630bd6  gcc/config/riscv/riscv-profiles.def
! 90d461854d2e3adf0a5ba9438d84a546  gcc/config/riscv/riscv-protos.h
  2b6774d7dd7980d9eb3f4f24ed1b3e45  gcc/config/riscv/riscv-scalar-crypto.def
  01798b6988317cc1d7a76908a68f458a  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
--- 5069,5075 ----
  7580ff2b6ee1a7e6e08368bacae2ac95  gcc/config/riscv/riscv-opts.h
  b8f6d36a9d7d3ef28a80c20bec990411  gcc/config/riscv/riscv-passes.def
  e1ac1647825642c1e551b9a174630bd6  gcc/config/riscv/riscv-profiles.def
! 86e2659771fdfcf539c99063fee6a21a  gcc/config/riscv/riscv-protos.h
  2b6774d7dd7980d9eb3f4f24ed1b3e45  gcc/config/riscv/riscv-scalar-crypto.def
  01798b6988317cc1d7a76908a68f458a  gcc/config/riscv/riscv-selftests.cc
  41d585e61cee0deacc33bd07c93e79e2  gcc/config/riscv/riscv-shorten-memrefs.cc
*************** ee8122b7c30f11ad5dc682dad7cf7f55  gcc/co
*** 5095,5103 ****
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! d6b68b59721d1ba7ae4ef5f0236c7a55  gcc/config/riscv/riscv.cc
  0b4d02debcffa4764cfdba37ddd0f549  gcc/config/riscv/riscv.h
! 4093ba6fa10059656cd832cf940d8726  gcc/config/riscv/riscv.md
  889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
  712042d47c904acf7307129ab3a48df3  gcc/config/riscv/riscv.opt.urls
  68c8996d7ac73df46c6c1d49d8839ee0  gcc/config/riscv/riscv_bitmanip.h
--- 5095,5103 ----
  3205f1e7859c9ef2f9de42d862780b0a  gcc/config/riscv/riscv-vsetvl.cc
  142fb9988d1433586e8fa0e3b072f655  gcc/config/riscv/riscv-vsetvl.def
  d87a1f40dfc9d93ed1ee9eb9243e12e3  gcc/config/riscv/riscv-zicfilp.cc
! f632af5a70328495b4db844ac40839b6  gcc/config/riscv/riscv.cc
  0b4d02debcffa4764cfdba37ddd0f549  gcc/config/riscv/riscv.h
! b3dc3caafb5f777606faf403f7929c33  gcc/config/riscv/riscv.md
  889bc6068f70f03b008968821d92ad40  gcc/config/riscv/riscv.opt
  712042d47c904acf7307129ab3a48df3  gcc/config/riscv/riscv.opt.urls
  68c8996d7ac73df46c6c1d49d8839ee0  gcc/config/riscv/riscv_bitmanip.h
*************** fe202105dd9e81b9ce8fdcc11d52c294  gcc/co
*** 5133,5140 ****
  670dbcd81c0f3fdaf864448ca22368e5  gcc/config/riscv/tt-ascalon-d8.md
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
! a1ab9c2ceb56674539793f23371d6e4e  gcc/config/riscv/vector-iterators.md
! 2e571cf04aba79dc70d590cce43da002  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
--- 5133,5140 ----
  670dbcd81c0f3fdaf864448ca22368e5  gcc/config/riscv/tt-ascalon-d8.md
  dcbac9d3c6831ff1cd18effca9c7bb28  gcc/config/riscv/vector-bfloat16.md
  d321bd9f102b0926d5d2c56c36ad6853  gcc/config/riscv/vector-crypto.md
! eeff11b93491fb7c669f458a75ceb193  gcc/config/riscv/vector-iterators.md
! 0f5f9fb340863eb99ecbd71b0aeb2843  gcc/config/riscv/vector.md
  18d213c106fe52eebc74017d5ff892ce  gcc/config/riscv/xiangshan.md
  a398dfa970d2d1459a986ec657c751a3  gcc/config/riscv/xt-c908.md
  39ba96197510d4ac114a827d7ffbf806  gcc/config/riscv/zc.md
*************** d70f08b893e019d12b16dc9a70754ef9  gcc/co
*** 5176,5182 ****
  efc4d9cc6fcf24af7ea6e89c0c82127f  gcc/config/rs6000/aix72.h
  1d313bdc511e984bdf559d61807bde14  gcc/config/rs6000/aix73.h
  ae4bd752599ffdd2833c6e78d03d39f0  gcc/config/rs6000/altivec.h
! f03bdef1224a610cfb7130f3c687b87f  gcc/config/rs6000/altivec.md
  505a3f0e71f54fbea2fbd87b1c032185  gcc/config/rs6000/amo.h
  2b409a82a1747675112a04705e01d157  gcc/config/rs6000/biarch64.h
  f83fd3bf0d9fbc30c9401eec549fdc2c  gcc/config/rs6000/bmi2intrin.h
--- 5176,5182 ----
  efc4d9cc6fcf24af7ea6e89c0c82127f  gcc/config/rs6000/aix72.h
  1d313bdc511e984bdf559d61807bde14  gcc/config/rs6000/aix73.h
  ae4bd752599ffdd2833c6e78d03d39f0  gcc/config/rs6000/altivec.h
! 419efb9e6b152f546f921bc6bd175c11  gcc/config/rs6000/altivec.md
  505a3f0e71f54fbea2fbd87b1c032185  gcc/config/rs6000/amo.h
  2b409a82a1747675112a04705e01d157  gcc/config/rs6000/biarch64.h
  f83fd3bf0d9fbc30c9401eec549fdc2c  gcc/config/rs6000/bmi2intrin.h
*************** b534d6922b2ac8fcdec1c19d8a7bdb13  gcc/co
*** 5240,5262 ****
  c79696c3d7958935d4122048b9bb5f92  gcc/config/rs6000/ppc-asm.h
  e97302b0144b183500470a0f7f84ad57  gcc/config/rs6000/ppc-auxv.h
  db237fc1717a4075e7b9480205a32fd5  gcc/config/rs6000/ppu_intrinsics.h
! 25ea383c1f398321c28d21896c9d79db  gcc/config/rs6000/predicates.md
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
! 952a15095d55ed13cac7857cfcd12d7e  gcc/config/rs6000/rs6000-builtin.cc
! f036412353f68a4e76f55c35b8f3e4ee  gcc/config/rs6000/rs6000-builtins.def
  15e52baa355b0c3b725c3e6e55524af0  gcc/config/rs6000/rs6000-c.cc
  f9e94bf7a9305993de9ddd700311aaaa  gcc/config/rs6000/rs6000-call.cc
  4579aba833c122ad0e6a91b573653e2c  gcc/config/rs6000/rs6000-cpus.def
  7b860836fdc33cdfdd29f6348a553096  gcc/config/rs6000/rs6000-d.cc
  1ac6ae1e7d6d83d76667769f7166b9a7  gcc/config/rs6000/rs6000-d.h
! 19cf935ce7de136fe7ef1a4a6350f541  gcc/config/rs6000/rs6000-gen-builtins.cc
  c5022a5818a013ca208704a71fbd6d48  gcc/config/rs6000/rs6000-internal.h
  68da03c0d0c1dfafebf4ba706e6d3ff9  gcc/config/rs6000/rs6000-linux.cc
  cd5e92a42bcde77a84b9fbe9e0a3238b  gcc/config/rs6000/rs6000-logue.cc
  108998dcf0201ccd3e147d71251ca9f6  gcc/config/rs6000/rs6000-modes.def
  e6f2820356a7ee18c353376ab3490fb6  gcc/config/rs6000/rs6000-opts.h
! de7c129a7b61a7dbc765b98ee8e58df3  gcc/config/rs6000/rs6000-overload.def
  857d6101dc080e798b79af7bdbacfa9d  gcc/config/rs6000/rs6000-p8swap.cc
  ed259dbc10dcc21110d2d0d8ddde7497  gcc/config/rs6000/rs6000-passes.def
  384645a6c72587ac7501915a0c737e64  gcc/config/rs6000/rs6000-pcrel-opt.cc
--- 5240,5262 ----
  c79696c3d7958935d4122048b9bb5f92  gcc/config/rs6000/ppc-asm.h
  e97302b0144b183500470a0f7f84ad57  gcc/config/rs6000/ppc-auxv.h
  db237fc1717a4075e7b9480205a32fd5  gcc/config/rs6000/ppu_intrinsics.h
! 848a5a527b1584089ecf12aae20b7ca6  gcc/config/rs6000/predicates.md
  63ccc96ff2cef948c080eac4455d02b1  gcc/config/rs6000/rbtree.cc
  8ece9ca8167f5056fa411488a97c6131  gcc/config/rs6000/rbtree.h
! dc3521aad04477a2e9da096fa78d3fd6  gcc/config/rs6000/rs6000-builtin.cc
! ec1b2522c97c6fa2287c44de0618f714  gcc/config/rs6000/rs6000-builtins.def
  15e52baa355b0c3b725c3e6e55524af0  gcc/config/rs6000/rs6000-c.cc
  f9e94bf7a9305993de9ddd700311aaaa  gcc/config/rs6000/rs6000-call.cc
  4579aba833c122ad0e6a91b573653e2c  gcc/config/rs6000/rs6000-cpus.def
  7b860836fdc33cdfdd29f6348a553096  gcc/config/rs6000/rs6000-d.cc
  1ac6ae1e7d6d83d76667769f7166b9a7  gcc/config/rs6000/rs6000-d.h
! b1bbe3e57fef362260e8c8ccae80c4ba  gcc/config/rs6000/rs6000-gen-builtins.cc
  c5022a5818a013ca208704a71fbd6d48  gcc/config/rs6000/rs6000-internal.h
  68da03c0d0c1dfafebf4ba706e6d3ff9  gcc/config/rs6000/rs6000-linux.cc
  cd5e92a42bcde77a84b9fbe9e0a3238b  gcc/config/rs6000/rs6000-logue.cc
  108998dcf0201ccd3e147d71251ca9f6  gcc/config/rs6000/rs6000-modes.def
  e6f2820356a7ee18c353376ab3490fb6  gcc/config/rs6000/rs6000-opts.h
! 1a71e197cd01d5d44a4a904978186144  gcc/config/rs6000/rs6000-overload.def
  857d6101dc080e798b79af7bdbacfa9d  gcc/config/rs6000/rs6000-p8swap.cc
  ed259dbc10dcc21110d2d0d8ddde7497  gcc/config/rs6000/rs6000-passes.def
  384645a6c72587ac7501915a0c737e64  gcc/config/rs6000/rs6000-pcrel-opt.cc
*************** d3a1c98fd13be04e1250b073cb8dcef2  gcc/co
*** 5264,5272 ****
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 270659d587c12b567f28c54d6f3d3522  gcc/config/rs6000/rs6000.cc
  4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
! f25105f45029b1ea97f9b32a1041f7f6  gcc/config/rs6000/rs6000.md
  e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
  80708ca71755b0d8d354f113f0617617  gcc/config/rs6000/rs6000.opt.urls
  89d4cadf8216efa86b72204e660cc4b0  gcc/config/rs6000/rs64.md
--- 5264,5272 ----
  e6d989b64b588e3c16ea579031fed5ab  gcc/config/rs6000/rs6000-string.cc
  835f22c956cc4deb83970ee9a9b5b79b  gcc/config/rs6000/rs6000-tables.opt
  ce8de9a27f36b759a69194616c02eb38  gcc/config/rs6000/rs6000-tables.opt.urls
! 5cbc4a1ab47e7affb16e68211416d634  gcc/config/rs6000/rs6000.cc
  4517b5e939c3d673f16baceb4e1a371a  gcc/config/rs6000/rs6000.h
! 8fab818cce107dc89e5776dc2ba74949  gcc/config/rs6000/rs6000.md
  e407423336f12658b509205c3e8f7130  gcc/config/rs6000/rs6000.opt
  80708ca71755b0d8d354f113f0617617  gcc/config/rs6000/rs6000.opt.urls
  89d4cadf8216efa86b72204e660cc4b0  gcc/config/rs6000/rs64.md
*************** f11925c88524d2fd457bf77944da1302  gcc/co
*** 5306,5312 ****
  da79297ad0c4c71553a67c1c8659d7f0  gcc/config/rs6000/tmmintrin.h
  88417b4d808d053378108ca755b5e5ce  gcc/config/rs6000/vec_types.h
  3392062820ad067ae3abd25781a80d07  gcc/config/rs6000/vector.md
! 5c0b00763ea83f7e38a3012784f40dca  gcc/config/rs6000/vsx.md
  f7ab50c00153b9422ed788ad3b431920  gcc/config/rs6000/vxworks.h
  879b35d5e026800c40c13e663df8c5f9  gcc/config/rs6000/vxworksae.h
  aa45c89828fac6551d8d57309cf26ec0  gcc/config/rs6000/vxworksmils.h
--- 5306,5312 ----
  da79297ad0c4c71553a67c1c8659d7f0  gcc/config/rs6000/tmmintrin.h
  88417b4d808d053378108ca755b5e5ce  gcc/config/rs6000/vec_types.h
  3392062820ad067ae3abd25781a80d07  gcc/config/rs6000/vector.md
! 462101256f807ed006e9a0a6692712d8  gcc/config/rs6000/vsx.md
  f7ab50c00153b9422ed788ad3b431920  gcc/config/rs6000/vxworks.h
  879b35d5e026800c40c13e663df8c5f9  gcc/config/rs6000/vxworksae.h
  aa45c89828fac6551d8d57309cf26ec0  gcc/config/rs6000/vxworksmils.h
*************** ea440bcad8a276afecfcff0ce6aae6fe  gcc/co
*** 5363,5371 ****
  14c40f85d99aad740c052f55703baf70  gcc/config/s390/s390-opts.h
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
! 502c060ec0d9f2a1f649ec6f36b1bade  gcc/config/s390/s390.cc
  ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
! f64e1697e0a9a67ef3020649b7e0d7cd  gcc/config/s390/s390.md
  ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
  90a97a731513f3119bb12e022497e9ab  gcc/config/s390/s390.opt.urls
  07efe01a921b4fb261d6e59abf21a268  gcc/config/s390/s390intrin.h
--- 5363,5371 ----
  14c40f85d99aad740c052f55703baf70  gcc/config/s390/s390-opts.h
  aa396b24681954cbcd0cd64bf19d469c  gcc/config/s390/s390-passes.def
  4a9d0190b77f29fbb14fa9706732f297  gcc/config/s390/s390-protos.h
! 29c1637ea8d0fc1f3065a75262ec1eac  gcc/config/s390/s390.cc
  ae1d48d5851707124525babf8404d97f  gcc/config/s390/s390.h
! 15fd6efd3a576891cc1cc229f258002f  gcc/config/s390/s390.md
  ae1754efd7785ad08c6cc930dd08c7ae  gcc/config/s390/s390.opt
  90a97a731513f3119bb12e022497e9ab  gcc/config/s390/s390.opt.urls
  07efe01a921b4fb261d6e59abf21a268  gcc/config/s390/s390intrin.h
*************** eabefa7848e30cb14ae3473ccb4f1c5e  gcc/co
*** 5633,5651 ****
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! 8f8b790ef0ff1d714dea50e9c7a0afe6  gcc/configure
! 741d9d4b8a7689610a9644ff94a2b78b  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
  f10070ffed6ef90f3b58e4d55b58a6a8  gcc/convert.cc
  4b687a22d792003ae6404ce923c8e376  gcc/convert.h
! 98b529c2567eb4eccedda792ef33b9c0  gcc/coretypes.h
  c5ad0142a191862e3e81ecd3573754b3  gcc/coroutine-builtins.def
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! ce39b7b5bb370ff2a83c8eb8e5367f86  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5633,5651 ----
  ab92d7ead48857ad8dfb2fbadb7845ab  gcc/config/xtensa/xtensa.md
  411cab921f0a965cbb5411dc8b28fc82  gcc/config/xtensa/xtensa.opt
  107b37908c9eb8a26c5b7a6074ccb338  gcc/config/xtensa/xtensa.opt.urls
! ce5782b52624fd569bfe409f5f5c2ee2  gcc/configure
! af339b554d2ec717f4bef66ffab73ea2  gcc/configure.ac
  a2bfe87830136c2d55b591b943cecd3f  gcc/configure.tgt
  8a46839a73059f70ef105be9706c2554  gcc/context.cc
  08023c1005def168a8b675813b95d9f4  gcc/context.h
  f10070ffed6ef90f3b58e4d55b58a6a8  gcc/convert.cc
  4b687a22d792003ae6404ce923c8e376  gcc/convert.h
! 1d6177bcfdfbc417a5af6279bed8eff0  gcc/coretypes.h
  c5ad0142a191862e3e81ecd3573754b3  gcc/coroutine-builtins.def
  a424415c72a544d25e6518e1cf699300  gcc/coroutine-passes.cc
  11fc0e33834de003c7fdd80427589041  gcc/coverage.cc
  d27317cee558d7c78afbdb6529e36649  gcc/coverage.h
! fd28dee1f4c7c5b40a0ed59446e0117e  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** f39635970f98bbc4591f6363fe70504b  gcc/cp
*** 5682,5693 ****
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d9b8a76735523ab737e8778b90397d97  gcc/cp/Make-lang.in
! 4b051dfe287ed367b282a42c1c9e55ae  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
! ee0d659057bf0afbc31841764c4fe443  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! 4562f1d8705939212883482608ce49d0  gcc/cp/constexpr.cc
  44493039c741da0cbddb5a8d6d93701a  gcc/cp/constraint.cc
  51c78420b3d7944f7ee182eb3f9c7175  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
--- 5682,5693 ----
  c1c7801b9b0f379e702a4f6cb83972e7  gcc/cp/ChangeLog.ptr
  9aa3cd9f75c785de9f51446e3f295515  gcc/cp/ChangeLog.tree-ssa
  d9b8a76735523ab737e8778b90397d97  gcc/cp/Make-lang.in
! 879d37362c37f6858835d5ba135f6503  gcc/cp/call.cc
  144dd1ae510a7436b569b007470b62da  gcc/cp/cfns.gperf
  39dd4c5a96c7ea132eb3c7ed039a065e  gcc/cp/cfns.h
! d9da20cf73d3f0c05b969e36b5591492  gcc/cp/class.cc
  e51f295e858583af5f9cf88b9530adf7  gcc/cp/config-lang.in
! 6e0f4e68b81b284c5687dfc53ff47f10  gcc/cp/constexpr.cc
  44493039c741da0cbddb5a8d6d93701a  gcc/cp/constraint.cc
  51c78420b3d7944f7ee182eb3f9c7175  gcc/cp/contracts.cc
  e77a681f560f3e9500f126febdc67ef6  gcc/cp/contracts.h
*************** eba8d8a1725223519fba5d4d69afd5c9  gcc/cp
*** 5700,5712 ****
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
  461c8f732438052ea1ab7eabb72f0604  gcc/cp/cp-tree.def
! 6ac64a8e849f6e2512915e2981815dd3  gcc/cp/cp-tree.h
! e2854dfa428fab45fc41bf58fef71e61  gcc/cp/cp-ubsan.cc
  9f3892d82a5fde05b0ab9fd164ad7177  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! 8e1f1cc3eaa4b9624b63890764c225f9  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
--- 5700,5712 ----
  a2555a7340b152d673783c07a3d102bb  gcc/cp/cp-objcp-common.h
  ffdd05782c93c0567486bb7ed7eee65a  gcc/cp/cp-trait.def
  461c8f732438052ea1ab7eabb72f0604  gcc/cp/cp-tree.def
! cdf476ca9d7dcc9c6f4e9e46f415a4ae  gcc/cp/cp-tree.h
! 13d136a72a2aff80be380103d1c27ed5  gcc/cp/cp-ubsan.cc
  9f3892d82a5fde05b0ab9fd164ad7177  gcc/cp/cvt.cc
  f067718cf3d629084d8347c4e017afd4  gcc/cp/cxx-pretty-print.cc
  1d04eec9859d91686ca501e9221f30ac  gcc/cp/cxx-pretty-print.h
  82a41d873e1c90067158c89e6c1bd4bb  gcc/cp/cxxapi-data.csv
! df3da39a3b152006e5e828564332e50b  gcc/cp/decl.cc
  6b0c9433f7d3f129a44b59d54babb4eb  gcc/cp/decl.h
  f7fd6f8b2943baf2a508fd07e569c802  gcc/cp/decl2.cc
  12ccd5244973d74a0536adf58261b416  gcc/cp/dump.cc
*************** f4c33376dcbcbb2b49c9a11ec2911ad9  gcc/cp
*** 5716,5749 ****
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  312df0090f34c36193263da66b5ecbd7  gcc/cp/g++spec.cc
  a29b3e9192657e81a1574fb99466348d  gcc/cp/gen-cxxapi-file.py
! 6043506209835b0aa719f93eded32ee8  gcc/cp/init.cc
  3cc97a4224ad8d5294fa1a55f8777b44  gcc/cp/lambda.cc
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  ae7c1d49c3ae546f4a980c3ebc22690d  gcc/cp/lex.cc
  e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp/logic.cc
! 5d1a4684e3937405082415b4cf902086  gcc/cp/mangle.cc
  3d68343c4a9d614bb00b91ad53e79a0b  gcc/cp/mapper-client.cc
  27465babcaf6195d4f438ed36bdd6aff  gcc/cp/mapper-client.h
! 4be7487ea09330ba02fb0695bc32c905  gcc/cp/mapper-resolver.cc
  54609938d396496c7c5bf3f4cbfddaec  gcc/cp/metafns.gperf
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
! 287c9e2e32dbcb7c0e31ade5b6075f26  gcc/cp/method.cc
! 8e86eb6d046a3ca86dc6d33e08e4532e  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
! 94a0863bb5120d567c717d513ff59a1d  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! d880956f1c03e6163f884d302199b1a9  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 5e3e0cc185af2831fc735ba9ada893f3  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! 7d361620c27bdc61cd0eeef0142cc71d  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
! 8c2076ff5230f0274ee92ce2321ffab5  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! 792a726043c3ff0c79b2c075e7efa243  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
  f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp/typeck.cc
  977a0037d150893837512a88f03fbdad  gcc/cp/typeck2.cc
--- 5716,5749 ----
  447ddbe59eba62b9a389b9ba11701cfc  gcc/cp/friend.cc
  312df0090f34c36193263da66b5ecbd7  gcc/cp/g++spec.cc
  a29b3e9192657e81a1574fb99466348d  gcc/cp/gen-cxxapi-file.py
! fcac46fa653b5161f99b9e17df91bbb5  gcc/cp/init.cc
  3cc97a4224ad8d5294fa1a55f8777b44  gcc/cp/lambda.cc
  bc388fb8287f2de7cdf4d78eb8f5d998  gcc/cp/lang-specs.h
  ae7c1d49c3ae546f4a980c3ebc22690d  gcc/cp/lex.cc
  e4ccdd9cbe95dde4cce27394a7613dd9  gcc/cp/logic.cc
! 90440d154244c1156fd0ca2486e99de4  gcc/cp/mangle.cc
  3d68343c4a9d614bb00b91ad53e79a0b  gcc/cp/mapper-client.cc
  27465babcaf6195d4f438ed36bdd6aff  gcc/cp/mapper-client.h
! 40847be23013a3a5aba415a0a2002926  gcc/cp/mapper-resolver.cc
  54609938d396496c7c5bf3f4cbfddaec  gcc/cp/metafns.gperf
  04fe5bec0bf79fcb3680aec9913ebc29  gcc/cp/metafns.h
! 5d378a90b5c1e3a3fc539ad68b2492c2  gcc/cp/method.cc
! 0ec0e2eb8b9559fc2042971a8083931b  gcc/cp/module.cc
  36a03818ce45c595866cc280493ac112  gcc/cp/name-lookup.cc
! 8448a5bd06f68228b8367e5fcdf57f98  gcc/cp/name-lookup.h
  54cd670407c3fc4f1778f1561e89ae99  gcc/cp/operators.def
  9efebf39da56d681d4405dfb9e55e3f5  gcc/cp/optimize.cc
! 63b3fc2981b655a151a01f7e210e1f67  gcc/cp/parser.cc
  fbc41b26ea2a336d3636c9d9c565d845  gcc/cp/parser.h
! 1102c1a166e35e37a627560910dd11c0  gcc/cp/pt.cc
  25322928eaff39cf167372554c639e02  gcc/cp/ptree.cc
! f39fc4606cde65082e8323484206305b  gcc/cp/reflect.cc
  6ae3f1ff3ba804579da14445501f9181  gcc/cp/rtti.cc
  e6a800b8f2f93cd8ed05ee026f824eca  gcc/cp/search.cc
! 964718bf537b7b8307674808f38409ce  gcc/cp/semantics.cc
  64c36b2ea66c9f8f477b19d24e06a2cb  gcc/cp/std-name-hint.gperf
  15cc409f13a8952feb90e94d99ecefa2  gcc/cp/std-name-hint.h
! 2a5a7b359eae60fe5d8b58402732043a  gcc/cp/tree.cc
  01e9a381e6fcf3d016d0170ee0ad71d7  gcc/cp/type-utils.h
  f8acce2d62b5de5f6c73b511ce3dcf6e  gcc/cp/typeck.cc
  977a0037d150893837512a88f03fbdad  gcc/cp/typeck2.cc
*************** e22531d9f1edf671feb39e14295a0074  gcc/cs
*** 5760,5766 ****
  a992c36510202d05f89b17b2c68d4694  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  01d72dc5de712693e920328b1ea99442  gcc/ctfc.cc
! afe595c909beb3531580dbaf2e8de53b  gcc/ctfc.h
  32454bb9d77cb9629122aa4869a08515  gcc/ctfout.cc
  fe61b2918e14694ac3e0e909cacea80f  gcc/custom-sarif-properties/cfg.cc
  086d0fbe195bd56869d4968a6268a26a  gcc/custom-sarif-properties/cfg.h
--- 5760,5766 ----
  a992c36510202d05f89b17b2c68d4694  gcc/cselib.h
  1ded054093de910d9786c62bc4fe8cc6  gcc/cstamp-h.in
  01d72dc5de712693e920328b1ea99442  gcc/ctfc.cc
! c5ba51b73741e927bf80e7539e3338e0  gcc/ctfc.h
  32454bb9d77cb9629122aa4869a08515  gcc/ctfout.cc
  fe61b2918e14694ac3e0e909cacea80f  gcc/custom-sarif-properties/cfg.cc
  086d0fbe195bd56869d4968a6268a26a  gcc/custom-sarif-properties/cfg.h
*************** d1658e0b3a01487789371ee847def1b2  gcc/da
*** 6022,6028 ****
  63245724941a35dfab045b09f88d3ab4  gcc/data-streamer.cc
  3f7ee49cd1f2d78f1b902b28ea5ced9d  gcc/data-streamer.h
  c7362bfcde6697a2d4479f37eb016010  gcc/dbgcnt.cc
! 57aff492ccda6733701a18bec8ceaa36  gcc/dbgcnt.def
  1212138ceda83926278d99f18d79b6c8  gcc/dbgcnt.h
  79fbd46fe51c7607d0a7100c8dd1c191  gcc/dce.cc
  3c4bc4a738f591bd4213d05099b35827  gcc/dce.h
--- 6022,6028 ----
  63245724941a35dfab045b09f88d3ab4  gcc/data-streamer.cc
  3f7ee49cd1f2d78f1b902b28ea5ced9d  gcc/data-streamer.h
  c7362bfcde6697a2d4479f37eb016010  gcc/dbgcnt.cc
! f910306138014f0f7b52ab2934ac0f1b  gcc/dbgcnt.def
  1212138ceda83926278d99f18d79b6c8  gcc/dbgcnt.h
  79fbd46fe51c7607d0a7100c8dd1c191  gcc/dce.cc
  3c4bc4a738f591bd4213d05099b35827  gcc/dce.h
*************** ee65c9e3e7c3fb1fd0128c23f4130e51  gcc/do
*** 6130,6136 ****
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! 2c75f285a23702023f1f9e98b12fa186  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
--- 6130,6136 ----
  301ed7e567732d1f0d5899a624068bdd  gcc/doc/cppinternals.texi
  421cc3b7d98386e0eb0abba4242dd54a  gcc/doc/cppopts.texi
  d8b2becdc7d9c570f256e19e1b1ac4f1  gcc/doc/cppwarnopts.texi
! ff6fda21f2381665bb11d639bf8f0b1b  gcc/doc/extend.texi
  d4f889c42d5400f1d26328f8b49db9ba  gcc/doc/fragments.texi
  7fb1e4199b2e70228fda69b8065d83c4  gcc/doc/frontends.texi
  f0e190ef0119097dac4c73c2f9e34d9e  gcc/doc/gcc.texi
*************** dc4ccd9843d88bc01c909438dabfd6ab  gcc/do
*** 6145,6151 ****
  ae0bcb2e6be7ae6b715e2c00eaf668e0  gcc/doc/gty.texi
  16bc58e98e83e3a41c9417ad0738c650  gcc/doc/headerdirs.texi
  8166b5116507edf36a28b468da153627  gcc/doc/hostconfig.texi
! 8bef94dfe6193b975b1307d9e9ddd530  gcc/doc/ifn.texi
  27f346799737382c572e0b085fa46374  gcc/doc/implement-c.texi
  750c860cd31bb47133ca5da76d82247d  gcc/doc/implement-cxx.texi
  8bed7c13f2521176c0f9f4f79c920551  gcc/doc/include/fdl.texi
--- 6145,6151 ----
  ae0bcb2e6be7ae6b715e2c00eaf668e0  gcc/doc/gty.texi
  16bc58e98e83e3a41c9417ad0738c650  gcc/doc/headerdirs.texi
  8166b5116507edf36a28b468da153627  gcc/doc/hostconfig.texi
! c84639641b29cd79e61a0fe226b0bca7  gcc/doc/ifn.texi
  27f346799737382c572e0b085fa46374  gcc/doc/implement-c.texi
  750c860cd31bb47133ca5da76d82247d  gcc/doc/implement-cxx.texi
  8bed7c13f2521176c0f9f4f79c920551  gcc/doc/include/fdl.texi
*************** ae0bcb2e6be7ae6b715e2c00eaf668e0  gcc/do
*** 6155,6161 ****
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  aef5770b278fde5359d28cea926a8d4c  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 77260b924d9ab234f8c6090b428e9aba  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
--- 6155,6161 ----
  e9b8122841fbfbbc30fee8ed6613c399  gcc/doc/include/texinfo.tex
  aef5770b278fde5359d28cea926a8d4c  gcc/doc/install.texi
  30a2209eee0a2bed76e2d9ff3bd646f2  gcc/doc/install.texi2html
! 01f98dd5e664bc3fa5351b3c6f920516  gcc/doc/invoke.texi
  dd9d4097ebfa9e936c41913343807268  gcc/doc/languages.texi
  46d2bbbd37002bb71569d0b1f27d7a5a  gcc/doc/libgcc.texi
  ef4f00c423089323edef1d3cff31a4a2  gcc/doc/libgdiagnostics/Makefile
*************** c2fc9f8e6a1cb39a7237e4ac3d7fcd7f  gcc/do
*** 6193,6199 ****
  11e47b626bc937cc2bd4a8ac95a59aed  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  721e689329cd07ff27ba55b5c090eae1  gcc/doc/match-and-simplify.texi
! fa795f38d5f5464a6c902fdf1b3ca027  gcc/doc/md.texi
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
--- 6193,6199 ----
  11e47b626bc937cc2bd4a8ac95a59aed  gcc/doc/lto.texi
  a0300f293e1294f68bbf43478b2f7e96  gcc/doc/makefile.texi
  721e689329cd07ff27ba55b5c090eae1  gcc/doc/match-and-simplify.texi
! 27c62dcbe10e18453110a73bcbe2ec20  gcc/doc/md.texi
  ea1e82bfc6105050a63b50c8e40571c0  gcc/doc/objc.texi
  8b826afc7f71e67445cf33bbcd457ab5  gcc/doc/optinfo.texi
  3abb75ff788f5434702f351bf7a279c9  gcc/doc/options.texi
*************** fdecd23a17ae3f56f5e4f046f0bb157b  gcc/do
*** 6202,6208 ****
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
! 76f8fc71e463a97ad4adf329a3a0c2d9  gcc/doc/riscv-ext.texi
  8c633e11fbedfdfe3d0ba6fee84c7754  gcc/doc/riscv-mcpu.texi
  557b50d4a124bed410e403a84cc46647  gcc/doc/riscv-mtune.texi
  d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
--- 6202,6208 ----
  e54937e427a2584ac4045286c725fab1  gcc/doc/plugins.texi
  55ca097cff451ddbce4b20cdcbb9273e  gcc/doc/poly-int.texi
  213ccf5a355e5d07fc0dcef29825d6dd  gcc/doc/portability.texi
! 6941062861a0c4e90daece8f16f24e1a  gcc/doc/riscv-ext.texi
  8c633e11fbedfdfe3d0ba6fee84c7754  gcc/doc/riscv-mcpu.texi
  557b50d4a124bed410e403a84cc46647  gcc/doc/riscv-mtune.texi
  d148d8e42c694bcabb267855d8c863fb  gcc/doc/rtl.texi
*************** b12261ad56bcabd07b4a1b739f271527  gcc/do
*** 6210,6221 ****
  8ac5d323a53f7d2a2c1dc7a11e5453e2  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! 3338dcc5f4682632b9bc966730e82549  gcc/doc/tm.texi
! 6e94d39cbc1ec35a1fe85ab2311be757  gcc/doc/tm.texi.in
  8c9d03a450c358d77823a84f9c62ba4d  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
! bb1210d252c998d89648c327c54d8c48  gcc/dojump.cc
  06d1775c0518a9eb565928aa8123a666  gcc/dojump.h
  e8379699d9f307d3707c44dc4eb76468  gcc/dominance.cc
  bc82783dec92d26fe9d9508b3129eda4  gcc/dominance.h
--- 6210,6221 ----
  8ac5d323a53f7d2a2c1dc7a11e5453e2  gcc/doc/sourcebuild.texi
  9b58fbc10917d12008925e09d91cab55  gcc/doc/specs.texi
  d2b53a62ec4e23a8e4cbe16d2843c100  gcc/doc/standards.texi
! d80ec1cbf9525082895f960bab3e730e  gcc/doc/tm.texi
! 44175714df251c0513e00e355e799e52  gcc/doc/tm.texi.in
  8c9d03a450c358d77823a84f9c62ba4d  gcc/doc/tree-ssa.texi
  2d263928ebdba30d4e096adf01758e79  gcc/doc/trouble.texi
  83ea8ece47a3447f8da5fddd982c9d29  gcc/doc/ux.texi
! 48db1defc86b839323cd207da06699d8  gcc/dojump.cc
  06d1775c0518a9eb565928aa8123a666  gcc/dojump.h
  e8379699d9f307d3707c44dc4eb76468  gcc/dominance.cc
  bc82783dec92d26fe9d9508b3129eda4  gcc/dominance.h
*************** df86d4116f050c5e09b21441b286f26c  gcc/dw
*** 6234,6241 ****
  2d9cf6bbe6a4ec143049dcca966ba581  gcc/dwarf2codeview.h
  601de5b318a7738f96f4c04305c9e506  gcc/dwarf2ctf.cc
  6c4236fa6ead686398b8d5e7f89f8118  gcc/dwarf2ctf.h
! 3bd0b8e41020a963f69a9e9804d9ea19  gcc/dwarf2out.cc
! 419729c0a6128770292e664ef9b6aac7  gcc/dwarf2out.h
  5f6d1c1c6b68b50c4051ffa41f4aed26  gcc/early-remat.cc
  a19db416e8ffd8223146373aec780a72  gcc/emit-rtl.cc
  0453d78326581fbe75df5e5ca8e152f5  gcc/emit-rtl.h
--- 6234,6241 ----
  2d9cf6bbe6a4ec143049dcca966ba581  gcc/dwarf2codeview.h
  601de5b318a7738f96f4c04305c9e506  gcc/dwarf2ctf.cc
  6c4236fa6ead686398b8d5e7f89f8118  gcc/dwarf2ctf.h
! d2796a9cbc3e4dbfe363267c3ec849a5  gcc/dwarf2out.cc
! e472d994fd367eb4f1fdf1e47e750e03  gcc/dwarf2out.h
  5f6d1c1c6b68b50c4051ffa41f4aed26  gcc/early-remat.cc
  a19db416e8ffd8223146373aec780a72  gcc/emit-rtl.cc
  0453d78326581fbe75df5e5ca8e152f5  gcc/emit-rtl.h
*************** d61f76c4b55102abe0d6908ab60489e7  gcc/ex
*** 6251,6257 ****
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
  0e0b224e5ea82e4e2f9c34acdb018201  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! fb9d1e021a1661336badd57c751c239b  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  4b31ce401d814250b89eb315bb94bdd1  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
--- 6251,6257 ----
  e0ebf672695dc08e5686ca42b54e3a46  gcc/explow.h
  0e0b224e5ea82e4e2f9c34acdb018201  gcc/expmed.cc
  2431f17e1f416ef0b9c38b1b975942a4  gcc/expmed.h
! c5df7cad538eead0a6d78ac8d606f90c  gcc/expr.cc
  ca4a759ee689223d3551cae34e997224  gcc/expr.h
  4b31ce401d814250b89eb315bb94bdd1  gcc/ext-dce.cc
  8ca3dbbcb4ffeb7bd2c8f46140869732  gcc/fibonacci_heap.cc
*************** f8396c35f56710f2dd577b8f6644d380  gcc/fo
*** 6270,6276 ****
  974aacaf134d3d80b85afee20c6ca71e  gcc/fold-const.cc
  52f12f5f49a400327788ee826a094b1e  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 7cacf28fa13a9069dfa075ca890df662  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6270,6276 ----
  974aacaf134d3d80b85afee20c6ca71e  gcc/fold-const.cc
  52f12f5f49a400327788ee826a094b1e  gcc/fold-const.h
  503251519661f1768b70d9b424bdc12b  gcc/fold-mem-offsets.cc
! 843c492da50a2b9905a06180c9f72975  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** edad5176d72953374d67effefef0a605  gcc/fo
*** 6312,6321 ****
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! 5f16948a60fd51dc908487225a9c2a76  gcc/fortran/decl.cc
  1e7039f0bf7d560e4fcdb2cf95db4b7d  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
! 60ddfb6edfb616222756f26322ba4181  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
  8210b5c7adb3952169cd600412bce4ba  gcc/fortran/expr.cc
  c0284e23f561f80398df460d7c477675  gcc/fortran/f95-lang.cc
--- 6312,6321 ----
  48e7987762051d8cf68633af2633e50f  gcc/fortran/cpp.h
  213bc611adee1d275a412b3ed4886e79  gcc/fortran/data.cc
  ac7321680382b23989a6637e02dfb80e  gcc/fortran/data.h
! a7b7fe4a2d9b6fb6c2730fb248eae0d1  gcc/fortran/decl.cc
  1e7039f0bf7d560e4fcdb2cf95db4b7d  gcc/fortran/dependency.cc
  b66b99368e3cd17573ae64a38e36c1de  gcc/fortran/dependency.h
! 5fc94c471cdb783f08d648c823689b18  gcc/fortran/dump-parse-tree.cc
  65aa25da09bdeee948cdad39cfc4d960  gcc/fortran/error.cc
  8210b5c7adb3952169cd600412bce4ba  gcc/fortran/expr.cc
  c0284e23f561f80398df460d7c477675  gcc/fortran/f95-lang.cc
*************** f7e292210a78addc2aa6af8409ece064  gcc/fo
*** 6330,6336 ****
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
  5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
! c0fed3c5aa6158f9ef181003b31f9b4f  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
  1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
--- 6330,6336 ----
  d7ffa84de49936bfc22cdb2a7ef87800  gcc/fortran/intrinsic.h
  5c41fec8827bcc0e1e524b99ce4bfd71  gcc/fortran/intrinsic.texi
  d1270efc97a26916a776b4a7c77118e7  gcc/fortran/invoke.texi
! de14e3bd57873acb2ba9e4b47f2770e0  gcc/fortran/io.cc
  02af2e093ad4f92649a6370fa6dc3215  gcc/fortran/ioparm.def
  1e9a62cdd76fcac49d91728090a8b2f6  gcc/fortran/iresolve.cc
  4983e51f5909bf7627062a5e3ace5455  gcc/fortran/iso-c-binding.def
*************** bf54232c4c950ed772f4964c4f79629e  gcc/fo
*** 6345,6356 ****
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
  ba4a819765499ce29e3070e1ff83ed7b  gcc/fortran/module.cc
! 836b90f1c6fb115b5d1ccf96d7792193  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
! 706aed7d77585110bf7515894034669e  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
--- 6345,6356 ----
  915f6b30a8c22a5fea18690269a5a4a4  gcc/fortran/mathbuiltins.def
  9687294592a5ccef5d0b8254ab33816b  gcc/fortran/misc.cc
  ba4a819765499ce29e3070e1ff83ed7b  gcc/fortran/module.cc
! 4bbbef796f65fa98fa16193b66eef4d8  gcc/fortran/openmp.cc
  7baca4fc0a6fcd712dcbccab22987c74  gcc/fortran/options.cc
  f96b91fecd5db62c95bc50a661965b6d  gcc/fortran/parse.cc
  c97a1f016de974126c688bb9c805f323  gcc/fortran/parse.h
  d8018f6b8422ec272ff0ef8a7bd1d39d  gcc/fortran/primary.cc
! 7a8081e90da823303bc28e6aa327cc6b  gcc/fortran/resolve.cc
  e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fortran/scanner.cc
  18963b3f6aacca960fd6aa72b429a9d2  gcc/fortran/scanner.h
  664f19f5a29de9abc4642568f758c47c  gcc/fortran/simplify.cc
*************** e23f6eefa51bb3b4caa3d75c0409cfcd  gcc/fo
*** 6358,6381 ****
  7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 68df8381b240157348e1186fcf73ce4e  gcc/fortran/trans-array.cc
  a0c40b654df0b5c5213047d26e48e97a  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
  6d304de80d4d8e67d353c979b108ce01  gcc/fortran/trans-decl.cc
! b6fb13afa4a1b71dec438bb5fc485f2c  gcc/fortran/trans-expr.cc
  239bc2ec60f26ef7484e70d38222e6e8  gcc/fortran/trans-intrinsic.cc
  269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! 5d7c435eeb038b4b32efd30181a0b46b  gcc/fortran/trans-openmp.cc
  85a774b3580276912ca50b038f91e40b  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! f8cac5e2268c177aff676d2dbb690f51  gcc/fortran/trans-types.cc
  6b00c9b76b80a96feb87d86b4b06102b  gcc/fortran/trans-types.h
  501a82d1878805678d668a392dc0e48a  gcc/fortran/trans.cc
  2d3f54b9ed7f3bbec54c23afc6cab082  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
! 57ebe36e9e77bcb8eab87809d044e0f1  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
  ffcd589d92263dca99a67b1a9fb561b8  gcc/function-abi.cc
  fe144e1c2a0da30ffc9946e5adab7e6f  gcc/function-abi.h
--- 6358,6381 ----
  7c0ce786abb30fa1b3dfd2c619faf5c3  gcc/fortran/symbol.cc
  4fa06f769be3f1b439a574ee842c82ca  gcc/fortran/target-memory.cc
  ea8837444e2a08a95a3ea747c94b8106  gcc/fortran/target-memory.h
! 18e3f54916a1e5ec4a84d54a3ebbd93d  gcc/fortran/trans-array.cc
  a0c40b654df0b5c5213047d26e48e97a  gcc/fortran/trans-array.h
  5c567026f9fbc4fea9b59c22743687c4  gcc/fortran/trans-common.cc
  98960d7450a15e1ecc9789bd0bde16a7  gcc/fortran/trans-const.cc
  0d5cf4117521dba2aea9c8fd7ac67888  gcc/fortran/trans-const.h
  6d304de80d4d8e67d353c979b108ce01  gcc/fortran/trans-decl.cc
! dbc204c4f83e2a6e87c150ee83c46b51  gcc/fortran/trans-expr.cc
  239bc2ec60f26ef7484e70d38222e6e8  gcc/fortran/trans-intrinsic.cc
  269d2b121570a82898b133a3274071a7  gcc/fortran/trans-io.cc
! 0c53e623e9820754423b6d07303bfdd8  gcc/fortran/trans-openmp.cc
  85a774b3580276912ca50b038f91e40b  gcc/fortran/trans-stmt.cc
  6fbc90714f9730e84515bbaadff313f9  gcc/fortran/trans-stmt.h
! c316935fcc55b37c53e3139685d4d965  gcc/fortran/trans-types.cc
  6b00c9b76b80a96feb87d86b4b06102b  gcc/fortran/trans-types.h
  501a82d1878805678d668a392dc0e48a  gcc/fortran/trans.cc
  2d3f54b9ed7f3bbec54c23afc6cab082  gcc/fortran/trans.h
  95f35aeb3293f3036414b45c9c749d61  gcc/fortran/trigd_fe.inc
! 928644592ed66fda7ace0b92b9d1d378  gcc/fortran/types.def
  2512380133ab0852be268312deda8663  gcc/fp-test.cc
  ffcd589d92263dca99a67b1a9fb561b8  gcc/function-abi.cc
  fe144e1c2a0da30ffc9946e5adab7e6f  gcc/function-abi.h
*************** fd409219ef263a27cda92f9d1c4eb36b  gcc/ge
*** 6420,6426 ****
  d7f4e4ad676aca80544724e0f51991da  gcc/genchecksum.cc
  0562bf20ae7e03782254312e1073c4c4  gcc/gencodes.cc
  4615e86ea47838ed2b05196be62ca202  gcc/genconditions.cc
! ec5e5fc3d57d192887fb3cafa2a2aaf8  gcc/genconfig.cc
  86fcfe59af8fbb4a3bb305daa9953f2a  gcc/genconstants.cc
  bb0cbc63b56dd2cac2f4c26a31b52860  gcc/genemit.cc
  28e57f5a75df14fae9aa63f98b14b789  gcc/genenums.cc
--- 6420,6426 ----
  d7f4e4ad676aca80544724e0f51991da  gcc/genchecksum.cc
  0562bf20ae7e03782254312e1073c4c4  gcc/gencodes.cc
  4615e86ea47838ed2b05196be62ca202  gcc/genconditions.cc
! 05075e5e70caca0687ceba1f4ac4ecee  gcc/genconfig.cc
  86fcfe59af8fbb4a3bb305daa9953f2a  gcc/genconstants.cc
  bb0cbc63b56dd2cac2f4c26a31b52860  gcc/genemit.cc
  28e57f5a75df14fae9aa63f98b14b789  gcc/genenums.cc
*************** e6281ed3f4adb00e0c2e8f582901500e  gcc/ge
*** 6429,6441 ****
  33b885f3fefe6715194581a6825b84b3  gcc/genextract.cc
  fb2d66e9d3218c23bfc681858eeb96d7  gcc/genflags.cc
  3dd21b6d301f9ab68a9ffcf2c9aaa9a7  gcc/gengenrtl.cc
! de4a5ffc62d7e4741e33ab2ab501e601  gcc/gengtype-lex.l
  c739e2bedd7d49bc7a7c4ae61fe92df6  gcc/gengtype-parse.cc
  2d9104574899868a2bcd7c20d1ec2b48  gcc/gengtype-state.cc
  237cfbef39ab39de5247e709cbcd0ca2  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
! 9a8fe8112f937369edbb340fc48b75ac  gcc/genmatch.cc
  e4047cfabe80236af3ae74f11e2d60c6  gcc/genmddeps.cc
  07e47d3b20e79c811a134c66e6706df2  gcc/genmddump.cc
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
--- 6429,6441 ----
  33b885f3fefe6715194581a6825b84b3  gcc/genextract.cc
  fb2d66e9d3218c23bfc681858eeb96d7  gcc/genflags.cc
  3dd21b6d301f9ab68a9ffcf2c9aaa9a7  gcc/gengenrtl.cc
! 754924f23b4458952f4ce15d0a2133e5  gcc/gengtype-lex.l
  c739e2bedd7d49bc7a7c4ae61fe92df6  gcc/gengtype-parse.cc
  2d9104574899868a2bcd7c20d1ec2b48  gcc/gengtype-state.cc
  237cfbef39ab39de5247e709cbcd0ca2  gcc/gengtype.cc
  337148b052ea38466fcac0655bce7ffa  gcc/gengtype.h
  7e9bc10948cd198b2cefa5f28d9dc7a9  gcc/genhooks.cc
! de8e965a4f6c4f4c5ab705bd4b8c7cfe  gcc/genmatch.cc
  e4047cfabe80236af3ae74f11e2d60c6  gcc/genmddeps.cc
  07e47d3b20e79c811a134c66e6706df2  gcc/genmddump.cc
  f12cb23213547a0e97f979845e36473a  gcc/genmodes.cc
*************** f12cb23213547a0e97f979845e36473a  gcc/ge
*** 6443,6452 ****
  d64ab00f9934abdaf7e4d31517166403  gcc/genopinit.cc
  db21139689f30c45e537cde8308c521f  gcc/genoutput.cc
  db35b39aef87d882541f7f9672bfb034  gcc/genpeep.cc
! 5b37e26a6d7729558e96c2a86ba995af  gcc/genpreds.cc
  167a686249ff4822dedb95d94aa38a8d  gcc/genrecog.cc
! 0091feee6199ec97804b1784dd092993  gcc/gensupport.cc
! 4801a456f63c48a3c949feef327ab7d2  gcc/gensupport.h
  96b33171630af12a42352b099f496aa9  gcc/gentarget-def.cc
  8acc0caa2af3028b47651433e7186b9a  gcc/genversion.cc
  d064c39832a93757f2aaaf28c0f3a34b  gcc/ggc-common.cc
--- 6443,6452 ----
  d64ab00f9934abdaf7e4d31517166403  gcc/genopinit.cc
  db21139689f30c45e537cde8308c521f  gcc/genoutput.cc
  db35b39aef87d882541f7f9672bfb034  gcc/genpeep.cc
! 191c89adc842383f9a7b654d78b38e61  gcc/genpreds.cc
  167a686249ff4822dedb95d94aa38a8d  gcc/genrecog.cc
! f4b5fea3b8581634bd3db8ea8afb2ffe  gcc/gensupport.cc
! c765be60d8b336ca00b610dd620b8841  gcc/gensupport.h
  96b33171630af12a42352b099f496aa9  gcc/gentarget-def.cc
  8acc0caa2af3028b47651433e7186b9a  gcc/genversion.cc
  d064c39832a93757f2aaaf28c0f3a34b  gcc/ggc-common.cc
*************** e8ef831ecab58724c781ef6c239eb959  gcc/gi
*** 6462,6468 ****
  8b1599b40f5a2702947d5d0d54b2abbc  gcc/gimple-crc-optimization.cc
  a15c39c8992a881e7ddd36b0e81d341c  gcc/gimple-expr.cc
  61721564f913cdbebe438f7c378b316e  gcc/gimple-expr.h
! 88e5222c71e8fe4780624fc417dc0a21  gcc/gimple-fold.cc
  ae37e021ec4849550d7598ecdd2faeb4  gcc/gimple-fold.h
  109e0f96a9d27a8a25bb73d61b701bbc  gcc/gimple-harden-conditionals.cc
  77b7894bb225ebcb156bb0cf28b9325a  gcc/gimple-harden-control-flow.cc
--- 6462,6468 ----
  8b1599b40f5a2702947d5d0d54b2abbc  gcc/gimple-crc-optimization.cc
  a15c39c8992a881e7ddd36b0e81d341c  gcc/gimple-expr.cc
  61721564f913cdbebe438f7c378b316e  gcc/gimple-expr.h
! c75ec111fd44d49b5e67a7129b49bac5  gcc/gimple-fold.cc
  ae37e021ec4849550d7598ecdd2faeb4  gcc/gimple-fold.h
  109e0f96a9d27a8a25bb73d61b701bbc  gcc/gimple-harden-conditionals.cc
  77b7894bb225ebcb156bb0cf28b9325a  gcc/gimple-harden-control-flow.cc
*************** f625775d4290d87f0c15fb36855776b1  gcc/gi
*** 6473,6479 ****
  a7d47404d5fd61c66fd504e78960fac2  gcc/gimple-laddress.cc
  189fd651a07168119508569dc83d182d  gcc/gimple-loop-interchange.cc
  09f155e5d0296ba93f88821453972587  gcc/gimple-loop-jam.cc
! b829ca99c85ee53d8741a9e6bd0842cc  gcc/gimple-loop-versioning.cc
  a3c0ce653bff24576326a2c5f8a39b01  gcc/gimple-low.cc
  a6a5de8424eee65e836bba5b21f32a6b  gcc/gimple-low.h
  54de93624274e2e4178b33b729861209  gcc/gimple-lower-bitint.cc
--- 6473,6479 ----
  a7d47404d5fd61c66fd504e78960fac2  gcc/gimple-laddress.cc
  189fd651a07168119508569dc83d182d  gcc/gimple-loop-interchange.cc
  09f155e5d0296ba93f88821453972587  gcc/gimple-loop-jam.cc
! 79e1be92f049137ccb4bbb870690e093  gcc/gimple-loop-versioning.cc
  a3c0ce653bff24576326a2c5f8a39b01  gcc/gimple-low.cc
  a6a5de8424eee65e836bba5b21f32a6b  gcc/gimple-low.h
  54de93624274e2e4178b33b729861209  gcc/gimple-lower-bitint.cc
*************** a6a5de8424eee65e836bba5b21f32a6b  gcc/gi
*** 6481,6488 ****
  283afbcda37f06544c84656fdb8c1a68  gcc/gimple-match-exports.cc
  95ab37dd8c1b67f025a463e428c5f21b  gcc/gimple-match-head.cc
  10f507419edf2453a9f512c5484b6280  gcc/gimple-match.h
! de743ea00fd2b7de01d1041a83c3828c  gcc/gimple-predicate-analysis.cc
! bb051bbc22b445b14ef4c250038f1dbf  gcc/gimple-predicate-analysis.h
  47be556d1ffdffe8df16fdea25e9fe0e  gcc/gimple-predict.h
  507f851a06264c7415919c28e6afa3da  gcc/gimple-pretty-print.cc
  188a3366d8d8b4ba413f704fa241a1e2  gcc/gimple-pretty-print.h
--- 6481,6488 ----
  283afbcda37f06544c84656fdb8c1a68  gcc/gimple-match-exports.cc
  95ab37dd8c1b67f025a463e428c5f21b  gcc/gimple-match-head.cc
  10f507419edf2453a9f512c5484b6280  gcc/gimple-match.h
! dd67ca2e05cdfe59a549e49eb485455e  gcc/gimple-predicate-analysis.cc
! 0925ba871aaeaae015e8802e4ff45acb  gcc/gimple-predicate-analysis.h
  47be556d1ffdffe8df16fdea25e9fe0e  gcc/gimple-predict.h
  507f851a06264c7415919c28e6afa3da  gcc/gimple-pretty-print.cc
  188a3366d8d8b4ba413f704fa241a1e2  gcc/gimple-pretty-print.h
*************** cb618963a83cd7f24a75236850e20a99  gcc/gi
*** 6505,6516 ****
  a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gimple-range-tests.cc
  6aea6dbdcfdbb9cc7eaba0885ef8339c  gcc/gimple-range-trace.cc
  e45cb6aa50c3ff1d1592d7f2758cb778  gcc/gimple-range-trace.h
! a6fa6bdf95bbe8ce0cd55afe488296b9  gcc/gimple-range.cc
  b284f979b1dc05312e57543e7aa4d6c4  gcc/gimple-range.h
  d1e29051831e84cf3322e13073e6e37c  gcc/gimple-ssa-backprop.cc
  de05af775384560b7d73a320ca04b716  gcc/gimple-ssa-isolate-paths.cc
  841e25177d0ec3b994aade444aaf7d1f  gcc/gimple-ssa-nonnull-compare.cc
! c601c638b474c5f6fa902a24dc57b869  gcc/gimple-ssa-pta-constraints.cc
  1a13540b90afbe02c088650d3cd0b617  gcc/gimple-ssa-pta-constraints.h
  358c52f644d9a63e34d38841245cbaae  gcc/gimple-ssa-sccopy.cc
  ed229440036ea7e3f4f024ff36345e2e  gcc/gimple-ssa-split-paths.cc
--- 6505,6516 ----
  a4932ff9aca9b1faf77d94e18d1a98dd  gcc/gimple-range-tests.cc
  6aea6dbdcfdbb9cc7eaba0885ef8339c  gcc/gimple-range-trace.cc
  e45cb6aa50c3ff1d1592d7f2758cb778  gcc/gimple-range-trace.h
! baf8e85d0ec70ba9cc33aef997ee26e6  gcc/gimple-range.cc
  b284f979b1dc05312e57543e7aa4d6c4  gcc/gimple-range.h
  d1e29051831e84cf3322e13073e6e37c  gcc/gimple-ssa-backprop.cc
  de05af775384560b7d73a320ca04b716  gcc/gimple-ssa-isolate-paths.cc
  841e25177d0ec3b994aade444aaf7d1f  gcc/gimple-ssa-nonnull-compare.cc
! 05e242e061e93b618f52622b10b4e2e8  gcc/gimple-ssa-pta-constraints.cc
  1a13540b90afbe02c088650d3cd0b617  gcc/gimple-ssa-pta-constraints.h
  358c52f644d9a63e34d38841245cbaae  gcc/gimple-ssa-sccopy.cc
  ed229440036ea7e3f4f024ff36345e2e  gcc/gimple-ssa-split-paths.cc
*************** c7aaa3764ab30058c5d27da89f166ec2  gcc/gi
*** 6527,6540 ****
  2c671fe032f79053e3dc7c23d6c140e4  gcc/gimple-streamer-out.cc
  4ada319be66d0fbf4caee7923d5522c9  gcc/gimple-streamer.h
  337ae8a4b25140b56e9b00cc3fdff1b3  gcc/gimple-walk.cc
! fd706cd70d2b5c6a514eef109a117112  gcc/gimple-walk.h
  06799abee7825c63248ec83b96f7f7a9  gcc/gimple-warn-recursion.cc
  4a43f38776337834415600ed88fb9563  gcc/gimple.cc
  9c96d8ec9971cb14612c09c0565d83c5  gcc/gimple.def
  83d74df09fe460c465e209cc1370a30b  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
! 5581cfb316d184a0a4e7e2b40bb0cfcf  gcc/gimplify.cc
  5015d194d6aebf6d8d4bbb3945a77e27  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  83f82d6779ea9f6500c863169abfca55  gcc/ginclude/float.h
--- 6527,6540 ----
  2c671fe032f79053e3dc7c23d6c140e4  gcc/gimple-streamer-out.cc
  4ada319be66d0fbf4caee7923d5522c9  gcc/gimple-streamer.h
  337ae8a4b25140b56e9b00cc3fdff1b3  gcc/gimple-walk.cc
! 73e9555dabd2f6abfd03e93ee621d073  gcc/gimple-walk.h
  06799abee7825c63248ec83b96f7f7a9  gcc/gimple-warn-recursion.cc
  4a43f38776337834415600ed88fb9563  gcc/gimple.cc
  9c96d8ec9971cb14612c09c0565d83c5  gcc/gimple.def
  83d74df09fe460c465e209cc1370a30b  gcc/gimple.h
  46bdb18976fdb25accadbfdc07f14a8e  gcc/gimplify-me.cc
  cc5b43d0554c69571cd007e727fbb7d1  gcc/gimplify-me.h
! 5fc6f66a724359ef6965098ce0388a18  gcc/gimplify.cc
  5015d194d6aebf6d8d4bbb3945a77e27  gcc/gimplify.h
  ba3039c0ed9645080c52c0d4bc46096f  gcc/gimplify_reg_info.h
  83f82d6779ea9f6500c863169abfca55  gcc/ginclude/float.h
*************** a14dec31253b740dd848f2aa1b45206a  gcc/ip
*** 6719,6732 ****
  93f25c7e07ed33d4f529d88a73dde0bb  gcc/ipa-utils.h
  a4305cc116c71e1a6c238562a0063f9f  gcc/ipa-visibility.cc
  506459e1cbf22101a7eead69b8dee25b  gcc/ipa.cc
! 2216d8cfd74d4b7a2bb4de5cb3425736  gcc/ira-build.cc
! b786062b08253ae9d5394902431c543d  gcc/ira-color.cc
! 35541d3d67c6affe0600d8ad83e83978  gcc/ira-conflicts.cc
  5f3525d242cdfd851e72963683546d28  gcc/ira-costs.cc
  ceb6470c2a3157ee691a6bcd9c8b0c31  gcc/ira-emit.cc
! 455109af735e288bb01b4630d744cb3e  gcc/ira-int.h
! 0cb1b2f22c7deface93fef7bfdec4e8c  gcc/ira-lives.cc
! b9fd89128c41f729b94b931067f8a18e  gcc/ira.cc
  788d1861bee2322ed419d2c51e2f738e  gcc/ira.h
  9542ea2b8797fa5a935893fafae08ef3  gcc/is-a.h
  090239f8ee6f441be82d0c8cbeaa00de  gcc/iterator-utils.h
--- 6719,6732 ----
  93f25c7e07ed33d4f529d88a73dde0bb  gcc/ipa-utils.h
  a4305cc116c71e1a6c238562a0063f9f  gcc/ipa-visibility.cc
  506459e1cbf22101a7eead69b8dee25b  gcc/ipa.cc
! e189912531159417b1cf72247ef5a402  gcc/ira-build.cc
! c0a0a3c223b4d4e4fc1a24e212cce260  gcc/ira-color.cc
! 4a04d3e4659ca271e0111b0c5b885d00  gcc/ira-conflicts.cc
  5f3525d242cdfd851e72963683546d28  gcc/ira-costs.cc
  ceb6470c2a3157ee691a6bcd9c8b0c31  gcc/ira-emit.cc
! 51d31fd7b9f619078d0b66624c7a4f34  gcc/ira-int.h
! 48ab443b7e00ae3a815124095e1e02c4  gcc/ira-lives.cc
! 37ead918c3eca1132f3200fddbe1b0ef  gcc/ira.cc
  788d1861bee2322ed419d2c51e2f738e  gcc/ira.h
  9542ea2b8797fa5a935893fafae08ef3  gcc/is-a.h
  090239f8ee6f441be82d0c8cbeaa00de  gcc/iterator-utils.h
*************** f706fe94b3a789d30e0800c32f27c242  gcc/lo
*** 6860,6875 ****
  7812914e23c56c8dc2696a2147331691  gcc/loop-unroll.h
  c6ab645f373e1d6e9ddd212bfc3a95ba  gcc/lower-subreg.cc
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
! 4e64f9a8fc62fcb9b7a7fb3362cccd2f  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
! 8a52b3e8e1afc6b3d9479e3c09b46ffe  gcc/lra-constraints.cc
  2b91fedbb37f334369acdf769a0ab194  gcc/lra-eliminations.cc
! ed7c49918557e8e7d34488711171abef  gcc/lra-int.h
  568d6d2d43a7728ab0b54f7e837b653a  gcc/lra-lives.cc
  b6230d4e2eccd718fc469d99ce999ba9  gcc/lra-remat.cc
  39b048a65c498c5357cb27a2ce50a4df  gcc/lra-spills.cc
! b9fcc1996ccb833f1d43c26a4c7f9cf6  gcc/lra.cc
! 7a689be5eced38293e966e1291a1d1b9  gcc/lra.h
  1a1f5f815cdc6c472c7b44ce9c7ad4f9  gcc/lto-cgraph.cc
  642fbdeaf8df2a150746f15ad409d071  gcc/lto-compress.cc
  c659fc218c745eb22044da66f2424ede  gcc/lto-compress.h
--- 6860,6875 ----
  7812914e23c56c8dc2696a2147331691  gcc/loop-unroll.h
  c6ab645f373e1d6e9ddd212bfc3a95ba  gcc/lower-subreg.cc
  d49cf408f9415ef037523414c6e80764  gcc/lower-subreg.h
! 1c331efaab50c9e240d3ebcebea56688  gcc/lra-assigns.cc
  5d1aa184ea3e3c5990e02acbdc762f00  gcc/lra-coalesce.cc
! d57a75deb0267effcf241ccb460ed3b4  gcc/lra-constraints.cc
  2b91fedbb37f334369acdf769a0ab194  gcc/lra-eliminations.cc
! 74c62715a179f0277b7b036f21e1799f  gcc/lra-int.h
  568d6d2d43a7728ab0b54f7e837b653a  gcc/lra-lives.cc
  b6230d4e2eccd718fc469d99ce999ba9  gcc/lra-remat.cc
  39b048a65c498c5357cb27a2ce50a4df  gcc/lra-spills.cc
! 1457ca95c086fcce8d20ec7d0c78e783  gcc/lra.cc
! b83e79d1d69b150565d42510c6be5822  gcc/lra.h
  1a1f5f815cdc6c472c7b44ce9c7ad4f9  gcc/lto-cgraph.cc
  642fbdeaf8df2a150746f15ad409d071  gcc/lto-compress.cc
  c659fc218c745eb22044da66f2424ede  gcc/lto-compress.h
*************** f9608e9005487c369e6c38949ab36fa1  gcc/m2
*** 7883,7890 ****
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 21fa6a9b1a8a8dd382a659c9f3abe151  gcc/match-sat-alu.pd
! 6214ace42cd0abc002f242b381a936e7  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
--- 7883,7890 ----
  2a18164ee5f162ac117e6fedb58158a2  gcc/machmode.def
  89d79df4a8d2185bb8557998f075e087  gcc/machmode.h
  197298337dae14fdd7ab928a1f03bec6  gcc/main.cc
! 778f0c1be3a4637991224c969fc45bba  gcc/match-sat-alu.pd
! a7e4d6c1f778db882d1825963489ffcf  gcc/match.pd
  b106a08a1793a5495dd87c412456484b  gcc/mcf.cc
  897c541ca992e145ad451c98941c7647  gcc/mem-stats-traits.h
  14700e76d554c9699481337fa9886be6  gcc/mem-stats.h
*************** e00206160b117e3384f6e554cb06b174  gcc/ob
*** 7902,7908 ****
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
  ba64c07a510dfabface1184a0edaec64  gcc/objc/objc-act.cc
! 485833e401f6b31ddb9d19733e245cff  gcc/objc/objc-act.h
  5d0297127b71a7cb1df633c4778aa711  gcc/objc/objc-encoding.cc
  638ad042ad5712a6da28ea792d9e1853  gcc/objc/objc-encoding.h
  5592fb91591ac18459f377d882097ac2  gcc/objc/objc-gnu-runtime-abi-01.cc
--- 7902,7908 ----
  f3dbb06248bf04272bf34751540a8844  gcc/objc/config-lang.in
  296b176173a1ff046cbb5bb721d9f576  gcc/objc/lang-specs.h
  ba64c07a510dfabface1184a0edaec64  gcc/objc/objc-act.cc
! 981fb23a3b88a456c0faf448deb73df6  gcc/objc/objc-act.h
  5d0297127b71a7cb1df633c4778aa711  gcc/objc/objc-encoding.cc
  638ad042ad5712a6da28ea792d9e1853  gcc/objc/objc-encoding.h
  5592fb91591ac18459f377d882097ac2  gcc/objc/objc-gnu-runtime-abi-01.cc
*************** d716426f842510f560782580a02b87e8  gcc/ob
*** 7916,7923 ****
  82b1fd82fb8a2ba9e2a8fc3f46ac8a81  gcc/objc/objc-runtime-shared-support.cc
  6594f29228dbfaa3e7e65104fb3e5dcc  gcc/objc/objc-runtime-shared-support.h
  8a1060d8fadfe53ae2651c9f887142ef  gcc/objc/objc-tree.def
! d816d1a0e61c66b7d71cd7a56b81b261  gcc/objcp/ChangeLog
! ac651ff7103ab4d3926a0fe46947dbc7  gcc/objcp/Make-lang.in
  cd3aac34657824ccc664d7185e6737d4  gcc/objcp/config-lang.in
  e3efef0a89306a90708239222db79f43  gcc/objcp/lang-specs.h
  225d0e849f88420616b87987ed1e699b  gcc/objcp/objcp-decl.cc
--- 7916,7923 ----
  82b1fd82fb8a2ba9e2a8fc3f46ac8a81  gcc/objc/objc-runtime-shared-support.cc
  6594f29228dbfaa3e7e65104fb3e5dcc  gcc/objc/objc-runtime-shared-support.h
  8a1060d8fadfe53ae2651c9f887142ef  gcc/objc/objc-tree.def
! c16eb18f00ae43b938286041a894539f  gcc/objcp/ChangeLog
! e38dd8b647ce35d00c6eff3980d2e270  gcc/objcp/Make-lang.in
  cd3aac34657824ccc664d7185e6737d4  gcc/objcp/config-lang.in
  e3efef0a89306a90708239222db79f43  gcc/objcp/lang-specs.h
  225d0e849f88420616b87987ed1e699b  gcc/objcp/objcp-decl.cc
*************** aa2631a800917f0a9b68ef9c3c6722fc  gcc/ob
*** 7925,7936 ****
  97d04fb525d43f26efcc1c10bb62a70e  gcc/objcp/objcp-lang.cc
  ac6f2a373c263368c4451f24860f50d6  gcc/obstack-utils.h
  b53e19ed2e5aad878bc3422b5ed77de8  gcc/omp-api.h
! cdc26bd8ead0ef188e59165e859c822d  gcc/omp-builtins.def
! 09ac26948ec75f80889a2333c0395aa3  gcc/omp-expand.cc
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
! 2c16523de24fa67cf3b6f66ae7780992  gcc/omp-general.cc
! 23ef2077fc947478cfb1d807aff87bee  gcc/omp-general.h
! 83121a8bf793e4cb6c78d70de1608529  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
--- 7925,7936 ----
  97d04fb525d43f26efcc1c10bb62a70e  gcc/objcp/objcp-lang.cc
  ac6f2a373c263368c4451f24860f50d6  gcc/obstack-utils.h
  b53e19ed2e5aad878bc3422b5ed77de8  gcc/omp-api.h
! 6b45a913fbc83b8bd944b062986484b9  gcc/omp-builtins.def
! 706aa5e3dc52870088426971d489b766  gcc/omp-expand.cc
  2f6456a4cc816c9b75844b1625b26349  gcc/omp-expand.h
! 188173a8efb4e631ba04f95371cb8804  gcc/omp-general.cc
! adfc442def98eba84925b435cfc8716a  gcc/omp-general.h
! 34bea268be6fd1acb54bf0756073046a  gcc/omp-low.cc
  1c84cef0613c186032b0fc0682b72ab8  gcc/omp-low.h
  e15278003e18a529caf759e00fbb8140  gcc/omp-oacc-kernels-decompose.cc
  e46559b06f0c63bac8a2626dcddfb876  gcc/omp-oacc-neuter-broadcast.cc
*************** a497ad43b29c18aa6006c31050e37f1c  gcc/op
*** 7949,7955 ****
  83e2949ab4f0a281b29d45764ee87557  gcc/opt-suggestions.h
  eba7a25f3a38ce52b4cf970cc93f66ea  gcc/optabs-libfuncs.cc
  22f466f2c62ac3f6d1a71c7d7911d694  gcc/optabs-libfuncs.h
! 4132b726fdaa6d52996d787a2681c6f9  gcc/optabs-query.cc
  6e866f616ec7fb7f4c791b5ad349a2cd  gcc/optabs-query.h
  0135b6d221cd61d59fecebf7206e304e  gcc/optabs-tree.cc
  201b2569727bf062f908121f208a860f  gcc/optabs-tree.h
--- 7949,7955 ----
  83e2949ab4f0a281b29d45764ee87557  gcc/opt-suggestions.h
  eba7a25f3a38ce52b4cf970cc93f66ea  gcc/optabs-libfuncs.cc
  22f466f2c62ac3f6d1a71c7d7911d694  gcc/optabs-libfuncs.h
! b88b1f2b695de39a2325d3f5407d2c67  gcc/optabs-query.cc
  6e866f616ec7fb7f4c791b5ad349a2cd  gcc/optabs-query.h
  0135b6d221cd61d59fecebf7206e304e  gcc/optabs-tree.cc
  201b2569727bf062f908121f208a860f  gcc/optabs-tree.h
*************** c9b2e818258f43e0a779e4c3caa8801d  gcc/op
*** 7970,7976 ****
  dc202dff2d7d4cb632307dc4915602b0  gcc/opts-global.cc
  f55f0f0a86a11d13824924aac8c98a68  gcc/opts-jobserver.h
  c46fad7af98411314518d8c1c272f98d  gcc/opts.cc
! 7c2605b6227dcf8eb80f826ac7b07e83  gcc/opts.h
  413859dddc66f1f7d8ea8078e096c288  gcc/ordered-hash-map-tests.cc
  fef443de1557117f8c2847206a2ea8f5  gcc/ordered-hash-map.h
  7c8d7dc194f39f5b8c69d7f0d05bc335  gcc/output.h
--- 7970,7976 ----
  dc202dff2d7d4cb632307dc4915602b0  gcc/opts-global.cc
  f55f0f0a86a11d13824924aac8c98a68  gcc/opts-jobserver.h
  c46fad7af98411314518d8c1c272f98d  gcc/opts.cc
! e2419fa789f8684ce04c4df7343b759d  gcc/opts.h
  413859dddc66f1f7d8ea8078e096c288  gcc/ordered-hash-map-tests.cc
  fef443de1557117f8c2847206a2ea8f5  gcc/ordered-hash-map.h
  7c8d7dc194f39f5b8c69d7f0d05bc335  gcc/output.h
*************** e0db2c8d8be3e6e434a068eea0fa67c1  gcc/re
*** 8056,8067 ****
  70e0d9758e59e2871d438003d64520c8  gcc/read-rtl-function.cc
  d1e8f06dfe7f0d64ebabef7c52035296  gcc/read-rtl-function.h
  0f76d73b8755bc8a6b10b87d6dc76632  gcc/read-rtl.cc
! 316f13a6d6b7f9236d2683827262f362  gcc/real.cc
! 45b87c4baefe4e526664defa3b15f968  gcc/real.h
  034d6804511ba5d0c988e1e98ab47d5d  gcc/realmpfr.cc
  5ada18d8279938c02c4d9f3751acf660  gcc/realmpfr.h
! 16839ef6c087a385aff94bee3db6322b  gcc/recog.cc
! 6f9d8ee740272502fb8e3e9b6644d7c9  gcc/recog.h
  abf7aba0b8c470a07c63a7d04c3052e6  gcc/ree.cc
  4b5ca674534bbf5c690ccd0e5ec97cbc  gcc/reg-notes.def
  7a6bc7c58286682936006bbdfed0b1fe  gcc/reg-stack.cc
--- 8056,8067 ----
  70e0d9758e59e2871d438003d64520c8  gcc/read-rtl-function.cc
  d1e8f06dfe7f0d64ebabef7c52035296  gcc/read-rtl-function.h
  0f76d73b8755bc8a6b10b87d6dc76632  gcc/read-rtl.cc
! 19d58ec4888ed299ec3d61116b19a9f9  gcc/real.cc
! e7380875008875384b72d2b0de474558  gcc/real.h
  034d6804511ba5d0c988e1e98ab47d5d  gcc/realmpfr.cc
  5ada18d8279938c02c4d9f3751acf660  gcc/realmpfr.h
! 72c28cbfd386e85c96ec183440fd8d7a  gcc/recog.cc
! fbbef9b35f059f98e6c055db0d1dbbc3  gcc/recog.h
  abf7aba0b8c470a07c63a7d04c3052e6  gcc/ree.cc
  4b5ca674534bbf5c690ccd0e5ec97cbc  gcc/reg-notes.def
  7a6bc7c58286682936006bbdfed0b1fe  gcc/reg-stack.cc
*************** e396a098307fc0c052e665f69ce59385  gcc/rt
*** 8086,8102 ****
  08c6c461f06fdd137ad0f0b3a7f19d95  gcc/rtl-iter.h
  a2f6c6250981e92b37bcd0b9e26f3e4c  gcc/rtl-ssa.h
  25859778ba43094b9db43118ebd9966c  gcc/rtl-ssa/access-utils.h
! aaf113c4fee28af86fb4c508885e9778  gcc/rtl-ssa/accesses.cc
  4d88db94ac449fd19adc79c345d37247  gcc/rtl-ssa/accesses.h
! 30c132feacfdd33c8d222473fbc75e8b  gcc/rtl-ssa/blocks.cc
  8b5c9d7cc52410c30ee4a6d5ab70b075  gcc/rtl-ssa/blocks.h
  5cde2269552a7c21c0cf0ea191677f6f  gcc/rtl-ssa/change-utils.h
! f3e87a0023b856d08711692c25499feb  gcc/rtl-ssa/changes.cc
  7a1cab9d5d9fc3565371c693311cb6de  gcc/rtl-ssa/changes.h
! 82782cb9a0b1d420ccdaeb45e17c49f5  gcc/rtl-ssa/functions.cc
  57adbb8825f146a65a4d4f62983ff9e6  gcc/rtl-ssa/functions.h
  b9205c8e82c85da2f7a035b090000f11  gcc/rtl-ssa/insn-utils.h
! ad3632fe65bd554592a0dc659fe5e021  gcc/rtl-ssa/insns.cc
  39a90a513fe2cc8637f8df109dbb0e16  gcc/rtl-ssa/insns.h
  93f7cdc164ed1bff5e2d2492fb7deed3  gcc/rtl-ssa/internals.h
  b437011708852e18def6acbf8fc4e1b7  gcc/rtl-ssa/internals.inl
--- 8086,8102 ----
  08c6c461f06fdd137ad0f0b3a7f19d95  gcc/rtl-iter.h
  a2f6c6250981e92b37bcd0b9e26f3e4c  gcc/rtl-ssa.h
  25859778ba43094b9db43118ebd9966c  gcc/rtl-ssa/access-utils.h
! d353c71995e1fb60cff37dfcdf013d35  gcc/rtl-ssa/accesses.cc
  4d88db94ac449fd19adc79c345d37247  gcc/rtl-ssa/accesses.h
! c25d64fa8ab44994fca84d1bebba3d80  gcc/rtl-ssa/blocks.cc
  8b5c9d7cc52410c30ee4a6d5ab70b075  gcc/rtl-ssa/blocks.h
  5cde2269552a7c21c0cf0ea191677f6f  gcc/rtl-ssa/change-utils.h
! bb4ffcc26b9acd943315da75076b786b  gcc/rtl-ssa/changes.cc
  7a1cab9d5d9fc3565371c693311cb6de  gcc/rtl-ssa/changes.h
! 70cc4bc4c064f42eedabded72014b5eb  gcc/rtl-ssa/functions.cc
  57adbb8825f146a65a4d4f62983ff9e6  gcc/rtl-ssa/functions.h
  b9205c8e82c85da2f7a035b090000f11  gcc/rtl-ssa/insn-utils.h
! dff2073fee0dd77ea4e1fd7b3b691f60  gcc/rtl-ssa/insns.cc
  39a90a513fe2cc8637f8df109dbb0e16  gcc/rtl-ssa/insns.h
  93f7cdc164ed1bff5e2d2492fb7deed3  gcc/rtl-ssa/internals.h
  b437011708852e18def6acbf8fc4e1b7  gcc/rtl-ssa/internals.inl
*************** eab7365dceccf86b8e9a8ccbb365afc3  gcc/rt
*** 8107,8113 ****
  40583244827449be4bd28679b4068f04  gcc/rtl-ssa/predicates.h
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
! 62fd7106098dbb19552824e445b591c7  gcc/rtl.def
  99fe063ed00930c8cefd14605bf76c9d  gcc/rtl.h
  78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
--- 8107,8113 ----
  40583244827449be4bd28679b4068f04  gcc/rtl-ssa/predicates.h
  24f0dd01b35b9a9b7f5bf7db574be3ec  gcc/rtl-tests.cc
  27956813d0124f5b5ec60d5a48840a34  gcc/rtl.cc
! d5fa22d4e702847e6ca00581513834fe  gcc/rtl.def
  99fe063ed00930c8cefd14605bf76c9d  gcc/rtl.h
  78a6761be9094aabb776bbba41b1906f  gcc/rtlanal.cc
  57073d447ccb92aa7b0276e4471824df  gcc/rtlanal.h
*************** ff662645190de703b9423727e52d659c  gcc/rt
*** 8120,8127 ****
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! efcc9a1ff34733d99b4b5ced1f7677c5  gcc/rust/ChangeLog
! c37ff78061953b076ac2eb5551b37be1  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  fbd9e5dbbbf2e1a3e28d730525b8eb78  gcc/rust/ast/rust-ast-builder.cc
  c08e21c65a155ba30f72631681911034  gcc/rust/ast/rust-ast-builder.h
--- 8120,8127 ----
  92e356710b1aae5aaabc8f47d6977fff  gcc/run-rtl-passes.cc
  f4eae48a3e90b34e88b5789e54f5f29a  gcc/run-rtl-passes.h
  add9bd82fcec23469a4d0f7df03d9589  gcc/rust/CONTRIBUTING.md
! af82b2a3c63ba0feee5f6be1e9744360  gcc/rust/ChangeLog
! 668da3fc21da447732bf5b1b7a4589fb  gcc/rust/Make-lang.in
  f3527e161e6e2827d299c1a928ebe1c6  gcc/rust/README.md
  fbd9e5dbbbf2e1a3e28d730525b8eb78  gcc/rust/ast/rust-ast-builder.cc
  c08e21c65a155ba30f72631681911034  gcc/rust/ast/rust-ast-builder.h
*************** d66fe903279a3ccbfb7b78a4f53dbeea  gcc/ru
*** 8168,8198 ****
  e84ec0880b45e2e86d61f0d36c314317  gcc/rust/ast/rust-pattern.h
  96b0d295ecceb5ea1c9f86b4d922834a  gcc/rust/ast/rust-stmt.h
  31891c319a6cd4db94f7cde8416e3c91  gcc/rust/ast/rust-type.h
! 39774c8ec83393047e843c9b8dff6822  gcc/rust/backend/rust-builtins.cc
  4d12359a7a47b6d290998ff743d3b250  gcc/rust/backend/rust-builtins.h
  841c4de1fb9c8ae4e98cfaf77ce23ebc  gcc/rust/backend/rust-compile-asm.cc
  f2a74dec153c7d458110255bddcd7c47  gcc/rust/backend/rust-compile-asm.h
! 2fdbba88097477ca13fdaae412d8f8eb  gcc/rust/backend/rust-compile-base.cc
! bb0150a6ba6d60262a1b33393f8d5341  gcc/rust/backend/rust-compile-base.h
! fd2bc9cab100ad48a45eff369cdaa1af  gcc/rust/backend/rust-compile-block.cc
  f6ccf3e6550e5f3d1e7f0903fad16e00  gcc/rust/backend/rust-compile-block.h
  84d2efe344d04876bdef59c09e170495  gcc/rust/backend/rust-compile-context.cc
! 6bc78d73b506cf623b5f0e27fdc8326e  gcc/rust/backend/rust-compile-context.h
! 3203afd45bdba60c1032acc07c1825c9  gcc/rust/backend/rust-compile-expr.cc
! 6e739c086dbb3e247abd2999667136e6  gcc/rust/backend/rust-compile-expr.h
  d2787752d55665c5f6a670bcb3949817  gcc/rust/backend/rust-compile-extern.h
  154038c60400f9e4a8ead9dcc5ea2388  gcc/rust/backend/rust-compile-fnparam.cc
  8c98ceabcde4b8a1cc6e31c5186c9656  gcc/rust/backend/rust-compile-fnparam.h
! 0936bd51bfcfadd02aa0b306f1df3a55  gcc/rust/backend/rust-compile-implitem.cc
  be9ce3db6b795d9db2585b15e17f476d  gcc/rust/backend/rust-compile-implitem.h
! 59ae6f1ab24ae2166c53f3547a682f93  gcc/rust/backend/rust-compile-intrinsic.cc
  a1fb8689400958af8126ae9c477c873e  gcc/rust/backend/rust-compile-intrinsic.h
! 2312bf92f44bf06f70f4403730f5aef0  gcc/rust/backend/rust-compile-item.cc
  4faa4d3dc0f5fd3cfd2981a8f06308e4  gcc/rust/backend/rust-compile-item.h
! 375a8b5f34115d69573237509dc5bac8  gcc/rust/backend/rust-compile-pattern.cc
  bedf30a4724e428664f2f471edda5d23  gcc/rust/backend/rust-compile-pattern.h
  cd711182d62e81ac9cb36e89d0ab5062  gcc/rust/backend/rust-compile-proc-macro.cc
! 759481aac456c546da0e05e2994a59b2  gcc/rust/backend/rust-compile-resolve-path.cc
  21dfb54bc738ea2ee1acadbdc70dda9b  gcc/rust/backend/rust-compile-resolve-path.h
  e75e1fda31ea166fc6ce912b0452b80b  gcc/rust/backend/rust-compile-stmt.cc
  0616707ec19e6af74a2368c47facedc8  gcc/rust/backend/rust-compile-stmt.h
--- 8168,8201 ----
  e84ec0880b45e2e86d61f0d36c314317  gcc/rust/ast/rust-pattern.h
  96b0d295ecceb5ea1c9f86b4d922834a  gcc/rust/ast/rust-stmt.h
  31891c319a6cd4db94f7cde8416e3c91  gcc/rust/ast/rust-type.h
! 725aa6e81ddd98d68655c4ee03b1c710  gcc/rust/backend/rust-builtins.cc
  4d12359a7a47b6d290998ff743d3b250  gcc/rust/backend/rust-builtins.h
  841c4de1fb9c8ae4e98cfaf77ce23ebc  gcc/rust/backend/rust-compile-asm.cc
  f2a74dec153c7d458110255bddcd7c47  gcc/rust/backend/rust-compile-asm.h
! 5004c72d4563fd35d1d00833630ea9fd  gcc/rust/backend/rust-compile-base.cc
! 4979b0b05a4f52a947b2ab69e9624bca  gcc/rust/backend/rust-compile-base.h
! ba780dc243a21d2e7aba2d2d75ee92b5  gcc/rust/backend/rust-compile-block.cc
  f6ccf3e6550e5f3d1e7f0903fad16e00  gcc/rust/backend/rust-compile-block.h
  84d2efe344d04876bdef59c09e170495  gcc/rust/backend/rust-compile-context.cc
! af2a17fba167e251d1430d6472a53988  gcc/rust/backend/rust-compile-context.h
! 62a9ccf3c82ae92a0fd4347720d4a2fc  gcc/rust/backend/rust-compile-drop-candidate.h
! 9391bdf86429fe8c58ab1b57812079f9  gcc/rust/backend/rust-compile-drop.cc
! 77dbd66486ded182adb98d19f354d08b  gcc/rust/backend/rust-compile-drop.h
! cb652c0f630ad72280c120b8fbd76461  gcc/rust/backend/rust-compile-expr.cc
! a1ca2dd4d8de654e157d8d1d57c51f14  gcc/rust/backend/rust-compile-expr.h
  d2787752d55665c5f6a670bcb3949817  gcc/rust/backend/rust-compile-extern.h
  154038c60400f9e4a8ead9dcc5ea2388  gcc/rust/backend/rust-compile-fnparam.cc
  8c98ceabcde4b8a1cc6e31c5186c9656  gcc/rust/backend/rust-compile-fnparam.h
! 6384f7fc7653808c81d624cb42ee26b0  gcc/rust/backend/rust-compile-implitem.cc
  be9ce3db6b795d9db2585b15e17f476d  gcc/rust/backend/rust-compile-implitem.h
! 3c55544b37d3793fa18ed67563e11497  gcc/rust/backend/rust-compile-intrinsic.cc
  a1fb8689400958af8126ae9c477c873e  gcc/rust/backend/rust-compile-intrinsic.h
! debf9a3a5e287832fa8aa1e9b9563612  gcc/rust/backend/rust-compile-item.cc
  4faa4d3dc0f5fd3cfd2981a8f06308e4  gcc/rust/backend/rust-compile-item.h
! dc87e1445c1d9a5d8ae94e6899ec4f62  gcc/rust/backend/rust-compile-pattern.cc
  bedf30a4724e428664f2f471edda5d23  gcc/rust/backend/rust-compile-pattern.h
  cd711182d62e81ac9cb36e89d0ab5062  gcc/rust/backend/rust-compile-proc-macro.cc
! 7d71806a89ed74aeb05a272362a51c5a  gcc/rust/backend/rust-compile-resolve-path.cc
  21dfb54bc738ea2ee1acadbdc70dda9b  gcc/rust/backend/rust-compile-resolve-path.h
  e75e1fda31ea166fc6ce912b0452b80b  gcc/rust/backend/rust-compile-stmt.cc
  0616707ec19e6af74a2368c47facedc8  gcc/rust/backend/rust-compile-stmt.h
*************** ce6124f6342485eba9fc0c1525c93d1a  gcc/ru
*** 8205,8218 ****
  a9a83e514f16f22fdc6e72fcb2e37a14  gcc/rust/backend/rust-compile.h
  53b4d6a019435dade0320636db64f287  gcc/rust/backend/rust-constexpr.cc
  8b7d1489d3387b799f0272f52df62581  gcc/rust/backend/rust-constexpr.h
! ec5cf22764b704e90be2f93cac1c16bf  gcc/rust/backend/rust-intrinsic-handlers.cc
! 91a625c9449712b5311b773867f2c91f  gcc/rust/backend/rust-intrinsic-handlers.h
  fe6f5539b06a5b2b5c8179da42f9cd0d  gcc/rust/backend/rust-mangle-legacy.cc
  3ff8e3c97c56af610fb789104c385560  gcc/rust/backend/rust-mangle-v0.cc
  3f96bdbc9eba300857511ae861409693  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
  65b098b3400d3263f18f7a28ccec2289  gcc/rust/backend/rust-tree.cc
! f6bd4fda68a044019b913ed98bf1523e  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
  280db2cd4a7844c95895b2a0a282b858  gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.lock
--- 8208,8221 ----
  a9a83e514f16f22fdc6e72fcb2e37a14  gcc/rust/backend/rust-compile.h
  53b4d6a019435dade0320636db64f287  gcc/rust/backend/rust-constexpr.cc
  8b7d1489d3387b799f0272f52df62581  gcc/rust/backend/rust-constexpr.h
! 26866b78d6223f1fb6142fc1878bcad0  gcc/rust/backend/rust-intrinsic-handlers.cc
! f4a269e1f4298aa2f5875e118b15253d  gcc/rust/backend/rust-intrinsic-handlers.h
  fe6f5539b06a5b2b5c8179da42f9cd0d  gcc/rust/backend/rust-mangle-legacy.cc
  3ff8e3c97c56af610fb789104c385560  gcc/rust/backend/rust-mangle-v0.cc
  3f96bdbc9eba300857511ae861409693  gcc/rust/backend/rust-mangle.cc
  dcbba0779b1eca1b210c23b8ef3dcc5d  gcc/rust/backend/rust-mangle.h
  65b098b3400d3263f18f7a28ccec2289  gcc/rust/backend/rust-tree.cc
! e01764aa48003b47d2549ebf88f9c579  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
  280db2cd4a7844c95895b2a0a282b858  gcc/rust/checks/errors/borrowck/ffi-polonius/Cargo.lock
*************** aa313bed142588fabe7a75b55aab6132  gcc/ru
*** 8274,8280 ****
  112a36e7d30b9b0f77222e93c2670c15  gcc/rust/checks/errors/borrowck/polonius/rust-polonius.h
  ec15191f2ba147daa1084d57531231bf  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
  57ac49cc8e37282bf94bba113bb7f244  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h
! 419fa1bca0212a99a9026d42d7708d60  gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
  445c13c9a9a98e8720d4322713af57d5  gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
  6305f4d04481595395e6628d3dda2a6f  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.cc
  e617b37b26e3ada0560acee515888e90  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.h
--- 8277,8283 ----
  112a36e7d30b9b0f77222e93c2670c15  gcc/rust/checks/errors/borrowck/polonius/rust-polonius.h
  ec15191f2ba147daa1084d57531231bf  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.cc
  57ac49cc8e37282bf94bba113bb7f244  gcc/rust/checks/errors/borrowck/rust-bir-builder-expr-stmt.h
! 31551ce94e855502d4d2f493c87629aa  gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
  445c13c9a9a98e8720d4322713af57d5  gcc/rust/checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h
  6305f4d04481595395e6628d3dda2a6f  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.cc
  e617b37b26e3ada0560acee515888e90  gcc/rust/checks/errors/borrowck/rust-bir-builder-pattern.h
*************** e227787587d4567c45f9966f8b82db7b  gcc/ru
*** 8310,8352 ****
  2947cb614792b8cb8d655e3661870770  gcc/rust/checks/errors/feature/rust-feature-store.h
  7d710333b381f61c295f5173f198fb92  gcc/rust/checks/errors/feature/rust-feature.cc
  19948fcb207a9348ff98d7b997afbdd6  gcc/rust/checks/errors/feature/rust-feature.h
! 11a7afddbf687c5618769c08d87017d5  gcc/rust/checks/errors/privacy/rust-privacy-check.cc
  43596711f6c0a8096ca24425a4133210  gcc/rust/checks/errors/privacy/rust-privacy-check.h
  19e8562ee6c9ded3899f6d0f02aea8b8  gcc/rust/checks/errors/privacy/rust-privacy-common.h
  141f1f2147a5be923ccc9ea923ba2885  gcc/rust/checks/errors/privacy/rust-privacy-ctx.cc
  59191eca50e396dc546b86ea28234673  gcc/rust/checks/errors/privacy/rust-privacy-ctx.h
! bd60b2b7d2dd6a05a8c7fe47ed8965fd  gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
! 78a6a5c048745c24231d5bdda74e7f74  gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
  ae661cfd7b4e13f7428e1fc2568db32c  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.cc
  05be35df2802adddd997ce762a360cfb  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.h
  2efbc6d644df7e2d6be35d17360c147d  gcc/rust/checks/errors/privacy/rust-reachability.cc
  7b312566736776dc642e0ac6069ee674  gcc/rust/checks/errors/privacy/rust-reachability.h
! ba57b95212e406a3e834f9ed1cdf00e0  gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc
! f7b06cf79a55c9659bdf40d25e0bf4b1  gcc/rust/checks/errors/privacy/rust-visibility-resolver.h
  2242ee9c3a9e335cce55e7458bef54aa  gcc/rust/checks/errors/rust-ast-validation.cc
  8a47aa2db46c3e82da2be3ad19266b53  gcc/rust/checks/errors/rust-ast-validation.h
  12cac8ce1e5761394a626d7d68b61c90  gcc/rust/checks/errors/rust-attribute-checker.cc
  83f6652638adfd9f110381c863d0fb64  gcc/rust/checks/errors/rust-attribute-checker.h
! 4d358762e8aed33ded474961da022148  gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
  e6c34d2279cd39fe13d7dc443e01bda3  gcc/rust/checks/errors/rust-builtin-attribute-checker.h
! 97eb5164438e6a5d6b7d7eaa08bc5e45  gcc/rust/checks/errors/rust-const-checker.cc
! 5b19c80d8eef717fef37e22c0f60caf2  gcc/rust/checks/errors/rust-const-checker.h
! f887dee766eacb3557fe74453215ae8e  gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
! f8bbf6383cf2f4051c4c724c78c03f28  gcc/rust/checks/errors/rust-hir-pattern-analysis.h
! ce0954d8a72edb61be6d8e646c61c6cf  gcc/rust/checks/errors/rust-readonly-check.cc
  7853e036ce1dfe09f579bf6a04994461  gcc/rust/checks/errors/rust-readonly-check.h
! b50c6015cedf461d30c5f73ad35d4413  gcc/rust/checks/errors/rust-unsafe-checker.cc
! 543a16c88c57a44588e4d5093ed78f6f  gcc/rust/checks/errors/rust-unsafe-checker.h
  45e1e285d36467b08cc19201db4f6644  gcc/rust/checks/lints/rust-lint-marklive-base.h
! 377ecc03102aabc4ebf650f8a562811c  gcc/rust/checks/lints/rust-lint-marklive.cc
! 09a6bbd6500d30d3646663f300340b97  gcc/rust/checks/lints/rust-lint-marklive.h
  39d2087b62541ef24b107e4edf79b300  gcc/rust/checks/lints/rust-lint-scan-deadcode.h
  d03052efded34394a85b3e891c267781  gcc/rust/checks/lints/rust-lint-unused-var.cc
  56160d4d1424a0469b62ce3dc9ef7886  gcc/rust/checks/lints/rust-lint-unused-var.h
! ba6521a1acc2f2dac3af19cb480e4b2d  gcc/rust/checks/lints/unused/rust-unused-checker.cc
! cb37b95682b2e7ba7b7ee8b8fd38e414  gcc/rust/checks/lints/unused/rust-unused-checker.h
! bd02f07bc0449d5332cbe841ea6407f2  gcc/rust/checks/lints/unused/rust-unused-collector.cc
! 255b7bc523902935456fdefb815a91e0  gcc/rust/checks/lints/unused/rust-unused-collector.h
  747ddc08d2d075789af43eefe97866a1  gcc/rust/checks/lints/unused/rust-unused-context.cc
  853df2211803f255982f2b5aca075734  gcc/rust/checks/lints/unused/rust-unused-context.h
  a5565d318380d1fcdf7d319909cb2fc8  gcc/rust/config-lang.in
--- 8313,8355 ----
  2947cb614792b8cb8d655e3661870770  gcc/rust/checks/errors/feature/rust-feature-store.h
  7d710333b381f61c295f5173f198fb92  gcc/rust/checks/errors/feature/rust-feature.cc
  19948fcb207a9348ff98d7b997afbdd6  gcc/rust/checks/errors/feature/rust-feature.h
! 726442b2d050255d59242216fd7682a6  gcc/rust/checks/errors/privacy/rust-privacy-check.cc
  43596711f6c0a8096ca24425a4133210  gcc/rust/checks/errors/privacy/rust-privacy-check.h
  19e8562ee6c9ded3899f6d0f02aea8b8  gcc/rust/checks/errors/privacy/rust-privacy-common.h
  141f1f2147a5be923ccc9ea923ba2885  gcc/rust/checks/errors/privacy/rust-privacy-ctx.cc
  59191eca50e396dc546b86ea28234673  gcc/rust/checks/errors/privacy/rust-privacy-ctx.h
! e8c2f34d3e2c10f31172d0edc8102821  gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
! c2b8436a900cde7c9e66fcfbcc78fc4a  gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
  ae661cfd7b4e13f7428e1fc2568db32c  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.cc
  05be35df2802adddd997ce762a360cfb  gcc/rust/checks/errors/privacy/rust-pub-restricted-visitor.h
  2efbc6d644df7e2d6be35d17360c147d  gcc/rust/checks/errors/privacy/rust-reachability.cc
  7b312566736776dc642e0ac6069ee674  gcc/rust/checks/errors/privacy/rust-reachability.h
! a5641c9d37a03ec3f6b02c1526546967  gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc
! b3e7ff4d569e53dc66140eb20a1eb0e1  gcc/rust/checks/errors/privacy/rust-visibility-resolver.h
  2242ee9c3a9e335cce55e7458bef54aa  gcc/rust/checks/errors/rust-ast-validation.cc
  8a47aa2db46c3e82da2be3ad19266b53  gcc/rust/checks/errors/rust-ast-validation.h
  12cac8ce1e5761394a626d7d68b61c90  gcc/rust/checks/errors/rust-attribute-checker.cc
  83f6652638adfd9f110381c863d0fb64  gcc/rust/checks/errors/rust-attribute-checker.h
! 990c2a7d8936f755b25111a32df261e0  gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
  e6c34d2279cd39fe13d7dc443e01bda3  gcc/rust/checks/errors/rust-builtin-attribute-checker.h
! 3f6f9e0eb49bc81771bafe50d3fd6c68  gcc/rust/checks/errors/rust-const-checker.cc
! 67e10a7c267b7d76beee87e476a5b6e6  gcc/rust/checks/errors/rust-const-checker.h
! 531fbb1b52b115cebe9d12ba0d55f7ec  gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
! 8ea473ceaab7b848fe509e2125e96bb3  gcc/rust/checks/errors/rust-hir-pattern-analysis.h
! e88240ad73316a7217ec73e9c56af09a  gcc/rust/checks/errors/rust-readonly-check.cc
  7853e036ce1dfe09f579bf6a04994461  gcc/rust/checks/errors/rust-readonly-check.h
! a4e912195a730fe8b3411c33a2a6ffee  gcc/rust/checks/errors/rust-unsafe-checker.cc
! 6d7868ec58fd91b7104061e53e64fa81  gcc/rust/checks/errors/rust-unsafe-checker.h
  45e1e285d36467b08cc19201db4f6644  gcc/rust/checks/lints/rust-lint-marklive-base.h
! cfbb4195232c2014f1cf01e998173d5f  gcc/rust/checks/lints/rust-lint-marklive.cc
! 041e939a099e77167cef5c1c59451b57  gcc/rust/checks/lints/rust-lint-marklive.h
  39d2087b62541ef24b107e4edf79b300  gcc/rust/checks/lints/rust-lint-scan-deadcode.h
  d03052efded34394a85b3e891c267781  gcc/rust/checks/lints/rust-lint-unused-var.cc
  56160d4d1424a0469b62ce3dc9ef7886  gcc/rust/checks/lints/rust-lint-unused-var.h
! e66624ecbe01db8c56e5d44886001b6b  gcc/rust/checks/lints/unused/rust-unused-checker.cc
! 40a5da9a12efc26d12a3ee1d442e23d6  gcc/rust/checks/lints/unused/rust-unused-checker.h
! 2acd4930a58466cf0221890b55f59e9f  gcc/rust/checks/lints/unused/rust-unused-collector.cc
! 2f5987313b59ad90258eb2dde2f52fc8  gcc/rust/checks/lints/unused/rust-unused-collector.h
  747ddc08d2d075789af43eefe97866a1  gcc/rust/checks/lints/unused/rust-unused-context.cc
  853df2211803f255982f2b5aca075734  gcc/rust/checks/lints/unused/rust-unused-context.h
  a5565d318380d1fcdf7d319909cb2fc8  gcc/rust/config-lang.in
*************** f357dcf5713381e22c7036dfc40716f1  gcc/ru
*** 8463,8469 ****
  3b09f754b9f5e335e0b3f68b8506fa4e  gcc/rust/lang.opt
  a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  37d2c9999aa0dbb0df068a1ae29137fa  gcc/rust/lex/rust-input-source.h
! ce4fba95ea7e4feff6057c8a17ee976a  gcc/rust/lex/rust-lex.cc
  419d2d90639924f8f79b1f4adae847d4  gcc/rust/lex/rust-lex.h
  30de1c873c0ade752ea45e73f5ea3b17  gcc/rust/lex/rust-token.cc
  9409a794ae512a78c67b5d860d9ce516  gcc/rust/lex/rust-token.h
--- 8466,8472 ----
  3b09f754b9f5e335e0b3f68b8506fa4e  gcc/rust/lang.opt
  a11b51758cadbfbc20e4c2969af1aa85  gcc/rust/lang.opt.urls
  37d2c9999aa0dbb0df068a1ae29137fa  gcc/rust/lex/rust-input-source.h
! 2c49f1c9edc6d94f88f130e496ffca74  gcc/rust/lex/rust-lex.cc
  419d2d90639924f8f79b1f4adae847d4  gcc/rust/lex/rust-lex.h
  30de1c873c0ade752ea45e73f5ea3b17  gcc/rust/lex/rust-token.cc
  9409a794ae512a78c67b5d860d9ce516  gcc/rust/lex/rust-token.h
*************** c29fa936687b478a9889f3380ee0df68  gcc/ru
*** 8492,8525 ****
  f1176cd92a1865135dd9db86c6251440  gcc/rust/parse/rust-parse.cc
  b9df75ef20fae98d8d709a88c2fb324b  gcc/rust/parse/rust-parse.h
  2f3ffa4e5b28a059fadd881c085fd620  gcc/rust/resolve/rust-ast-resolve.h
! 7bbf4878ffef5aca403c3c2d662b02e5  gcc/rust/resolve/rust-default-resolver.cc
! b7996557d00b477e5b56587a0f238cd4  gcc/rust/resolve/rust-default-resolver.h
! 06aec028cd68772b191060aa24938d04  gcc/rust/resolve/rust-early-name-resolver-2.0.cc
! 4249cce4838e2ebca4e6e19bab77ff49  gcc/rust/resolve/rust-early-name-resolver-2.0.h
! 450113423b1a2f2e8fca9abfc24491ac  gcc/rust/resolve/rust-finalize-imports-2.0.cc
! e35421f45738cdcd47be3ec6730e42ef  gcc/rust/resolve/rust-finalize-imports-2.0.h
  8a259cbd5ed5a4471451f6fedf12e7c8  gcc/rust/resolve/rust-forever-stack.cc
! c2abfb534393f32ff8809154169a0d07  gcc/rust/resolve/rust-forever-stack.h
! 6a65fdc244a4a4bfea803a740338dbf1  gcc/rust/resolve/rust-forever-stack.hxx
  6d2f86dd0b3642cf5cc02bcfc48e7658  gcc/rust/resolve/rust-ice-finalizer.cc
  ba641854f27f5fd4a0cca8fbf125da14  gcc/rust/resolve/rust-ice-finalizer.h
  6a154413155737dfad01c2c325c7dd5e  gcc/rust/resolve/rust-identifier-path.cc
  b92ff8c2ae9e9f07117f272930310dc1  gcc/rust/resolve/rust-identifier-path.h
! 590df3e3e06f373943c90c7a8fef8040  gcc/rust/resolve/rust-immutable-name-resolution-context.cc
! f5c7461be946307b11f49c3acf706f34  gcc/rust/resolve/rust-immutable-name-resolution-context.h
! ea0df576a879fdd081434c3f0dbbb31f  gcc/rust/resolve/rust-late-name-resolver-2.0.cc
  196fd10d86327529bddea39566bca9d7  gcc/rust/resolve/rust-late-name-resolver-2.0.h
! da1975191cedf6a70b4fb3d74c13c039  gcc/rust/resolve/rust-name-resolution-context.cc
! 4b78910787fffe5bb403c46b0b00bd0c  gcc/rust/resolve/rust-name-resolution-context.h
! dd91a3d44a85113aee2ed3cee3111362  gcc/rust/resolve/rust-name-resolution-context.hxx
! 955d3210e5486042dd1e300bbb967f35  gcc/rust/resolve/rust-name-resolution.h
  c2f50aadc07def03bd8b604efb52b0e2  gcc/rust/resolve/rust-name-resolver.cc
  31d42405104553d1024b005e4842c8c2  gcc/rust/resolve/rust-name-resolver.h
! 783acc8c1bd927a5890bd0b703c5a1ae  gcc/rust/resolve/rust-resolve-builtins.cc
! 9f7080d5a5a44fbb1d53e8db861f55d6  gcc/rust/resolve/rust-resolve-builtins.h
  f0ecfa8102b52040dd8aa3421fec33bf  gcc/rust/resolve/rust-rib.cc
  6d6d5eff194daa39d1f0a1ba704ee2e8  gcc/rust/resolve/rust-rib.h
! 7c5fae78fc245c7f3b6a959877c111d0  gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
  50e39339fed312a6fd27ff44603261ef  gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
  3f2008592c4958821acded6d659117c0  gcc/rust/rust-attribs.cc
  f1b5a4dd8502cad9b868c27742da2158  gcc/rust/rust-backend.h
--- 8495,8528 ----
  f1176cd92a1865135dd9db86c6251440  gcc/rust/parse/rust-parse.cc
  b9df75ef20fae98d8d709a88c2fb324b  gcc/rust/parse/rust-parse.h
  2f3ffa4e5b28a059fadd881c085fd620  gcc/rust/resolve/rust-ast-resolve.h
! 277d79e5cb4a83612cd678de4bf79b72  gcc/rust/resolve/rust-default-resolver.cc
! c1e8fa39b2f3aa3b67138b3b8e820f81  gcc/rust/resolve/rust-default-resolver.h
! 1a84e304ce2ea7f5e543c8525a8af161  gcc/rust/resolve/rust-early-name-resolver-2.0.cc
! 359ada6e7c2b64bc426e62d1dae563a8  gcc/rust/resolve/rust-early-name-resolver-2.0.h
! 25862580170087242b3dbe7e2a4f68a9  gcc/rust/resolve/rust-finalize-imports-2.0.cc
! 4f1883a60a6b95c327fdd5ca111a8ae1  gcc/rust/resolve/rust-finalize-imports-2.0.h
! 92cd152f8b3ab89305df62a48f72fe24  gcc/rust/resolve/rust-finalized-name-resolution-context.cc
! 49a76ea5229f3dc5a968f4c61eba8af0  gcc/rust/resolve/rust-finalized-name-resolution-context.h
  8a259cbd5ed5a4471451f6fedf12e7c8  gcc/rust/resolve/rust-forever-stack.cc
! 4cc1c56ad887783f699541d8159108d7  gcc/rust/resolve/rust-forever-stack.h
! 7381b9354a2610a14c392dba7000a718  gcc/rust/resolve/rust-forever-stack.hxx
  6d2f86dd0b3642cf5cc02bcfc48e7658  gcc/rust/resolve/rust-ice-finalizer.cc
  ba641854f27f5fd4a0cca8fbf125da14  gcc/rust/resolve/rust-ice-finalizer.h
  6a154413155737dfad01c2c325c7dd5e  gcc/rust/resolve/rust-identifier-path.cc
  b92ff8c2ae9e9f07117f272930310dc1  gcc/rust/resolve/rust-identifier-path.h
! c1f3c0cb79a8fbd736dc384ae8a8d8b1  gcc/rust/resolve/rust-late-name-resolver-2.0.cc
  196fd10d86327529bddea39566bca9d7  gcc/rust/resolve/rust-late-name-resolver-2.0.h
! a6c3ba7fae475191c984c0a82896e61b  gcc/rust/resolve/rust-name-resolution-context.cc
! 16c377fac42edecce6cd271bcdc4958d  gcc/rust/resolve/rust-name-resolution-context.h
! ba068ef78bf3cfe836f52e787dc22430  gcc/rust/resolve/rust-name-resolution-context.hxx
! c509b62ea13fb0bf6144776a9827b34d  gcc/rust/resolve/rust-name-resolution.h
  c2f50aadc07def03bd8b604efb52b0e2  gcc/rust/resolve/rust-name-resolver.cc
  31d42405104553d1024b005e4842c8c2  gcc/rust/resolve/rust-name-resolver.h
! 7fcef69ba4ffe93e949083b69308c08a  gcc/rust/resolve/rust-resolve-builtins.cc
! 3cbea7c7a736b933402571670431d279  gcc/rust/resolve/rust-resolve-builtins.h
  f0ecfa8102b52040dd8aa3421fec33bf  gcc/rust/resolve/rust-rib.cc
  6d6d5eff194daa39d1f0a1ba704ee2e8  gcc/rust/resolve/rust-rib.h
! ad710e78458fb01628ecc37650356993  gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
  50e39339fed312a6fd27ff44603261ef  gcc/rust/resolve/rust-toplevel-name-resolver-2.0.h
  3f2008592c4958821acded6d659117c0  gcc/rust/rust-attribs.cc
  f1b5a4dd8502cad9b868c27742da2158  gcc/rust/rust-backend.h
*************** a7f99c3f3c88cf0a588f4ef4d69193e7  gcc/ru
*** 8534,8540 ****
  aabb2405ea0a5e6eebbde91d56262af9  gcc/rust/rust-location.h
  4ed3043615b8b15ebf0a975ae7e7964f  gcc/rust/rust-object-export.cc
  5ffc502f49b1fc8d440b5aecd8319051  gcc/rust/rust-object-export.h
! 3d8783a48228976ce589efb49237c2f1  gcc/rust/rust-session-manager.cc
  8f2aefaf40005ca6aa11d5bdc38386c2  gcc/rust/rust-session-manager.h
  9c4725bebe01459b9a7d4636afdd1d10  gcc/rust/rust-system.h
  600dca9d737e69cf4546974e563a25ab  gcc/rust/rust-target-def.h
--- 8537,8543 ----
  aabb2405ea0a5e6eebbde91d56262af9  gcc/rust/rust-location.h
  4ed3043615b8b15ebf0a975ae7e7964f  gcc/rust/rust-object-export.cc
  5ffc502f49b1fc8d440b5aecd8319051  gcc/rust/rust-object-export.h
! f966663b99fc02f105b4754f595d32e7  gcc/rust/rust-session-manager.cc
  8f2aefaf40005ca6aa11d5bdc38386c2  gcc/rust/rust-session-manager.h
  9c4725bebe01459b9a7d4636afdd1d10  gcc/rust/rust-system.h
  600dca9d737e69cf4546974e563a25ab  gcc/rust/rust-target-def.h
*************** a3cb470d289c68f292561181664234a6  gcc/ru
*** 8554,8586 ****
  6b760eef27171ffd12ad1f648c2b3c12  gcc/rust/typecheck/rust-hir-path-probe.h
  f9d17454f9a3f63a28b2f424a4b54cc0  gcc/rust/typecheck/rust-hir-trait-reference.cc
  79b925c800d1503093e9a2c69c3637eb  gcc/rust/typecheck/rust-hir-trait-reference.h
! 2e0c72b98aeb86d2eec15f7104ffaa33  gcc/rust/typecheck/rust-hir-trait-resolve.cc
  6b3c965d8fd17b77ca417b28093ea6e9  gcc/rust/typecheck/rust-hir-trait-resolve.h
  42513214f5c095b438bb64d1bd3abbce  gcc/rust/typecheck/rust-hir-type-bounds.h
  b747048be4fe6c22589cf2721606db7b  gcc/rust/typecheck/rust-hir-type-check-base.cc
  0f4ab4291d61b503e020bfb9289414b9  gcc/rust/typecheck/rust-hir-type-check-base.h
! b4f6bbf96b92718fc689ccfa1cc4e564  gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
  f4277ce8c7f84fcad6d767403000509d  gcc/rust/typecheck/rust-hir-type-check-enumitem.h
! 9c5b8831c5a3b1bb314bb71cfda38b86  gcc/rust/typecheck/rust-hir-type-check-expr.cc
  86eebb1a9fdc10e3b3db716be9495378  gcc/rust/typecheck/rust-hir-type-check-expr.h
! 538448510eee83d3cdd5e11139979114  gcc/rust/typecheck/rust-hir-type-check-implitem.cc
  b5767f59e24736d3d41a91868444e0cc  gcc/rust/typecheck/rust-hir-type-check-implitem.h
! af54f15055dd1447a419f354c43346e3  gcc/rust/typecheck/rust-hir-type-check-item.cc
  e1aa66b1024a0faf4498dfa85056d3b4  gcc/rust/typecheck/rust-hir-type-check-item.h
! b4af5a55d6d7857d9c8c0a97da299ca8  gcc/rust/typecheck/rust-hir-type-check-path.cc
! 026249ec2dea669bdd79dc37f644fc0d  gcc/rust/typecheck/rust-hir-type-check-pattern.cc
  bffd233b66e2222e22ce2d280c8d9f77  gcc/rust/typecheck/rust-hir-type-check-pattern.h
  7e9f5a81fd8ee84014b141f4e73e1ae2  gcc/rust/typecheck/rust-hir-type-check-stmt.cc
  e51af9ea81d7c3d89682ee2c51ebaf03  gcc/rust/typecheck/rust-hir-type-check-stmt.h
  1ef7426e8ca96c599e36d794e6ab461c  gcc/rust/typecheck/rust-hir-type-check-struct-field.h
  6a9823eb94374a0ddaea576a26d1e899  gcc/rust/typecheck/rust-hir-type-check-struct.cc
! ff592ceeba793ca4e87569801f6ff9a2  gcc/rust/typecheck/rust-hir-type-check-type.cc
  6b42e54540f28a6b6cd0ffce4b704239  gcc/rust/typecheck/rust-hir-type-check-type.h
! 0b4fc79eabb9158e315c3045c8a8bb8e  gcc/rust/typecheck/rust-hir-type-check.cc
  961b7fe1e412ab3adf5c0d0944b2fd71  gcc/rust/typecheck/rust-hir-type-check.h
  134cb0bded72dc6de4562859c151a599  gcc/rust/typecheck/rust-substitution-mapper.cc
  60c4588af4ad75caffaf89afd32d15ec  gcc/rust/typecheck/rust-substitution-mapper.h
! 3710a7ace6b75d7dcd78bf4e3c2223bf  gcc/rust/typecheck/rust-type-util.cc
  aab7e220ef86bcffdc6058162319300b  gcc/rust/typecheck/rust-type-util.h
  1e48a43b6afcfbe467c649ac2f0a3624  gcc/rust/typecheck/rust-typecheck-context.cc
  6776739078e81af1138b656938baf87f  gcc/rust/typecheck/rust-tyty-bounds.cc
--- 8557,8591 ----
  6b760eef27171ffd12ad1f648c2b3c12  gcc/rust/typecheck/rust-hir-path-probe.h
  f9d17454f9a3f63a28b2f424a4b54cc0  gcc/rust/typecheck/rust-hir-trait-reference.cc
  79b925c800d1503093e9a2c69c3637eb  gcc/rust/typecheck/rust-hir-trait-reference.h
! 4b0e55796567c44eda3ed1d107c754fa  gcc/rust/typecheck/rust-hir-trait-resolve.cc
  6b3c965d8fd17b77ca417b28093ea6e9  gcc/rust/typecheck/rust-hir-trait-resolve.h
  42513214f5c095b438bb64d1bd3abbce  gcc/rust/typecheck/rust-hir-type-bounds.h
  b747048be4fe6c22589cf2721606db7b  gcc/rust/typecheck/rust-hir-type-check-base.cc
  0f4ab4291d61b503e020bfb9289414b9  gcc/rust/typecheck/rust-hir-type-check-base.h
! 20b2a3219deccbf248614febf0b203b2  gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
  f4277ce8c7f84fcad6d767403000509d  gcc/rust/typecheck/rust-hir-type-check-enumitem.h
! 4bc245105dcce921357b5ed74b75f06f  gcc/rust/typecheck/rust-hir-type-check-expr.cc
  86eebb1a9fdc10e3b3db716be9495378  gcc/rust/typecheck/rust-hir-type-check-expr.h
! 39cfcc2c869492d61c7c298d5ad8d403  gcc/rust/typecheck/rust-hir-type-check-implitem.cc
  b5767f59e24736d3d41a91868444e0cc  gcc/rust/typecheck/rust-hir-type-check-implitem.h
! 23d9b140ae1b66aafbfbbca863e8da3a  gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc
! 813303c48158907defbfe6376dc10ea8  gcc/rust/typecheck/rust-hir-type-check-intrinsic.h
! 2b2f42e4a646f8fdacae31dd08690426  gcc/rust/typecheck/rust-hir-type-check-item.cc
  e1aa66b1024a0faf4498dfa85056d3b4  gcc/rust/typecheck/rust-hir-type-check-item.h
! b2325163791daf13aabdd314a3f52d43  gcc/rust/typecheck/rust-hir-type-check-path.cc
! 4cf4ae988e8dfbd242bf7215e15c5b5f  gcc/rust/typecheck/rust-hir-type-check-pattern.cc
  bffd233b66e2222e22ce2d280c8d9f77  gcc/rust/typecheck/rust-hir-type-check-pattern.h
  7e9f5a81fd8ee84014b141f4e73e1ae2  gcc/rust/typecheck/rust-hir-type-check-stmt.cc
  e51af9ea81d7c3d89682ee2c51ebaf03  gcc/rust/typecheck/rust-hir-type-check-stmt.h
  1ef7426e8ca96c599e36d794e6ab461c  gcc/rust/typecheck/rust-hir-type-check-struct-field.h
  6a9823eb94374a0ddaea576a26d1e899  gcc/rust/typecheck/rust-hir-type-check-struct.cc
! 7dc2d7c0251234467a82bc43546e6c26  gcc/rust/typecheck/rust-hir-type-check-type.cc
  6b42e54540f28a6b6cd0ffce4b704239  gcc/rust/typecheck/rust-hir-type-check-type.h
! 37925f1522f5003083be6eafe53a56df  gcc/rust/typecheck/rust-hir-type-check.cc
  961b7fe1e412ab3adf5c0d0944b2fd71  gcc/rust/typecheck/rust-hir-type-check.h
  134cb0bded72dc6de4562859c151a599  gcc/rust/typecheck/rust-substitution-mapper.cc
  60c4588af4ad75caffaf89afd32d15ec  gcc/rust/typecheck/rust-substitution-mapper.h
! 75b625fc99412f1c9a1e2d697562d7a3  gcc/rust/typecheck/rust-type-util.cc
  aab7e220ef86bcffdc6058162319300b  gcc/rust/typecheck/rust-type-util.h
  1e48a43b6afcfbe467c649ac2f0a3624  gcc/rust/typecheck/rust-typecheck-context.cc
  6776739078e81af1138b656938baf87f  gcc/rust/typecheck/rust-tyty-bounds.cc
*************** eb1bfe030c9849086601bd0822a7e35a  gcc/ru
*** 8606,8613 ****
  5fab4ccaa5f132cbe9ca8f09047732ad  gcc/rust/util/optional.h
  28960566056dffb6dd86b0c3ad60bf39  gcc/rust/util/rust-abi.cc
  a85e112c6426c604dd9a3a9af712e53b  gcc/rust/util/rust-abi.h
! 69981f8af65b8480fe8cdf7d00210c90  gcc/rust/util/rust-attribute-values.h
! 192fef7b6febc4b92f4bae8d4460d7fa  gcc/rust/util/rust-attributes.cc
  1b2fe1c713b7e2f9161f5be177c89309  gcc/rust/util/rust-attributes.h
  f7a4957c1c7c3fc0e851a38ef997ce72  gcc/rust/util/rust-base62.cc
  a674c0d71a00cc704ca2d16c25f4ba3e  gcc/rust/util/rust-base62.h
--- 8611,8618 ----
  5fab4ccaa5f132cbe9ca8f09047732ad  gcc/rust/util/optional.h
  28960566056dffb6dd86b0c3ad60bf39  gcc/rust/util/rust-abi.cc
  a85e112c6426c604dd9a3a9af712e53b  gcc/rust/util/rust-abi.h
! c8d801cf7f7023cdd19f386cc67c221a  gcc/rust/util/rust-attribute-values.h
! a2c4aa15a42974c74b3cff54d22611d9  gcc/rust/util/rust-attributes.cc
  1b2fe1c713b7e2f9161f5be177c89309  gcc/rust/util/rust-attributes.h
  f7a4957c1c7c3fc0e851a38ef997ce72  gcc/rust/util/rust-base62.cc
  a674c0d71a00cc704ca2d16c25f4ba3e  gcc/rust/util/rust-base62.h
*************** d87ca49f50adda86e874b992b90d3a0e  gcc/ru
*** 8623,8637 ****
  88f7642dab3e02fac387a93aad82300a  gcc/rust/util/rust-edition.h
  6bad0adc3974de844f3be9f38aeccec7  gcc/rust/util/rust-ggc.cc
  073d902536493807ef695baf24a28444  gcc/rust/util/rust-ggc.h
! 816d90e87f0dc49e41b4af444f419cce  gcc/rust/util/rust-hir-map.cc
! 78dff645c18e1bc860ccf4a7aeceb9e3  gcc/rust/util/rust-hir-map.h
  2bf44e898c6773e49f63aa99ea22f2aa  gcc/rust/util/rust-identifier.h
  9da3d0bbd1f3b83f29287582aaadf7fd  gcc/rust/util/rust-inline-visitor.h
! d16c47cc0e7ce29335f7f3b25415e39f  gcc/rust/util/rust-intrinsic-values.h
  fcb0ef58bd45344a4c08af0945cd41b9  gcc/rust/util/rust-keyword-values.cc
  3c394a316c15589123f05ad6573d7e91  gcc/rust/util/rust-keyword-values.h
! 0c13bb8a31598164f8569bc3ab5400f9  gcc/rust/util/rust-lang-item.cc
! fc5d29f6ca4269196a4963b3cb42c182  gcc/rust/util/rust-lang-item.h
  8ce3ff7da4a1241c73c997a055b4b790  gcc/rust/util/rust-mapping-common.h
  25026158bc1a032172cd56fdc7d1a314  gcc/rust/util/rust-operators.h
  bdaeeceba08beadb8340194c926569d7  gcc/rust/util/rust-punycode.cc
--- 8628,8642 ----
  88f7642dab3e02fac387a93aad82300a  gcc/rust/util/rust-edition.h
  6bad0adc3974de844f3be9f38aeccec7  gcc/rust/util/rust-ggc.cc
  073d902536493807ef695baf24a28444  gcc/rust/util/rust-ggc.h
! 591e9b73244e91fc11b48ec40fbec6bc  gcc/rust/util/rust-hir-map.cc
! ec9022f2009acbe16b5fe13f505c50ca  gcc/rust/util/rust-hir-map.h
  2bf44e898c6773e49f63aa99ea22f2aa  gcc/rust/util/rust-identifier.h
  9da3d0bbd1f3b83f29287582aaadf7fd  gcc/rust/util/rust-inline-visitor.h
! b8d060da12f3aa72ca10666d27a2388d  gcc/rust/util/rust-intrinsic-values.h
  fcb0ef58bd45344a4c08af0945cd41b9  gcc/rust/util/rust-keyword-values.cc
  3c394a316c15589123f05ad6573d7e91  gcc/rust/util/rust-keyword-values.h
! f36834540fb05090a2c12fffeeb7861d  gcc/rust/util/rust-lang-item.cc
! 5e4a9fc2495ef469623dc0bb8734706a  gcc/rust/util/rust-lang-item.h
  8ce3ff7da4a1241c73c997a055b4b790  gcc/rust/util/rust-mapping-common.h
  25026158bc1a032172cd56fdc7d1a314  gcc/rust/util/rust-operators.h
  bdaeeceba08beadb8340194c926569d7  gcc/rust/util/rust-punycode.cc
*************** a92419791c8e8d842c6ef029d4537463  gcc/sa
*** 8653,8665 ****
  8956392cfb34e0cb12dad1fc890f7d08  gcc/sbitmap.h
  03cad36b8edcdc33b1396d07ad34618b  gcc/sched-deps.cc
  7f3c871d86d0577c88b4dbf4cb7bfde6  gcc/sched-ebb.cc
! da5c82758bbb99130aa6287f7a6c1342  gcc/sched-int.h
  017ab43b4cc0ef03de29f6129f0423e0  gcc/sched-rgn.cc
  ebd9e973e52eba392362d3f86683d9fc  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
  14833ad25c22e7c51f5cb3c7b81f5d8f  gcc/sel-sched-ir.cc
! a12c4cbc5c590de0527d05f6da945df1  gcc/sel-sched-ir.h
! cd57f647cf61d024543d4929a0ee9cdc  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
  75125554eb32a562c567b40b674dceab  gcc/selftest-json.cc
  27bb8dee2b95b3a7efa33a896dd831e4  gcc/selftest-json.h
--- 8658,8670 ----
  8956392cfb34e0cb12dad1fc890f7d08  gcc/sbitmap.h
  03cad36b8edcdc33b1396d07ad34618b  gcc/sched-deps.cc
  7f3c871d86d0577c88b4dbf4cb7bfde6  gcc/sched-ebb.cc
! 823d4acc4542804259cc6cdb1dcd0a44  gcc/sched-int.h
  017ab43b4cc0ef03de29f6129f0423e0  gcc/sched-rgn.cc
  ebd9e973e52eba392362d3f86683d9fc  gcc/sel-sched-dump.cc
  3b84f3b6b449c883935ef347892e770c  gcc/sel-sched-dump.h
  14833ad25c22e7c51f5cb3c7b81f5d8f  gcc/sel-sched-ir.cc
! baa6f0b7fef121981bc56afcedfd3650  gcc/sel-sched-ir.h
! 76a5b95f63d4aa91c53a57798b0ed1da  gcc/sel-sched.cc
  c8e14bcadd8fd37034a186ff2eed497c  gcc/sel-sched.h
  75125554eb32a562c567b40b674dceab  gcc/selftest-json.cc
  27bb8dee2b95b3a7efa33a896dd831e4  gcc/selftest-json.h
*************** f6ea836b96305da3227132e4f3e5cec8  gcc/sp
*** 8686,8692 ****
  b4613da3bc9da7d2d84454d55d2161b5  gcc/spellcheck-tree.h
  b61da9baa92b1b10801198f323e85902  gcc/spellcheck.cc
  7291c57c94e54746e4cac5d66ebc1f39  gcc/spellcheck.h
! dba4fe2f9746e20d7e3dc962566fde20  gcc/splay-tree-utils.cc
  5d8476ed18471420cd2608c85775ffc0  gcc/splay-tree-utils.h
  7bba1b8d53b474220adabfc9229be73f  gcc/splay-tree-utils.tcc
  05b4c700730898a0e6790041a858fed6  gcc/sreal.cc
--- 8691,8697 ----
  b4613da3bc9da7d2d84454d55d2161b5  gcc/spellcheck-tree.h
  b61da9baa92b1b10801198f323e85902  gcc/spellcheck.cc
  7291c57c94e54746e4cac5d66ebc1f39  gcc/spellcheck.h
! 77cfb7d17598cceeb785ef5714c40c17  gcc/splay-tree-utils.cc
  5d8476ed18471420cd2608c85775ffc0  gcc/splay-tree-utils.h
  7bba1b8d53b474220adabfc9229be73f  gcc/splay-tree-utils.tcc
  05b4c700730898a0e6790041a858fed6  gcc/sreal.cc
*************** e1899978827cfd0d1570e61a7c30d94a  gcc/sy
*** 8721,8738 ****
  9f6e7e9cd1feccb68765288812751504  gcc/symtab-thunks.h
  5fbb8f16cb7ed8911c95fa1f5b8139ea  gcc/symtab.cc
  aa4c1d56c6974e4059ea89c2e315974f  gcc/sync-builtins.def
! c77257b397fb64b15bd2aa96b7c85644  gcc/system.h
  53f5e973b2158c80ba4a144b03350c73  gcc/target-def.h
  d294651bcc46af1abb89e48cd851fd40  gcc/target-globals.cc
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
! 5fc83e2b266e1717268d6aca5c3983d3  gcc/target.def
  4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
! e957b925f8c93e5ed31ef45f3d17d839  gcc/targhooks.cc
! b1068b0d3d77d5a55802a29a9f8a08d7  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! f3ff11099e36902a004501ee05bfface  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8726,8743 ----
  9f6e7e9cd1feccb68765288812751504  gcc/symtab-thunks.h
  5fbb8f16cb7ed8911c95fa1f5b8139ea  gcc/symtab.cc
  aa4c1d56c6974e4059ea89c2e315974f  gcc/sync-builtins.def
! cffe3ad55affa7644cec5f531914557b  gcc/system.h
  53f5e973b2158c80ba4a144b03350c73  gcc/target-def.h
  d294651bcc46af1abb89e48cd851fd40  gcc/target-globals.cc
  fe7cc01d7dd25103bc61ab1a33dd54dc  gcc/target-globals.h
  5f6f168a092c141ef64501f44439df42  gcc/target-hooks-macros.h
  f24751f278bee1ac8dc861467d9f96a3  gcc/target-insns.def
! 1546c32d2c000c66103931f46587776e  gcc/target.def
  4685fe9ae3053826ebb0e8a51092bb53  gcc/target.h
! 8dfc7c2c4f5fcc8bae4e56f4908de008  gcc/targhooks.cc
! dcedef5930550e30cc9ea611bbffde5b  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 16f0d7edc2946acb62ab0723d8dabe9f  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** dcd88cf4442d15fe1ee6cf0c65bec7ba  gcc/te
*** 19631,19636 ****
--- 19636,19642 ----
  338ba582f00391fbbba5113c8a1bb792  gcc/testsuite/c-c++-common/gomp/atomic-7.c
  99033a31ad0844a80bb561d39f21bc2c  gcc/testsuite/c-c++-common/gomp/atomic-8.c
  3cc6adb13ca30af2db982d07306a24d7  gcc/testsuite/c-c++-common/gomp/atomic-9.c
+ bd57b53fdb02f6b6f97ba56e2f4df479  gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c
  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
*************** de8b721b2a72aa22dcc85aab85b9358f  gcc/te
*** 19687,19692 ****
--- 19693,19699 ----
  3251583f6af9d77fcf59ecb8690e9b0a  gcc/testsuite/c-c++-common/gomp/declare-mapper-17.c
  7322f7e0eb4982ddf131f0e6172d0f23  gcc/testsuite/c-c++-common/gomp/declare-mapper-18.c
  f461c63b229b1f64fb248390ef2bc81e  gcc/testsuite/c-c++-common/gomp/declare-mapper-19.c
+ 19dbbe36fb00aff47989c5f8ea56579a  gcc/testsuite/c-c++-common/gomp/declare-mapper-2.c
  82cfee0d130968ddf4974bc29da1aa48  gcc/testsuite/c-c++-common/gomp/declare-mapper-3.c
  dc978c04bd962929e54d5abee2d5bb67  gcc/testsuite/c-c++-common/gomp/declare-mapper-4.c
  f8dc659137869e2f5861c7755d376cfc  gcc/testsuite/c-c++-common/gomp/declare-mapper-5.c
*************** b057ecd7a4beaa9561fa8fa6d3f3128f  gcc/te
*** 19790,19795 ****
--- 19797,19803 ----
  ad68611dd933bed25a8c937612a58830  gcc/testsuite/c-c++-common/gomp/for-5.c
  950c6183fde386cc5d3fa35c2805eeb0  gcc/testsuite/c-c++-common/gomp/for-6.c
  b9f70a44108d3410396c88c5623b3919  gcc/testsuite/c-c++-common/gomp/for-7.c
+ d402544a65b18439a406977ce1ca1a9b  gcc/testsuite/c-c++-common/gomp/for-8.c
  65d6afb7dedb6ef49728ff7a0f9fe0b5  gcc/testsuite/c-c++-common/gomp/groupprivate-1.c
  1216c6524ff3a9bfcf178bb37b9b3961  gcc/testsuite/c-c++-common/gomp/has-include-1.c
  23583f36afaee374633de54a6b57a3e6  gcc/testsuite/c-c++-common/gomp/if-1.c
*************** b9d88d108c745b4e3081bed63ab09d03  gcc/te
*** 19811,19816 ****
--- 19819,19825 ----
  f7b26726f2f7cbd96dd84eb2d5428f35  gcc/testsuite/c-c++-common/gomp/imperfect3.c
  8024c1aa80ee63e68c3f195fbc01ef5d  gcc/testsuite/c-c++-common/gomp/imperfect4.c
  518ccc21aa7b1998ac49e2cd98ca274c  gcc/testsuite/c-c++-common/gomp/imperfect5.c
+ 2535b89a75eea117e585b7cd997e8f04  gcc/testsuite/c-c++-common/gomp/implicit-barrier-1.c
  34fe8adccacf3cb878c5dc72708a48f9  gcc/testsuite/c-c++-common/gomp/interop-1.c
  0765b8f778e0167a47937ba5c8c49a9c  gcc/testsuite/c-c++-common/gomp/interop-2.c
  1347bc0b5f0252435543b1ef2da0c386  gcc/testsuite/c-c++-common/gomp/interop-3.c
*************** d95e5beb9a42582e039445cc2f91e1c7  gcc/te
*** 19848,19854 ****
  69ff77fd1a974b1db18e0d998cb08b86  gcc/testsuite/c-c++-common/gomp/map-incomplete-type.c
  5b565c65a09b9269ab6bc6f30d6b419a  gcc/testsuite/c-c++-common/gomp/map-multi-1.c
  e14d7592233bc253d3d0251ac861eb79  gcc/testsuite/c-c++-common/gomp/map-multi-2.c
! d5ee74feb13dd8875f12132dccfe8126  gcc/testsuite/c-c++-common/gomp/masked-1.c
  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
--- 19857,19863 ----
  69ff77fd1a974b1db18e0d998cb08b86  gcc/testsuite/c-c++-common/gomp/map-incomplete-type.c
  5b565c65a09b9269ab6bc6f30d6b419a  gcc/testsuite/c-c++-common/gomp/map-multi-1.c
  e14d7592233bc253d3d0251ac861eb79  gcc/testsuite/c-c++-common/gomp/map-multi-2.c
! 7db789f1af5210656280ac2426ac10bd  gcc/testsuite/c-c++-common/gomp/masked-1.c
  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
*************** f4385174b55a4a8fa770e9d647279749  gcc/te
*** 20019,20024 ****
--- 20028,20034 ----
  4d836e95ee0b1c17dd96690f60fc38ea  gcc/testsuite/c-c++-common/gomp/pragma-omp-unknown.c
  5d522e2f1f7455bc45f6c1f230d5a5b0  gcc/testsuite/c-c++-common/gomp/priority-1.c
  e444ad99603236df0a9c0aaad51e515e  gcc/testsuite/c-c++-common/gomp/reduction-1.c
+ 6248e058651559d3b19ba5e8d85df1c9  gcc/testsuite/c-c++-common/gomp/reduction-builtins-1.c
  857f55ab743945a521e3287d1b905b4b  gcc/testsuite/c-c++-common/gomp/reduction-task-1.c
  640bf7069a4c648fde61378b5eae80c8  gcc/testsuite/c-c++-common/gomp/reduction-task-2.c
  6bfb4e8e6e1307990ff6a4535855f6b7  gcc/testsuite/c-c++-common/gomp/reduction-task-3.c
*************** b2937243e44148fb22ebf7e9b52a05aa  gcc/te
*** 21255,21262 ****
  d05ac6fedd74d96b8e1466d0110a8fdb  gcc/testsuite/cobol.dg/group1/perform-nested-exit.cob
  215a2b0959e47205085dc8ab2dea5181  gcc/testsuite/cobol.dg/group1/pointer1.cob
  763d4c9a2cbca2b2ac0a07933c54862f  gcc/testsuite/cobol.dg/group1/simple-arithmetic.cob
! 9e254bdae56a5c8d106f6559999ae973  gcc/testsuite/cobol.dg/group1/simple-classes.cob
! 0cc60851f56f7ed82c6a307ff07078c5  gcc/testsuite/cobol.dg/group1/simple-if.cob
  352864656e5132dd6192fdb77af9987a  gcc/testsuite/cobol.dg/group1/simple-perform.cob
  f663b8c41900c43f8fb7a7d955d202c1  gcc/testsuite/cobol.dg/group2/37-digit_Initialization_of_fundamental_types.cob
  02bd2c24bf4d1dce298950f7b67c5344  gcc/testsuite/cobol.dg/group2/37-digit_Initialization_of_fundamental_types.out
--- 21265,21272 ----
  d05ac6fedd74d96b8e1466d0110a8fdb  gcc/testsuite/cobol.dg/group1/perform-nested-exit.cob
  215a2b0959e47205085dc8ab2dea5181  gcc/testsuite/cobol.dg/group1/pointer1.cob
  763d4c9a2cbca2b2ac0a07933c54862f  gcc/testsuite/cobol.dg/group1/simple-arithmetic.cob
! 2a0227892e5237cd1f40e2a024531472  gcc/testsuite/cobol.dg/group1/simple-classes.cob
! 4ebbc8aad6edde19edf72aadfc5c6a8e  gcc/testsuite/cobol.dg/group1/simple-if.cob
  352864656e5132dd6192fdb77af9987a  gcc/testsuite/cobol.dg/group1/simple-perform.cob
  f663b8c41900c43f8fb7a7d955d202c1  gcc/testsuite/cobol.dg/group2/37-digit_Initialization_of_fundamental_types.cob
  02bd2c24bf4d1dce298950f7b67c5344  gcc/testsuite/cobol.dg/group2/37-digit_Initialization_of_fundamental_types.out
*************** ed75a024a3fc8efd498fecff6e287928  gcc/te
*** 21882,21887 ****
--- 21892,21903 ----
  c6c6c9b83f29e81d126a78fe4ae1d6eb  gcc/testsuite/cobol.dg/group2/Refmod_sources_are_figurative_constants.out
  3a05b449be7a9a0c7692038ca6fa06e2  gcc/testsuite/cobol.dg/group2/Repository_functions_clause.cob
  295a45c9a89fce7d2454228853007a55  gcc/testsuite/cobol.dg/group2/Repository_functions_clause.out
+ fd014ad446dd00637a6ac7dc302a3b1d  gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.cob
+ 6e706763982fd5993f03568905c7ad38  gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.out
+ f7f53e69395dd62ef23f0006b88c33d1  gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.cob
+ f9c7c227ba3844322ead3e756feee226  gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.out
+ 8ca929c5906b1063daf50a8e3f0a1eb5  gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.cob
+ 30d387bb7f750336fed820772cb57d75  gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.out
  a3c9d42c871825b188e93e4cff8b8184  gcc/testsuite/cobol.dg/group2/SEARCH_ALL_with_OCCURS_DEPENDING_ON.cob
  ed5c320db3471d6e1070b74811413e2f  gcc/testsuite/cobol.dg/group2/SEARCH_ALL_with_OCCURS_DEPENDING_ON.out
  551208604a39f8c738cb04d9f3974c15  gcc/testsuite/cobol.dg/group2/SORT__EBCDIC_table_sort__1_.cob
*************** a3a8cba4fbee69e46ecf1bdb30c7d924  gcc/te
*** 28505,28511 ****
--- 28521,28531 ----
  4fe3609f7385a1f131df362a10ee6065  gcc/testsuite/g++.dg/cpp26/variadic-comma5.C
  6ca56d56bbd9d4ac1e7cb5313516359b  gcc/testsuite/g++.dg/cpp26/variadic-friend1.C
  bfd759702f3238655df26d94d570e2d2  gcc/testsuite/g++.dg/cpp29/cplusplus.C
+ 3f7b16f4948f383cc9a4a2a13e0a3d0e  gcc/testsuite/g++.dg/cpp29/ext-floating1.C
  5f9461fbe9c24ae7cce25be680e7df13  gcc/testsuite/g++.dg/cpp29/feat-cxx29.C
+ c2dff1da8208f3291247a019d63b7dd9  gcc/testsuite/g++.dg/cpp29/lambda-order1.C
+ 59b50274ff1f8b0b48090fb61a763cf5  gcc/testsuite/g++.dg/cpp29/lambda-order2.C
+ 0492a660aacda6b5424130121221cc91  gcc/testsuite/g++.dg/cpp29/std-floating1.C
  5bcb9d1194a35cf17a1a88005e7f5d01  gcc/testsuite/g++.dg/cpp2a/abbrev-fn1.C
  87d838f5781e95bc5519bc5cd029cd32  gcc/testsuite/g++.dg/cpp2a/abbrev-fn2.C
  2e791b293e77eea479b4f027aa624fcc  gcc/testsuite/g++.dg/cpp2a/abbrev-fn3.C
*************** cad5a0f5612b545b9cc5db417c21bdac  gcc/te
*** 31860,31866 ****
  e69b76d336001e3bff0a54bd6620df4a  gcc/testsuite/g++.dg/gomp/bad-array-section-7.C
  4d0df1125375cbd2536ef7189623f71f  gcc/testsuite/g++.dg/gomp/bad-array-section-8.C
  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
--- 31880,31886 ----
  e69b76d336001e3bff0a54bd6620df4a  gcc/testsuite/g++.dg/gomp/bad-array-section-7.C
  4d0df1125375cbd2536ef7189623f71f  gcc/testsuite/g++.dg/gomp/bad-array-section-8.C
  46300df04504a396166de2b6167a3364  gcc/testsuite/g++.dg/gomp/bad-array-section-9.C
! 1221223e1e6226cdf8ac4c00b6c77e18  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
*************** ebd0af100c738096180052a774559603  gcc/te
*** 32009,32015 ****
  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
--- 32029,32035 ----
  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
! b4fe0bb08e5d816f3fbe836c4a887eb6  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
*************** eda8d6738cae7ebc85e0ebbf152c0f83  gcc/te
*** 32241,32247 ****
  eec42e78d72ac0bdcf1d2801224c4f42  gcc/testsuite/g++.dg/gomp/tls-wrapper-cse.C
  0df681e6b37edac68ef196b88549a3af  gcc/testsuite/g++.dg/gomp/tpl-atomic-1.C
  79934e5ca0b36f912a19a28a2bc6684c  gcc/testsuite/g++.dg/gomp/tpl-atomic-2.C
! a37dc2aba240a63836ffe018660b5576  gcc/testsuite/g++.dg/gomp/tpl-barrier-1.C
  4a4bf7fb6d4865db8fa5a4940198eab3  gcc/testsuite/g++.dg/gomp/tpl-for-1.C
  1d61bc720d46fe83c80881e1450f263f  gcc/testsuite/g++.dg/gomp/tpl-for-2.C
  b057b654090f4695277d8c1866894100  gcc/testsuite/g++.dg/gomp/tpl-for-3.C
--- 32261,32267 ----
  eec42e78d72ac0bdcf1d2801224c4f42  gcc/testsuite/g++.dg/gomp/tls-wrapper-cse.C
  0df681e6b37edac68ef196b88549a3af  gcc/testsuite/g++.dg/gomp/tpl-atomic-1.C
  79934e5ca0b36f912a19a28a2bc6684c  gcc/testsuite/g++.dg/gomp/tpl-atomic-2.C
! 4cabb115f7662aabeb1a85e76762256e  gcc/testsuite/g++.dg/gomp/tpl-barrier-1.C
  4a4bf7fb6d4865db8fa5a4940198eab3  gcc/testsuite/g++.dg/gomp/tpl-for-1.C
  1d61bc720d46fe83c80881e1450f263f  gcc/testsuite/g++.dg/gomp/tpl-for-2.C
  b057b654090f4695277d8c1866894100  gcc/testsuite/g++.dg/gomp/tpl-for-3.C
*************** d975bcfcc66f10d16ed8c046fec4ba04  gcc/te
*** 33733,33739 ****
  314ee1208d31d73f6b8581612ceea903  gcc/testsuite/g++.dg/modules/adl-11_a.C
  d5e6364be38f2a4bd3ffc35aed9b8edd  gcc/testsuite/g++.dg/modules/adl-11_b.C
  098dcbc5ef632f9258da5c6fdbafb2ff  gcc/testsuite/g++.dg/modules/adl-12_a.C
! 3deaf8eb226b5b7cd4060737c498ff45  gcc/testsuite/g++.dg/modules/adl-12_b.C
  9c824c1a28f6bcf79fd72186d79fe93c  gcc/testsuite/g++.dg/modules/adl-1_a.C
  3bb31e23ac383185d41cda2c5fcbdaf3  gcc/testsuite/g++.dg/modules/adl-1_b.C
  46103f57f3287176308fc33634d7da8e  gcc/testsuite/g++.dg/modules/adl-1_c.C
--- 33753,33759 ----
  314ee1208d31d73f6b8581612ceea903  gcc/testsuite/g++.dg/modules/adl-11_a.C
  d5e6364be38f2a4bd3ffc35aed9b8edd  gcc/testsuite/g++.dg/modules/adl-11_b.C
  098dcbc5ef632f9258da5c6fdbafb2ff  gcc/testsuite/g++.dg/modules/adl-12_a.C
! e8d660897f929581199c7c069a83bc09  gcc/testsuite/g++.dg/modules/adl-12_b.C
  9c824c1a28f6bcf79fd72186d79fe93c  gcc/testsuite/g++.dg/modules/adl-1_a.C
  3bb31e23ac383185d41cda2c5fcbdaf3  gcc/testsuite/g++.dg/modules/adl-1_b.C
  46103f57f3287176308fc33634d7da8e  gcc/testsuite/g++.dg/modules/adl-1_c.C
*************** e5d48a6cbbf612860c500056802a4d9e  gcc/te
*** 33767,33772 ****
--- 33787,33795 ----
  654613de755592f8dd0461cb5d964619  gcc/testsuite/g++.dg/modules/alias-1_e.C
  ee26e1d91d2d28c7c7d21ab7516186d1  gcc/testsuite/g++.dg/modules/alias-1_f.C
  ef2bca1fe28aab857ad570bb97dfa565  gcc/testsuite/g++.dg/modules/alias-2_b.C
+ b10ad4025842e29dd24c0e314687fbee  gcc/testsuite/g++.dg/modules/alias-3_a.C
+ 6b72457b5059747d81059b8d784c9c36  gcc/testsuite/g++.dg/modules/alias-3_b.C
+ 3c9338bc26f9875b5700ea8f3026961e  gcc/testsuite/g++.dg/modules/alias-3_c.C
  fba23da3f9ec6a6b93d60f4ef252481e  gcc/testsuite/g++.dg/modules/align-type-1_a.C
  0f37e2e98366e55c9539dfead51cb028  gcc/testsuite/g++.dg/modules/align-type-1_b.C
  6e36c74fc6da256a9a69d602eaf80799  gcc/testsuite/g++.dg/modules/ambig-1_a.C
*************** e6de60b5642934aef50f416afd0dfef5  gcc/te
*** 37420,37425 ****
--- 37443,37449 ----
  9b72294c06cceb517f37832e017f79c1  gcc/testsuite/g++.dg/pr123575.C
  97fa47fc1ee58971cfae4f9fdffd0b3f  gcc/testsuite/g++.dg/pr125642.C
  c981f50108f29e9500f3baf51746f6a5  gcc/testsuite/g++.dg/pr125854.C
+ 160c570bd57dcd8aec2341fe9a4d7d20  gcc/testsuite/g++.dg/pr125977.C
  2ac64817a39fe1a5c2dc328f4233cda1  gcc/testsuite/g++.dg/pr37742.C
  32b2fbda29ffd2ac2181c43c971f3a7d  gcc/testsuite/g++.dg/pr44328.C
  e43b4ea2d038b181b57782d5d56d22ba  gcc/testsuite/g++.dg/pr44486.C
*************** faafb1e5e8bfafbcd2e2ae683d5c5f07  gcc/te
*** 37830,37835 ****
--- 37854,37860 ----
  2c9f13a2651383956671a08269662579  gcc/testsuite/g++.dg/reflect/error11.C
  274736df915df8a9983053ee6560cbc0  gcc/testsuite/g++.dg/reflect/error12.C
  7f36308a07e9e5ad4ffbf31e99cde669  gcc/testsuite/g++.dg/reflect/error13.C
+ 627d5eb9df23bf49e15eb928858937de  gcc/testsuite/g++.dg/reflect/error14.C
  69edf1172a90d65c86d8d9bb69b88b21  gcc/testsuite/g++.dg/reflect/error2.C
  eb3f835094fc060a3320066f75665133  gcc/testsuite/g++.dg/reflect/error3.C
  5caf93c84084cbeab5b7f76875d678ae  gcc/testsuite/g++.dg/reflect/error4.C
*************** cb62b6f411eaa0edabe6a10520d7652c  gcc/te
*** 37849,37854 ****
--- 37874,37880 ----
  7d931bd0fd71d114fa6a17dce607e802  gcc/testsuite/g++.dg/reflect/expr15.C
  f3f33f49043a48d1ae3edf4ed1f5e2f3  gcc/testsuite/g++.dg/reflect/expr16.C
  4febd7db9b876282dd12662957bcdf0c  gcc/testsuite/g++.dg/reflect/expr17.C
+ 60e714fc582583e18e913d4539696f8d  gcc/testsuite/g++.dg/reflect/expr18.C
  8a9b940805893540797936869da281d7  gcc/testsuite/g++.dg/reflect/expr2.C
  4b1fb75674597a85fb0234f3b45e8f9e  gcc/testsuite/g++.dg/reflect/expr3.C
  6db5cf1cb9ce8e043687a3df14680bc3  gcc/testsuite/g++.dg/reflect/expr4.C
*************** c44e1d6dfaecfb4f263c78b17ed1b8c7  gcc/te
*** 38039,38044 ****
--- 38065,38071 ----
  a2c5daff71c5cc0345db4bd0e912e669  gcc/testsuite/g++.dg/reflect/members_of13.C
  07a4631eea7fe0c6bdb296ca77c1d3a2  gcc/testsuite/g++.dg/reflect/members_of14.C
  6a2f357760584b04cfa1a4685abd70a0  gcc/testsuite/g++.dg/reflect/members_of15.C
+ 0b728e20e7f8de90f291700373ee27f7  gcc/testsuite/g++.dg/reflect/members_of16.C
  689453102e4425f8d2c4ff89cb939595  gcc/testsuite/g++.dg/reflect/members_of2.C
  80a032eb31d0998f2d288e303356773a  gcc/testsuite/g++.dg/reflect/members_of3.C
  5ececa99994de569abffae1671b71870  gcc/testsuite/g++.dg/reflect/members_of4.C
*************** a66e1dc9964c7702e9ecdb5be8553fb5  gcc/te
*** 38236,38241 ****
--- 38263,38269 ----
  9b33e0cb088a6815bc1f1c4cb74a8aa5  gcc/testsuite/g++.dg/reflect/type_trait12.C
  485cae337b48a98f34af212dc8b5ceb5  gcc/testsuite/g++.dg/reflect/type_trait13.C
  bc0bf40e9258e25c6c46ff13963f154e  gcc/testsuite/g++.dg/reflect/type_trait14.C
+ a83cc3892e30ad8d151bdc1664d00e8a  gcc/testsuite/g++.dg/reflect/type_trait15.C
  06a1343d9aeb1caa65048fdecda31245  gcc/testsuite/g++.dg/reflect/type_trait2.C
  c957460ae45089ece9b5352a7de1f5fc  gcc/testsuite/g++.dg/reflect/type_trait3.C
  6a48574284311a70358d27e1b45595b3  gcc/testsuite/g++.dg/reflect/type_trait4.C
*************** a96998418d91d4b5dc3f731cea3de4a2  gcc/te
*** 40887,40893 ****
  8e86c1b355d9ed5ad78d7f6211d5f327  gcc/testsuite/g++.dg/tree-ssa/pr114589.C
  1ed2f7f5509c5567092c5b86b727d17e  gcc/testsuite/g++.dg/tree-ssa/pr115275.C
  bd9c2b59a2d08bc8b4c7a43415693ca4  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
  284302237efd60e1d517c0925cad7644  gcc/testsuite/g++.dg/tree-ssa/pr118924.C
--- 40915,40921 ----
  8e86c1b355d9ed5ad78d7f6211d5f327  gcc/testsuite/g++.dg/tree-ssa/pr114589.C
  1ed2f7f5509c5567092c5b86b727d17e  gcc/testsuite/g++.dg/tree-ssa/pr115275.C
  bd9c2b59a2d08bc8b4c7a43415693ca4  gcc/testsuite/g++.dg/tree-ssa/pr116868.C
! 408014edc1fe12ef60c984954257993a  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
  284302237efd60e1d517c0925cad7644  gcc/testsuite/g++.dg/tree-ssa/pr118924.C
*************** f36d3df10de7d616fdeaf6bd08060535  gcc/te
*** 41229,41234 ****
--- 41257,41263 ----
  dcd9726dc8b4e6083387751cc9d6254d  gcc/testsuite/g++.dg/ubsan/vptr-16.C
  7e7bbb42c768722416820e592f65ca97  gcc/testsuite/g++.dg/ubsan/vptr-17.C
  1968a8f982e5990a850fcae723fa33cc  gcc/testsuite/g++.dg/ubsan/vptr-18.C
+ e6e764403c85bf8db61424fee57410bc  gcc/testsuite/g++.dg/ubsan/vptr-19.C
  cef046f562c0a23eb331cea94cd5b44f  gcc/testsuite/g++.dg/ubsan/vptr-2.C
  729147822cd9bf5bf718456c1dbff28d  gcc/testsuite/g++.dg/ubsan/vptr-3.C
  c56c0a2d56d1483bfcbff6562ca6a84a  gcc/testsuite/g++.dg/ubsan/vptr-4.C
*************** f828038b7b0977748fac3e57cac5a3da  gcc/te
*** 41764,41769 ****
--- 41793,41799 ----
  1d9458fc60d7d418323599b03b1bdb66  gcc/testsuite/g++.dg/warn/Wrange-loop-construct.C
  68ce3ed4f1a0e041fcb5b20b12b8ba42  gcc/testsuite/g++.dg/warn/Wrange-loop-construct2.C
  5bc140087fad838f5c93ce13d319a48e  gcc/testsuite/g++.dg/warn/Wrange-loop-construct3.C
+ 8090b021aee3a71af06817bd107f5b18  gcc/testsuite/g++.dg/warn/Wrange-loop-construct4.C
  bc5f141d5ba64d906981c425b810d3ed  gcc/testsuite/g++.dg/warn/Wredundant-decls-spec.C
  f03226124ff1dcc1fed0a1fa8c9a335c  gcc/testsuite/g++.dg/warn/Wredundant-tags-2.C
  b933fc025dabb367b650f9e8e6c61505  gcc/testsuite/g++.dg/warn/Wredundant-tags-3.C
*************** bad9a677892adffe2c45653797aad55c  gcc/te
*** 46024,46030 ****
  8e16cb4ef8b3ee3b728e21112c7331d1  gcc/testsuite/g++.target/i386/mv30.C
  6c2437562ef96defbdcf21aa49f5676f  gcc/testsuite/g++.target/i386/mv31.C
  7ad5e74b4e62aeee372128b50434de84  gcc/testsuite/g++.target/i386/mv32.C
! e0b31711a789b1708a13fef187bfed01  gcc/testsuite/g++.target/i386/mv33.C
  253207ecb3f4d04076efa9253026fa4c  gcc/testsuite/g++.target/i386/mv4.C
  dc39143004995c38b524d1b929c9c96c  gcc/testsuite/g++.target/i386/mv5.C
  01094409b78d48ec67bbf367448ecc93  gcc/testsuite/g++.target/i386/mv6.C
--- 46054,46060 ----
  8e16cb4ef8b3ee3b728e21112c7331d1  gcc/testsuite/g++.target/i386/mv30.C
  6c2437562ef96defbdcf21aa49f5676f  gcc/testsuite/g++.target/i386/mv31.C
  7ad5e74b4e62aeee372128b50434de84  gcc/testsuite/g++.target/i386/mv32.C
! 02faaeb8916729162082c18ff028c6db  gcc/testsuite/g++.target/i386/mv33.C
  253207ecb3f4d04076efa9253026fa4c  gcc/testsuite/g++.target/i386/mv4.C
  dc39143004995c38b524d1b929c9c96c  gcc/testsuite/g++.target/i386/mv5.C
  01094409b78d48ec67bbf367448ecc93  gcc/testsuite/g++.target/i386/mv6.C
*************** f36bbd087ac3ea147e58ddaa13c05621  gcc/te
*** 52262,52268 ****
  f4fb130600932752f20fe058b47563f5  gcc/testsuite/gcc.dg/autopar/reduc-7.c
  cb2d9cc2278a24ee2bd07758846c491e  gcc/testsuite/gcc.dg/autopar/reduc-8.c
  a72aed4598b891bea75a07eca33210c9  gcc/testsuite/gcc.dg/autopar/reduc-9.c
! 7d9914b3949e0939a639f8e93d7225a6  gcc/testsuite/gcc.dg/autopar/runtime-auto.c
  f55a1275009ff460210d4b9c67a189a3  gcc/testsuite/gcc.dg/autopar/uns-outer-4.c
  0e589f3e4ce3143c9d88fb74f872e3fe  gcc/testsuite/gcc.dg/autopar/uns-outer-5.c
  f5e8e01c793a266fa480ec93df8de475  gcc/testsuite/gcc.dg/autopar/uns-outer-6.c
--- 52292,52298 ----
  f4fb130600932752f20fe058b47563f5  gcc/testsuite/gcc.dg/autopar/reduc-7.c
  cb2d9cc2278a24ee2bd07758846c491e  gcc/testsuite/gcc.dg/autopar/reduc-8.c
  a72aed4598b891bea75a07eca33210c9  gcc/testsuite/gcc.dg/autopar/reduc-9.c
! 9c9ff6683e335d09a28b77f89074cb8d  gcc/testsuite/gcc.dg/autopar/runtime-auto.c
  f55a1275009ff460210d4b9c67a189a3  gcc/testsuite/gcc.dg/autopar/uns-outer-4.c
  0e589f3e4ce3143c9d88fb74f872e3fe  gcc/testsuite/gcc.dg/autopar/uns-outer-5.c
  f5e8e01c793a266fa480ec93df8de475  gcc/testsuite/gcc.dg/autopar/uns-outer-6.c
*************** a13510f16ad9b40d3bed7d9e1467102f  gcc/te
*** 52526,52531 ****
--- 52556,52564 ----
  39a589bed3922c20ecddc1b22c5dd0be  gcc/testsuite/gcc.dg/builtin-bswap-7a.c
  dee8624db42c149e727e832415aa5090  gcc/testsuite/gcc.dg/builtin-bswap-8.c
  547dc816e801f8746cd259482702fa77  gcc/testsuite/gcc.dg/builtin-bswap-9.c
+ 73b68c9a7f69fdea77cc80ea090d9d16  gcc/testsuite/gcc.dg/builtin-call-info-1.c
+ 9236f11c439d7cad0d6a79030d55aa13  gcc/testsuite/gcc.dg/builtin-call-info-2.c
+ 540cb44ffde498c4984bbcce88e71a90  gcc/testsuite/gcc.dg/builtin-call-info-3.c
  0eecd573e98a27ed33860504d72d4c26  gcc/testsuite/gcc.dg/builtin-choose-expr-2.c
  8cbe5bec73c7a57b00dafc1ec03dd1cd  gcc/testsuite/gcc.dg/builtin-choose-expr.c
  e06f17cf5efaf35f17f6b7f50a5fd9e0  gcc/testsuite/gcc.dg/builtin-classify-type-1.c
*************** cbcc356a35e8a8665137c7ae64ec5914  gcc/te
*** 54800,54805 ****
--- 54833,54839 ----
  54b366032eed667161eee7783123c310  gcc/testsuite/gcc.dg/debug/dwarf2/pr103874.c
  88466c37a4317f483dad470b7d9a7949  gcc/testsuite/gcc.dg/debug/dwarf2/pr111080.c
  57e3c1af8d86b03c1a81a092be62ec96  gcc/testsuite/gcc.dg/debug/dwarf2/pr114015.c
+ 6ffd262f8357f0ae6e1068247a329747  gcc/testsuite/gcc.dg/debug/dwarf2/pr125421.c
  250736f38c859fc89fb993ad3155eb20  gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-1.c
  8f522ee214d1db3d04f240eb20eb4474  gcc/testsuite/gcc.dg/debug/dwarf2/pr29609-2.c
  43696edd12f5c0c32058d1ad1012e1e8  gcc/testsuite/gcc.dg/debug/dwarf2/pr31230.c
*************** eaa783e8389adca32f2db124e7a7ebbc  gcc/te
*** 55984,55990 ****
  02e9370ed0ecfc8d4e1d83f6e2d80f63  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-6.c
  90800a0a2dbc3b77f31cc6f1980aed76  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-7.c
  eb3d22faee81e2f045c308cb5d0e684b  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-8.c
! 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
--- 56018,56024 ----
  02e9370ed0ecfc8d4e1d83f6e2d80f63  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-6.c
  90800a0a2dbc3b77f31cc6f1980aed76  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-7.c
  eb3d22faee81e2f045c308cb5d0e684b  gcc/testsuite/gcc.dg/gomp/bad-array-section-c-8.c
! a04b38694207bb2103dc8014940f561d  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
*************** eabb0107af4ef893414bb3cef506ad03  gcc/te
*** 56067,56073 ****
  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
--- 56101,56107 ----
  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
! 9992ffaf803bfebcded8c7f885a28e2a  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
*************** a03a5109c087726181cf7cc2241d1a9e  gcc/te
*** 57621,57636 ****
  46d188c0319bf02d664cc2c49c9df2ef  gcc/testsuite/gcc.dg/lto/simd-function_0.c
  eb3f74ee254d840e57e48daa509a2c8c  gcc/testsuite/gcc.dg/lto/tag-1_0.c
  0e59139568f3499106d8c9c073cb93a6  gcc/testsuite/gcc.dg/lto/tag-1_1.c
! 674d806cbe662768e8ffb9fba5f86552  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c
  0b8c0686fa89ada1fa46aaffc51ae2d6  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_1.c
! d879ca69386462507d34baeeaac6ff87  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c
! fce9b0e78881985f76e0dd77bf2834f2  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c
  6ced18e2b5e01709247b972ac330e680  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_0.c
  db7afbef19e4085f817f6d5503e94797  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_1.c
! aeaa7cb6307f31d03aa32152a08299d3  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c
  06309190fd3e222a7f4615a1e35b909a  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_1.c
  fe37f244fa55d46efa4078f405290af2  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_0.c
! e37f3db6688d550dbb2243182e4579f0  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c
  69ff2353992f738ce7ea3cb89e9db1e4  gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
  0e1956cbb4feeb82617d27801e1217f5  gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
  3f4f42d8a6ea686d4fc6a621928696a8  gcc/testsuite/gcc.dg/lto/trans-mem.h
--- 57655,57670 ----
  46d188c0319bf02d664cc2c49c9df2ef  gcc/testsuite/gcc.dg/lto/simd-function_0.c
  eb3f74ee254d840e57e48daa509a2c8c  gcc/testsuite/gcc.dg/lto/tag-1_0.c
  0e59139568f3499106d8c9c073cb93a6  gcc/testsuite/gcc.dg/lto/tag-1_1.c
! cc6fe6a4b0438e36949be47d0d0dea56  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c
  0b8c0686fa89ada1fa46aaffc51ae2d6  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_1.c
! 96cd062a46c72ce307d1f3656dd94054  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c
! 8412a405c871ae8ed1f586560e9939ab  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c
  6ced18e2b5e01709247b972ac330e680  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_0.c
  db7afbef19e4085f817f6d5503e94797  gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-3_1.c
! b0c56cabec53721f9a3427fd558c241e  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c
  06309190fd3e222a7f4615a1e35b909a  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_1.c
  fe37f244fa55d46efa4078f405290af2  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_0.c
! 2435970d069b8486ee686925b412a6ac  gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c
  69ff2353992f738ce7ea3cb89e9db1e4  gcc/testsuite/gcc.dg/lto/trans-mem-3_0.c
  0e1956cbb4feeb82617d27801e1217f5  gcc/testsuite/gcc.dg/lto/trans-mem-3_1.c
  3f4f42d8a6ea686d4fc6a621928696a8  gcc/testsuite/gcc.dg/lto/trans-mem.h
*************** cb2af6eb124c1d269b7aedc04681b314  gcc/te
*** 59054,59062 ****
--- 59088,59098 ----
  02b3b3267e793ecee19ba15f99518c3d  gcc/testsuite/gcc.dg/pr125707-1.c
  5ab2cc7a06b876199ce2f02e0dd9b79b  gcc/testsuite/gcc.dg/pr125707.c
  7113f605d92516b4ce0d7a828fecc304  gcc/testsuite/gcc.dg/pr125737.c
+ 8e990bb878c93bf33f60e5d7ebfcf826  gcc/testsuite/gcc.dg/pr125749.c
  780a210a91e38b3b391cc7a869bbcfc8  gcc/testsuite/gcc.dg/pr125756.c
  729e9d2c572b5740d1cb9d00d90885e9  gcc/testsuite/gcc.dg/pr125790-1.c
  6a322f305e51f6120590c1de3c37495b  gcc/testsuite/gcc.dg/pr125857-1.c
+ 4adc52a90c4c4ca34102d4c6e968411d  gcc/testsuite/gcc.dg/pr125910.c
  bc5ddfbbc46f4e0cce1629d1b58d3090  gcc/testsuite/gcc.dg/pr12603.c
  72a2fca76cb69617ae36bab93c7ec0d7  gcc/testsuite/gcc.dg/pr12625-1.c
  6f0ef61e5a12db5f11da839b2988c5e1  gcc/testsuite/gcc.dg/pr13519-1.c
*************** cf6adf4ec5a0e6eb5b11e830643ea604  gcc/te
*** 61414,61420 ****
  59676cf895a96b5df60c99dab32c2e77  gcc/testsuite/gcc.dg/sms-compare-debug-1.c
  29083ff7a74e33bf670767bdfe423cbb  gcc/testsuite/gcc.dg/sms-compare-debug-2.c
  04a8160afdb3ca573aac7dc290ac5fe0  gcc/testsuite/gcc.dg/spaceship_int_variants.c
! 4c98155afa4b770797952c7936493327  gcc/testsuite/gcc.dg/spaceship_mixed_variants.c
  05e1e428748b7e0d993bdb2aef87f486  gcc/testsuite/gcc.dg/spaceship_uint_variants.c
  462ee539b38e672e3b24a7ae2268df8b  gcc/testsuite/gcc.dg/spec-barrier-3.c
  b5774d82d5e7a13f47820c57cf1db3ea  gcc/testsuite/gcc.dg/spec-barrier-3a.c
--- 61450,61457 ----
  59676cf895a96b5df60c99dab32c2e77  gcc/testsuite/gcc.dg/sms-compare-debug-1.c
  29083ff7a74e33bf670767bdfe423cbb  gcc/testsuite/gcc.dg/sms-compare-debug-2.c
  04a8160afdb3ca573aac7dc290ac5fe0  gcc/testsuite/gcc.dg/spaceship_int_variants.c
! f7e73e474780eff15ebf7b86ba4f4f36  gcc/testsuite/gcc.dg/spaceship_mixed_variants.c
! 3c64e48971c6698a1a44f686fa44e85b  gcc/testsuite/gcc.dg/spaceship_mixed_variants_ll.c
  05e1e428748b7e0d993bdb2aef87f486  gcc/testsuite/gcc.dg/spaceship_uint_variants.c
  462ee539b38e672e3b24a7ae2268df8b  gcc/testsuite/gcc.dg/spec-barrier-3.c
  b5774d82d5e7a13f47820c57cf1db3ea  gcc/testsuite/gcc.dg/spec-barrier-3a.c
*************** f56a66971ef2360d1150ae851eb9f24c  gcc/te
*** 62952,62957 ****
--- 62989,62997 ----
  9b58e29ad15155e6fc7bf7dbad6bc468  gcc/testsuite/gcc.dg/torture/pr125776-2.c
  93bc071aaec418c0585a366bbff0fb37  gcc/testsuite/gcc.dg/torture/pr125786.c
  46daba547abe16cbd1c46548501b93f2  gcc/testsuite/gcc.dg/torture/pr125872.c
+ 63c0b8bffdfe448123d4936d22c33576  gcc/testsuite/gcc.dg/torture/pr125875.c
+ 33bce38bed8b70a3409f3aecbf20655f  gcc/testsuite/gcc.dg/torture/pr125923-1.c
+ d37f980a2ba8a3f7fef2d2c9a4f2a81d  gcc/testsuite/gcc.dg/torture/pr125953.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
*************** b069caf152c3eca0e024d32d14335580  gcc/te
*** 64722,64727 ****
--- 64762,64768 ----
  33a3fcae747cee654667314a41d7dae6  gcc/testsuite/gcc.dg/tree-ssa/flatten-1.c
  5aa642235531b56fe71d129b3128e653  gcc/testsuite/gcc.dg/tree-ssa/flatten-2.c
  7013e9405bbea7d794f84d52c038fb91  gcc/testsuite/gcc.dg/tree-ssa/flatten-3.c
+ 4e6f4cc80516aaa46808c1dea7a621da  gcc/testsuite/gcc.dg/tree-ssa/float-conv-1.c
  228dfa7248ebf7ccfcdb0ecfb5d30bf6  gcc/testsuite/gcc.dg/tree-ssa/fnsplit-1.c
  e5035d32dc605a277b663840398291b0  gcc/testsuite/gcc.dg/tree-ssa/fnsplit-2.c
  eb594c305f37e716ed58ed83ebdb28df  gcc/testsuite/gcc.dg/tree-ssa/fold-xor-and-or.c
*************** fbf563a2f70a70fc731349015147afea  gcc/te
*** 65240,65245 ****
--- 65281,65288 ----
  c712f0d46a07e2bcebd2d44e2db4d929  gcc/testsuite/gcc.dg/tree-ssa/pr102705-1.c
  4024edc4ed6c55e2e45c414b1490a757  gcc/testsuite/gcc.dg/tree-ssa/pr102705-2.c
  07cbfe319374507b0bd58c75bf83d9e2  gcc/testsuite/gcc.dg/tree-ssa/pr102736.c
+ 49686816129d3ce2767f2feb0480d7fc  gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c
+ 4ea7cf42666868b19306d82b01e1c82e  gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c
  335850968e8422bffc030a8ed0663409  gcc/testsuite/gcc.dg/tree-ssa/pr102880.c
  dfb016d569355b28ba6779d09c046dc0  gcc/testsuite/gcc.dg/tree-ssa/pr102906.c
  66d04412379b88da47a1d7719a486521  gcc/testsuite/gcc.dg/tree-ssa/pr102951.c
*************** f5cfea6a1b6fc4b038b869d0d5b623f1  gcc/te
*** 65421,65426 ****
--- 65464,65470 ----
  f129dd468dfe8a551c430253beea7ece  gcc/testsuite/gcc.dg/tree-ssa/pr125104.c
  20283de4958877c9f56821eb4c2d19cd  gcc/testsuite/gcc.dg/tree-ssa/pr125214.c
  fff67bd84df25cc9f3265a2fd89436d9  gcc/testsuite/gcc.dg/tree-ssa/pr125259.c
+ 6a9f174aa3a2c31017f1170fcde91302  gcc/testsuite/gcc.dg/tree-ssa/pr125385.c
  dc58edd505d49a41932e7cafece6a2d5  gcc/testsuite/gcc.dg/tree-ssa/pr125405.c
  dbbc66ce4aef2adea320e51207ff99b8  gcc/testsuite/gcc.dg/tree-ssa/pr125612-1.c
  78e6c5fe63f7305009c8a79840fe20dc  gcc/testsuite/gcc.dg/tree-ssa/pr13146.c
*************** d302509e7e4d06b47b78ba3214c7fc0e  gcc/te
*** 67084,67089 ****
--- 67128,67135 ----
  bb6370e51fdfc71eb406f2d9d7e1f004  gcc/testsuite/gcc.dg/uninit-pr107839.c
  a75c734308844a93020556c58b54742b  gcc/testsuite/gcc.dg/uninit-pr108466-1.c
  10779a14525372affcb25a7e7209e309  gcc/testsuite/gcc.dg/uninit-pr108547.c
+ 359d2ca05f3fe09e80ea1f9bd8af9db4  gcc/testsuite/gcc.dg/uninit-pr110743-2.c
+ bf2ba957adc4d3845bca38b215fadbd7  gcc/testsuite/gcc.dg/uninit-pr110743.c
  a0d21e844c69e57b42877341fb99cf0d  gcc/testsuite/gcc.dg/uninit-pr111397.c
  499c474f28073285766d0bb22cfa9e09  gcc/testsuite/gcc.dg/uninit-pr111489.c
  1f3e810920438ffd137d7d7c1975faef  gcc/testsuite/gcc.dg/uninit-pr112909.c
*************** d0cc734c519900cf3818df0c3dad96d4  gcc/te
*** 67127,67132 ****
--- 67173,67179 ----
  4d968f2db69dec7e5f880146576fc801  gcc/testsuite/gcc.dg/uninit-pred-10.c
  1c6a6934369db3cfac321448a75a0f01  gcc/testsuite/gcc.dg/uninit-pred-11.c
  ba0a14121a9b141b05ad92194338f663  gcc/testsuite/gcc.dg/uninit-pred-12.c
+ 4c2f1db3dd906f1d26680cf02d207567  gcc/testsuite/gcc.dg/uninit-pred-13.c
  2e2b2ca64d1c3db87c75755a21b4bc06  gcc/testsuite/gcc.dg/uninit-pred-2_a.c
  7d67cd7432d67994c6642a61e0020d9e  gcc/testsuite/gcc.dg/uninit-pred-2_b.c
  dc20b95e0c82e7593d7e562b3b1e5aaf  gcc/testsuite/gcc.dg/uninit-pred-2_c.c
*************** ae7dd7b535828dd877ea453ce08b1b4b  gcc/te
*** 67959,67965 ****
  17c5c38b2c03547dce34b548af8a2143  gcc/testsuite/gcc.dg/vect/pr123525.c
  86e3be2c542c86cb2ddd62c5080014e5  gcc/testsuite/gcc.dg/vect/pr123731.c
  d5aa71d5c3c97ae8aba5aa2049a772e3  gcc/testsuite/gcc.dg/vect/pr125509.c
! 9dbd20f58a6a906394019d44a1b0ac62  gcc/testsuite/gcc.dg/vect/pr125567.c
  9345816cef1a19c03845e78efc0fb484  gcc/testsuite/gcc.dg/vect/pr125646.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
--- 68006,68012 ----
  17c5c38b2c03547dce34b548af8a2143  gcc/testsuite/gcc.dg/vect/pr123525.c
  86e3be2c542c86cb2ddd62c5080014e5  gcc/testsuite/gcc.dg/vect/pr123731.c
  d5aa71d5c3c97ae8aba5aa2049a772e3  gcc/testsuite/gcc.dg/vect/pr125509.c
! 6b35a64fcd03aca31a961f3e840b2ab4  gcc/testsuite/gcc.dg/vect/pr125567.c
  9345816cef1a19c03845e78efc0fb484  gcc/testsuite/gcc.dg/vect/pr125646.c
  42d48d2ecd5682545b12ac42f879a831  gcc/testsuite/gcc.dg/vect/pr16105.c
  231c99dba9475fe09525bbf6f4374124  gcc/testsuite/gcc.dg/vect/pr18308.c
*************** d41d8cd98f00b204e9800998ecf8427e  gcc/te
*** 70176,70181 ****
--- 70223,70229 ----
  32f9294b1c6ff138335444046376cbd4  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-1.json
  b7f71ce8fe73301bf9faedef3d43ba87  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.c
  6969276b3f16faa60d8118a48c0b0ff4  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/enum-2.json
+ 3960462694766d4ec6ef405f8c2eb0c3  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json
  f191272203e59cac9d6fcce6781c5753  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.c
  e5f0919a0522ba8874235985c94b1017  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-1.json
  c39cb930698e63beb2cf35d7828d9eb1  gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/integer-2.c
*************** f15d1ff83066971ce9a42593ae9e147c  gcc/te
*** 71249,71254 ****
--- 71297,71303 ----
  a95c8779f3b9cc5c91774eab2c3b9b8d  gcc/testsuite/gcc.target/aarch64/declare-simd-1.c
  e57188457d19c572c1c7ca575a6aa71b  gcc/testsuite/gcc.target/aarch64/declare-simd-2.c
  063fb3cb3ef8c03670a39beb490eee85  gcc/testsuite/gcc.target/aarch64/diag_aka_1.c
+ 31797512cf0475aac05c207ddf12b93d  gcc/testsuite/gcc.target/aarch64/dispatch_sched_1.c
  99d13b07988399a087cb53856c728972  gcc/testsuite/gcc.target/aarch64/div-by-bitmask.c
  3488e2eafe407d3b6120c7194ed905bb  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-func.c
  69d1e677362acf66e406e0f76cb24fff  gcc/testsuite/gcc.target/aarch64/dwarf-bit-stride-pragma-sme.c
*************** c634a3e3729a1cf014159113aaaa5923  gcc/te
*** 71829,71835 ****
  4d8026dd553c44c1a48ce80a71531b86  gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
  3cdbf6a5cbb7b9b28ab1aaf0359fdc18  gcc/testsuite/gcc.target/aarch64/popcnt-le-2.c
  9e948ae68c0d390d823337c5e39dca82  gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
! 87eb1caed03b11f241967f34499bb81d  gcc/testsuite/gcc.target/aarch64/popcnt-sve.c
  af75b46ad5491c060e4ce3eb0ed013ce  gcc/testsuite/gcc.target/aarch64/popcnt-udot.c
  96fc63592462925adddeb2b1c19522fe  gcc/testsuite/gcc.target/aarch64/popcnt-vec.c
  629072fafe5767161ca1f67309a94cc5  gcc/testsuite/gcc.target/aarch64/popcnt.c
--- 71878,71884 ----
  4d8026dd553c44c1a48ce80a71531b86  gcc/testsuite/gcc.target/aarch64/popcnt-le-1.c
  3cdbf6a5cbb7b9b28ab1aaf0359fdc18  gcc/testsuite/gcc.target/aarch64/popcnt-le-2.c
  9e948ae68c0d390d823337c5e39dca82  gcc/testsuite/gcc.target/aarch64/popcnt-le-3.c
! d423b62e03b2d5ca4f9238a684307501  gcc/testsuite/gcc.target/aarch64/popcnt-sve.c
  af75b46ad5491c060e4ce3eb0ed013ce  gcc/testsuite/gcc.target/aarch64/popcnt-udot.c
  96fc63592462925adddeb2b1c19522fe  gcc/testsuite/gcc.target/aarch64/popcnt-vec.c
  629072fafe5767161ca1f67309a94cc5  gcc/testsuite/gcc.target/aarch64/popcnt.c
*************** df08a7f1b91a8c0f914aab7f291c95e7  gcc/te
*** 72275,72280 ****
--- 72324,72330 ----
  77bcecb95fea0e774f3b59d6735b0334  gcc/testsuite/gcc.target/aarch64/simd/pr117048.c
  2797bd4410da16b66ebb2f474c595ee5  gcc/testsuite/gcc.target/aarch64/simd/pr117048_2.c
  67e9f00dffaa6f894241ef054cf29a1e  gcc/testsuite/gcc.target/aarch64/simd/pr121749.c
+ dcd9e3b8c846e78ec347323ab48d3d77  gcc/testsuite/gcc.target/aarch64/simd/pr125716.c
  f2791d55a2c9ed7182a54a406810cf47  gcc/testsuite/gcc.target/aarch64/simd/pr67896.c
  c4b08114012e09e0f47a84f5e5311441  gcc/testsuite/gcc.target/aarch64/simd/pr97349.c
  46d08ecc25480336a5b22ec204104ec5  gcc/testsuite/gcc.target/aarch64/simd/pr99195_1.c
*************** d20b7524d251213c0a38ee4072095889  gcc/te
*** 77195,77200 ****
--- 77245,77251 ----
  f086cc45213645c0c41e1299d9ef5d6e  gcc/testsuite/gcc.target/aarch64/sve/slp_perm_6.c
  240c6b7ea92e49c0da93f87e03f06ecf  gcc/testsuite/gcc.target/aarch64/sve/slp_perm_7.c
  27c757f5b705facca869d233012cbf1c  gcc/testsuite/gcc.target/aarch64/sve/slp_perm_8.c
+ c38b80d7675cdd4a6662fac1117247c7  gcc/testsuite/gcc.target/aarch64/sve/slp_stack.c
  46fa805469d98c65f523c7951e4e1d78  gcc/testsuite/gcc.target/aarch64/sve/smax_1.c
  bcc54159505177890d20f04228b96fc3  gcc/testsuite/gcc.target/aarch64/sve/smin_1.c
  0645f95efcdf83d65444096218a05a17  gcc/testsuite/gcc.target/aarch64/sve/spill_1.c
*************** fc2eb8ac52faed5fba0a017b858d4ae4  gcc/te
*** 79279,79284 ****
--- 79330,79336 ----
  d03b2f46140f14ae9b2101813aec3525  gcc/testsuite/gcc.target/aarch64/torture/pr121772.c
  164477999ab21aa17183a55d49bb0d71  gcc/testsuite/gcc.target/aarch64/torture/pr124491.c
  a9e9dc89b86dea48cebffdbd8459e3a1  gcc/testsuite/gcc.target/aarch64/torture/pr125621.c
+ d7b61dffce1d1bb0e0a1418de081d6df  gcc/testsuite/gcc.target/aarch64/torture/pr125818.c
  5266ac107a73e3ee1d1f44e1cda7d9f2  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-1.c
  9c3416db2fc04c3f91b03ecae15e943e  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-10.c
  df55bfe2c1ce46074b19b4566cedeef4  gcc/testsuite/gcc.target/aarch64/torture/simd-abi-11.c
*************** c89b3bb38d9093b77d878d003a4d9b43  gcc/te
*** 86365,86370 ****
--- 86417,86423 ----
  a86fc7d9e3eb32e85df89db1a80bc4b2  gcc/testsuite/gcc.target/i386/avx512-fma-6.h
  c6dd0e8c40911df14c1fab26ea71eb01  gcc/testsuite/gcc.target/i386/avx512-fma-7.h
  9f5f97d054e0b3fa4dae0cfafc067bd4  gcc/testsuite/gcc.target/i386/avx512-fma-8.h
+ 2d47a8cd278c4cd63f7edbc8ac65825a  gcc/testsuite/gcc.target/i386/avx512-movedup.c
  c20792613e2de72bf223a9deb9981150  gcc/testsuite/gcc.target/i386/avx512-pr115517.c
  4e22ac02ab15a9749ae3d79688009d30  gcc/testsuite/gcc.target/i386/avx512_avoid_vec_perm-1.c
  f4b3ed9a52fecb0f324e977c17e6be98  gcc/testsuite/gcc.target/i386/avx512_avoid_vec_perm-2.c
*************** eeb2c795579e4b693eed6b471e041925  gcc/te
*** 89310,89315 ****
--- 89363,89385 ----
  eb024e3b157728adf6d4f14b1bd4c69d  gcc/testsuite/gcc.target/i386/builtin-fabs-2.c
  83540904d3592a74a85860a8850ad325  gcc/testsuite/gcc.target/i386/builtin-has-attribute.c
  c9f542098c7044c5b8ac4b18be20d199  gcc/testsuite/gcc.target/i386/builtin-issignaling-1.c
+ 22861b3e618172182b69274021e79fbf  gcc/testsuite/gcc.target/i386/builtin-memcpy-1a.c
+ d63e5ee95ea88bc904f54fcb101c64fb  gcc/testsuite/gcc.target/i386/builtin-memcpy-1b.c
+ b8508c17c560fa5d80ea5fe38f1f44b0  gcc/testsuite/gcc.target/i386/builtin-memcpy-2a.c
+ 4371fd55aaab7c98c388fa882f3bd8e6  gcc/testsuite/gcc.target/i386/builtin-memcpy-2b.c
+ b8ca9cb82cde21d8adf6ee17f95970a8  gcc/testsuite/gcc.target/i386/builtin-memcpy-2c.c
+ d7d92e2c2e560ddcfe75be9cb8472a37  gcc/testsuite/gcc.target/i386/builtin-memcpy-3a.c
+ f7fdae3d19b61bacdb7aa64f18be7079  gcc/testsuite/gcc.target/i386/builtin-memcpy-3b.c
+ 54ce0ac35d7fbb32e214715967322744  gcc/testsuite/gcc.target/i386/builtin-memcpy-3c.c
+ d8ba3f435b4a04ac2906b53f4b46a6bb  gcc/testsuite/gcc.target/i386/builtin-memcpy-4a.c
+ 5078220911f9f4e8e2fbc82d5dd5b769  gcc/testsuite/gcc.target/i386/builtin-memcpy-4b.c
+ d3180a3a0a6fde31908261b327be9792  gcc/testsuite/gcc.target/i386/builtin-memcpy-4c.c
+ 102c4ef42cad17e8d879e2dd7bbab634  gcc/testsuite/gcc.target/i386/builtin-memcpy-5a.c
+ 0cc8b854dca399777c5a56008a69e2c7  gcc/testsuite/gcc.target/i386/builtin-memcpy-5b.c
+ 981ec7dec73dd0b4a19c003234a2a31e  gcc/testsuite/gcc.target/i386/builtin-memcpy-5c.c
+ cd51ce77a6977a45e96c3cc992f9920a  gcc/testsuite/gcc.target/i386/builtin-memcpy-6.c
+ fc7e8e431ea40097bf1b66034a56cae2  gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1a.c
+ ebed8d3f50fe660ba506639682e78190  gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1b.c
  796478c3e44716378949acd047135b20  gcc/testsuite/gcc.target/i386/builtin-memmove-10.c
  2a909144f356c6abe5101ec9e2880e24  gcc/testsuite/gcc.target/i386/builtin-memmove-11a.c
  ca4ac7cac7f4e2b202119db822204403  gcc/testsuite/gcc.target/i386/builtin-memmove-11b.c
*************** f0ee0e5daef7ee8c6951c3cfbecf1139  gcc/te
*** 89339,89344 ****
--- 89409,89439 ----
  ee4f3b3c9dd2fc966fd73009122dc04a  gcc/testsuite/gcc.target/i386/builtin-memmove-7.c
  a21a2135b5311d84b5e4be4d33156711  gcc/testsuite/gcc.target/i386/builtin-memmove-8.c
  b41d9e6002dd46f3c6c0d6d39dea37ee  gcc/testsuite/gcc.target/i386/builtin-memmove-9.c
+ 2018670953b1ef4aa9d5b3bd16f7e839  gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1a.c
+ 3e24ccaaacee37bb1448907252c68731  gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1b.c
+ e678fc53aeaab6159127f6fb9981b170  gcc/testsuite/gcc.target/i386/builtin-memset-1a.c
+ 88b9e7a532624010702f9e3400089fdb  gcc/testsuite/gcc.target/i386/builtin-memset-1b.c
+ 6762c9229a4f910982af434e500cde2e  gcc/testsuite/gcc.target/i386/builtin-memset-2a.c
+ 7084a44aec01fa221377994bd66b08db  gcc/testsuite/gcc.target/i386/builtin-memset-2b.c
+ f9bb0587a537694af119b9205991afd0  gcc/testsuite/gcc.target/i386/builtin-memset-2c.c
+ 50ef23ad45c4bcb3e7de3c1f5d817dd7  gcc/testsuite/gcc.target/i386/builtin-memset-3a.c
+ d6997075e38c9c0d90f343773f2f95d9  gcc/testsuite/gcc.target/i386/builtin-memset-3b.c
+ 0bc78b3fe3ebae5343459bc92644d958  gcc/testsuite/gcc.target/i386/builtin-memset-3c.c
+ 39ec7a5aac86726ff2c0e59f6dec57aa  gcc/testsuite/gcc.target/i386/builtin-memset-4a.c
+ e7beb442b57a811f90fb15a0a32e9184  gcc/testsuite/gcc.target/i386/builtin-memset-4b.c
+ f7a4006a8f27e1ce44a7b7279c2a1330  gcc/testsuite/gcc.target/i386/builtin-memset-4c.c
+ 8e69c14e5b8ea24bc4dfe3d4e5364b8e  gcc/testsuite/gcc.target/i386/builtin-memset-5a.c
+ e2a3e2a74c3757f54dd1814f62ed3687  gcc/testsuite/gcc.target/i386/builtin-memset-5b.c
+ 4620cf96aad36af056c3070f76c8b6d9  gcc/testsuite/gcc.target/i386/builtin-memset-5c.c
+ da222c0fc05ed4dac69a6d1bfc2be1f6  gcc/testsuite/gcc.target/i386/builtin-memset-6a.c
+ f45523392e2d961871d4cb7b76e9e927  gcc/testsuite/gcc.target/i386/builtin-memset-6b.c
+ 8583371d0abc2c27168fb4ff39dbe631  gcc/testsuite/gcc.target/i386/builtin-memset-6c.c
+ f434751cc84d802a87f366a217ef7840  gcc/testsuite/gcc.target/i386/builtin-memset-7a.c
+ 78a48e06dffb77e1790cd0c57f532cf3  gcc/testsuite/gcc.target/i386/builtin-memset-7b.c
+ c5a76beaef83c9ba2f41f3215c6249fd  gcc/testsuite/gcc.target/i386/builtin-memset-7c.c
+ 9ea309faaf5e9399aef01adb097e2823  gcc/testsuite/gcc.target/i386/builtin-memset-8.c
+ c15b34155dac2588f6d17a952d651713  gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1a.c
+ f6726bfc1bcfcef24ea05407bcf9d198  gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1b.c
  07c7b1b786ccb4b67484b353aa40d9c7  gcc/testsuite/gcc.target/i386/builtin-ucmp.c
  c8f91a97e3f4734a3595572bab26a3e7  gcc/testsuite/gcc.target/i386/builtin-unreachable.c
  5fa05e3eb27a2bfb180c0a1a14e3db07  gcc/testsuite/gcc.target/i386/builtin_target.c
*************** c1320fd604803bc04257c984f1e3ba77  gcc/te
*** 89675,89681 ****
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! fb0a9b9e7460d3afd938751395435809  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  b954a6c88c30f112db6bd140acb0162c  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
  0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
--- 89770,89776 ----
  3dd864a351a6115db6a5b2ea1ee16ece  gcc/testsuite/gcc.target/i386/funcspec-3.c
  5af0527c599bf95f77628d48b1beb0ec  gcc/testsuite/gcc.target/i386/funcspec-4.c
  7568c1249431aafb7f8e2610a1e4a35e  gcc/testsuite/gcc.target/i386/funcspec-5.c
! 1a643a203c98df3dd079c5d36be23770  gcc/testsuite/gcc.target/i386/funcspec-56.inc
  b954a6c88c30f112db6bd140acb0162c  gcc/testsuite/gcc.target/i386/funcspec-6.c
  35655de5c9348f2a36254312a8d17908  gcc/testsuite/gcc.target/i386/funcspec-7.c
  0ba9f1b7368ea580cabab541b451aea8  gcc/testsuite/gcc.target/i386/funcspec-8.c
*************** b5fef8fb540e17f32442a50d6ee40f1e  gcc/te
*** 91282,91287 ****
--- 91377,91383 ----
  68c5cb935b4b7d76ed31899761e6b756  gcc/testsuite/gcc.target/i386/pr123027.c
  6631a523638aaa28883a1480bb393315  gcc/testsuite/gcc.target/i386/pr123121.c
  2931c5829c33b01bbef9a329552be2bb  gcc/testsuite/gcc.target/i386/pr123210.c
+ f23aa13dbff267c3dd0be39ad389241f  gcc/testsuite/gcc.target/i386/pr123238-2.c
  51d42fc40aa1faa649ea3595c2494314  gcc/testsuite/gcc.target/i386/pr123238.c
  f99f88a6e994ad6e55e065e41bc58f8f  gcc/testsuite/gcc.target/i386/pr12329.c
  8be8732e201b30755cf471a1f8ac1cf6  gcc/testsuite/gcc.target/i386/pr123319.c
*************** f3cfd64327a4277836bd9cb3b1aca08d  gcc/te
*** 91319,91325 ****
  a7914bedf774cd238c5877b4c741b754  gcc/testsuite/gcc.target/i386/pr125100-1.c
  870b7a92f7ef38497e07181df4080eb6  gcc/testsuite/gcc.target/i386/pr125100-2.c
  1212d4cdb8cd4262def0965fb2ac0fad  gcc/testsuite/gcc.target/i386/pr125100-3.c
! d28e5235664b0b453e47baf61b0e494b  gcc/testsuite/gcc.target/i386/pr125100-4.c
  2452d87d24cd7ed49934ad5aecd255e2  gcc/testsuite/gcc.target/i386/pr125180.c
  df76ec06f1f94b77cb1652a61b635dcd  gcc/testsuite/gcc.target/i386/pr125238.c
  02bcd898871c488722d8481d6020b391  gcc/testsuite/gcc.target/i386/pr125239.c
--- 91415,91421 ----
  a7914bedf774cd238c5877b4c741b754  gcc/testsuite/gcc.target/i386/pr125100-1.c
  870b7a92f7ef38497e07181df4080eb6  gcc/testsuite/gcc.target/i386/pr125100-2.c
  1212d4cdb8cd4262def0965fb2ac0fad  gcc/testsuite/gcc.target/i386/pr125100-3.c
! e49515b6a30e4a6e5895e158edb8a0c5  gcc/testsuite/gcc.target/i386/pr125100-4.c
  2452d87d24cd7ed49934ad5aecd255e2  gcc/testsuite/gcc.target/i386/pr125180.c
  df76ec06f1f94b77cb1652a61b635dcd  gcc/testsuite/gcc.target/i386/pr125238.c
  02bcd898871c488722d8481d6020b391  gcc/testsuite/gcc.target/i386/pr125239.c
*************** df76ec06f1f94b77cb1652a61b635dcd  gcc/te
*** 91330,91335 ****
--- 91426,91445 ----
  0d5d3d25c881e920fd3309b334c0c58f  gcc/testsuite/gcc.target/i386/pr125355.c
  20e05cf993391a61cf15835793091a43  gcc/testsuite/gcc.target/i386/pr125614.c
  1f67cd0f9980b605cafe7d50af23cbf9  gcc/testsuite/gcc.target/i386/pr125883.c
+ b74c2af473afb9b45ec43c61dc46e8e7  gcc/testsuite/gcc.target/i386/pr125893-1.c
+ 21d39d0f18706b517f71101ec469f85d  gcc/testsuite/gcc.target/i386/pr125893-10.c
+ f9ee57b85547b7df79020d38f442def0  gcc/testsuite/gcc.target/i386/pr125893-11.c
+ eb37245021bf5dc7679d3c9a6333752a  gcc/testsuite/gcc.target/i386/pr125893-2.c
+ 7a4566bfd7fc9d9105eae7e5f87c56f1  gcc/testsuite/gcc.target/i386/pr125893-3.c
+ b46a48921717f661028b1d0d080b3c2c  gcc/testsuite/gcc.target/i386/pr125893-4.c
+ b9bad6d378aa47818be770317e47abf7  gcc/testsuite/gcc.target/i386/pr125893-5.c
+ ec4b39860e0991bd026c5c23e91175ed  gcc/testsuite/gcc.target/i386/pr125893-6.c
+ 09a95aadcb0fddeab1a0e4e3f6bc6606  gcc/testsuite/gcc.target/i386/pr125893-7.c
+ 3bcd87761467d785d5afc92912a4a2b6  gcc/testsuite/gcc.target/i386/pr125893-8.c
+ 025ff26dd237e91c0a735734cf0de368  gcc/testsuite/gcc.target/i386/pr125893-9.c
+ 15ee29d681fd6d3183fc51e825b71820  gcc/testsuite/gcc.target/i386/pr125895.c
+ 2f69299dd02a2a0513b7f830ae0df284  gcc/testsuite/gcc.target/i386/pr125949.c
+ 3d8dd7cc1e868adc304243a4c6a7d758  gcc/testsuite/gcc.target/i386/pr125958.c
  8951a1fa31f2d45ef9eacfff6a733f77  gcc/testsuite/gcc.target/i386/pr13366.c
  9a752a4b3b77930d91d3c8b0c8897b90  gcc/testsuite/gcc.target/i386/pr13685.c
  31ead0ee84b382ba03e3561931bc6e40  gcc/testsuite/gcc.target/i386/pr14289-1.c
*************** aeb341ec372b4ad17f7d946f744a6d78  gcc/te
*** 93320,93325 ****
--- 93430,93436 ----
  192f3b1fb9a6904f97a6c55cb3648351  gcc/testsuite/gcc.target/i386/preserve-none-7.c
  46ee3b21d6fbb4874e2cc387dc76894f  gcc/testsuite/gcc.target/i386/preserve-none-8.c
  dbaa3ccce2e7bd8e259f97b2d272cf9c  gcc/testsuite/gcc.target/i386/preserve-none-9.c
+ 0a07ad1959a1b8b5b90dfd47f4cdd1db  gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c
  4561455bd0f6ca8ce0b0f477f2897ee2  gcc/testsuite/gcc.target/i386/ptwrite1.c
  90a00e0f61849345a274cd1b4f96c029  gcc/testsuite/gcc.target/i386/ptwrite2.c
  1c20da95e9e947694dd009c5a701a628  gcc/testsuite/gcc.target/i386/quad-sse.c
*************** dcf09c8d7eb01e0e8a5e8cefaf164498  gcc/te
*** 94293,94298 ****
--- 94404,94416 ----
  eda0d442fd95aa4f91e9f15d67b2a009  gcc/testsuite/gcc.target/i386/vect-bfloat16-2c.c
  ef5c459cb91849c88697aa740366def5  gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_1.c
  c6de9db89c9a84b86bc9e22583bbe1da  gcc/testsuite/gcc.target/i386/vect-bfloat16-typecheck_2.c
+ ba85333fb178da98ba30d0c3d66f7655  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c
+ ab69d9bbd51cf998202e39a5a3e247fa  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c
+ 0e1652680d35183ac540c92e1d5e4771  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c
+ 246ab3ef90910058a6b6a85a9f600a4a  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c
+ dbb78f1bef26196a639e80bcc8d71b56  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c
+ 8aaa43fe98fdf158a893490222afa06d  gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c
+ 3d489bc48a081c0ab96b9806cea428ca  gcc/testsuite/gcc.target/i386/vect-compare-cost.c
  f34aa81937bfa895146815db467bcc3d  gcc/testsuite/gcc.target/i386/vect-cond-1.c
  f3b080c0020e1742c43ff167c717f0b5  gcc/testsuite/gcc.target/i386/vect-div-1.c
  38733171ed3f42215de340f00f2277e8  gcc/testsuite/gcc.target/i386/vect-double-1.c
*************** b018ac82fb41680ec84f71c82531b157  gcc/te
*** 97049,97054 ****
--- 97167,97173 ----
  62820786e811568bf9c0487b4ef6761b  gcc/testsuite/gcc.target/powerpc/e500-ord-2.c
  6ea92a9945a83333f8d1ba665d65f560  gcc/testsuite/gcc.target/powerpc/e500-unord-1.c
  83d3ef0422135a547b552e5700f1e4a6  gcc/testsuite/gcc.target/powerpc/e500-unord-2.c
+ 37ad2d0acc730b153cd2124638ef1642  gcc/testsuite/gcc.target/powerpc/ecc-builtin-1.c
  01907d008b05c94700170b948c96b56e  gcc/testsuite/gcc.target/powerpc/ehreturn.c
  bd2c353f1036b5195045a2743592560e  gcc/testsuite/gcc.target/powerpc/error-1.c
  30b61e9be61686ff759fe9e565bd6199  gcc/testsuite/gcc.target/powerpc/extend-divide-1.c
*************** f0050538b645310e4d0979e24d795aa2  gcc/te
*** 99151,99156 ****
--- 99270,99281 ----
  376ac48340c386427a1be7e5e884993a  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-7.c
  6a6f6da892e6ab1ee90807017ab944d9  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-8.c
  a9b38e5a37de52ced500d53d1d518b95  gcc/testsuite/gcc.target/powerpc/vsx-vectorize-9.c
+ 43abcee180b5304a1fef01db96126732  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c
+ bd68f825f13abf87cf0dc41c546b6111  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c
+ d537318f4778d476538830af75773636  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c
+ e28a0c5ef6fd0537edfffa3640c7b4eb  gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c
+ 38c44990e18101bb4f8fdd534e7cc245  gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c
+ 26e40ebbd37f50c7f69089ac757f00d6  gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c
  c64a5cc2ce1d0b7ac9d881b4585a9313  gcc/testsuite/gcc.target/powerpc/vsx_mask-count-runnable.c
  37a4787409404cc5944ae67ed64e5513  gcc/testsuite/gcc.target/powerpc/vsx_mask-expand-runnable.c
  829a2621c1495feaccfe06f5b735d1db  gcc/testsuite/gcc.target/powerpc/vsx_mask-extract-runnable.c
*************** ba319008fc3d471c58bb29fc9d29ccbc  gcc/te
*** 100469,100477 ****
--- 100594,100606 ----
  c5510efb0e85b94c43e177d92c8bfa96  gcc/testsuite/gcc.target/riscv/pr123322.c
  36f2729f33d66359ae39ca96a9075786  gcc/testsuite/gcc.target/riscv/pr123380.c
  331dce227538529fceff71229d276a03  gcc/testsuite/gcc.target/riscv/pr123838.c
+ 1afef63c58743345380dc43605342496  gcc/testsuite/gcc.target/riscv/pr123884-a.c
+ 29f077bb17eda02471a3b85bbf381886  gcc/testsuite/gcc.target/riscv/pr123884-b.c
+ 7ebb311f467142725865b278b303876f  gcc/testsuite/gcc.target/riscv/pr123884-c.c
  c8329d7f70c2170589156e008b96bd42  gcc/testsuite/gcc.target/riscv/pr123904.c
  ac11119f9210fdbe0a0f2e3211742dd1  gcc/testsuite/gcc.target/riscv/pr123911.c
  232cb725cd8279cd7a85d9c9368c3996  gcc/testsuite/gcc.target/riscv/pr124009.c
+ c308ee60e810874e0719cd1649a377fc  gcc/testsuite/gcc.target/riscv/pr124019.c
  9fe4e473a13fa1c11a62a88ae71a3c68  gcc/testsuite/gcc.target/riscv/pr124029.c
  a06f50eaf9ffceda3f1e44f0fe8c75f8  gcc/testsuite/gcc.target/riscv/pr124674.c
  52cb197377816f789e27e2a0005cdc17  gcc/testsuite/gcc.target/riscv/pr124760.c
*************** a8b154f3ebc705a72dd58140a6419d33  gcc/te
*** 103349,103354 ****
--- 103478,103484 ----
  c4ce5811a887d193e1ff4f3353c39632  gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run_zvfh-6.c
  8187bff72b496df98c214a34eb4957eb  gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run_zvfh-7.c
  c3a6ba3dd89b27bf15bc5242257c3228  gcc/testsuite/gcc.target/riscv/rvv/autovec/widen/widen_run_zvfh-8.c
+ 2d38def6c0f803f0b8d1b4f41f8ade0f  gcc/testsuite/gcc.target/riscv/rvv/autovec/zvabd-1.c
  e3913554dd183888dbead2e30810963f  gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-1.c
  526e5a62cb0908c681251c17247e28e9  gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-2.c
  9e8ce3e7531b579d60705be38d675d10  gcc/testsuite/gcc.target/riscv/rvv/autovec/zve32f-3.c
*************** b654b48048b78f1643d89a32b5255958  gcc/te
*** 103965,103976 ****
  922b072fea9e0e74a7ca4d026a66b03f  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-37.c
  938c1b23ec2452ceb884b274c204a527  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-38.c
  9db6e8e6c4bed9dc2334cb79722fd898  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-39.c
! bcaa86c863eaa9a2cf63dcfda8ae64aa  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-4.c
  9762bc352c6862583e6e51c38b351fc0  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-40.c
  95d8a8d0475bc3c9ef6bb8e7e264136f  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-41.c
  4a495ccab8bdb2c1283e197a403f58dc  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-42.c
! 49a8103996ad5193328c5a30f11e5839  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c
! 3ce7581c2097dbf9e5cd98228bd0aeb1  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c
  aa04716996d51f5f16f16e2f489f9b92  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-7.c
  227105ef0aa53b1b545e7d275f5fdfd9  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-8.c
  161ce0bd04d197bdc14d75f100edbeef  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-9.c
--- 104095,104106 ----
  922b072fea9e0e74a7ca4d026a66b03f  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-37.c
  938c1b23ec2452ceb884b274c204a527  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-38.c
  9db6e8e6c4bed9dc2334cb79722fd898  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-39.c
! 8d793f3fa3dd09e46f94c6d18c24e27e  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-4.c
  9762bc352c6862583e6e51c38b351fc0  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-40.c
  95d8a8d0475bc3c9ef6bb8e7e264136f  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-41.c
  4a495ccab8bdb2c1283e197a403f58dc  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-42.c
! 19140a4383e8b06d1d20ab5f9e1496c5  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c
! 2ed4fb55a4dc2e5bba7bdac02954f3c2  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c
  aa04716996d51f5f16f16e2f489f9b92  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-7.c
  227105ef0aa53b1b545e7d275f5fdfd9  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-8.c
  161ce0bd04d197bdc14d75f100edbeef  gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-9.c
*************** a8f53ad5180333afb72d569d125c3922  gcc/te
*** 105210,105216 ****
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! b501c2edc03a715242255e32b0a72f97  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
--- 105340,105346 ----
  fe865d9009af7551d830f6d4e3008ebe  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vlwu-vsw.c
  10c2fe61483d221e6648e72c6ff9f6a0  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vsext.c
  23788d7500abf7340ab20ef598d9da5e  gcc/testsuite/gcc.target/riscv/rvv/xtheadvector/vzext.c
! f207abf1dfa7b01f923d7ca67d3a6705  gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
  89d90b13c13c2658dcc8319771cd755f  gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
  e52f03a6378cd78f7ea04149c2b8215a  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
  1de70dbaccb7e9fe73b8e90ec7430b4d  gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
*************** f7a55465c864810e6d146cef4094be15  gcc/te
*** 105597,105602 ****
--- 105727,105745 ----
  f7b6d151e3462dcc3d28d6d6c4b3af1f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u32.c
  a9f1bddc78af52e2c03e4d296e66af83  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u64.c
  6d5ce4e363d6dfbf84504a522a1cc84d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-13-u8.c
+ a05f1cba37b8e8b9e4e8d2baee2dcb06  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u128.c
+ 518f5ee0548384d5bfcbf3d81ae50403  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u32.c
+ b95117157998bc4cde2556bdc83f2f2d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv32.c
+ 27a5ca46b4cf21c402077ccbf8e32994  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv64.c
+ 0c40346ab7e344c5ba559619042f7a0e  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u128.c
+ 442a9ac0ae9ff586fc186605237932de  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv32.c
+ 55f893c3183c031060166d1094f8262e  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv64.c
+ 189106dbb93c94e5f25bacfa845a26a9  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u64-from-u128.c
+ 926748067aa91218c0d0ce88d0b83349  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u128.c
+ 4d9fee6561f643850d2313cbd67319c0  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u16.c
+ 0895d922976033ead760f3cbb2ba4144  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c
+ b150a750e4d273b1be4172e71b82dfe0  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c
+ fa1107d7a8c2a94f0feef17691300a9f  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c
  251cfaed4fc07574d958d0681d1dfec5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u16-from-u64.c
  5b0850fbdfe60f0c7b2f6b7451708398  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u32-from-u64.c
  6543eb493f3a5de8524d7043324fb135  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-2-u8-from-u64.c
*************** add4817374ea0990431a6f569166cef7  gcc/te
*** 105714,105719 ****
--- 105857,105872 ----
  aca978c95a1e04df5ebdfa749fbbb524  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u32.c
  6efe233f56877b7377ac58c56deaa34d  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u64.c
  a615bdbe96764c6cdaf6ab6b6b506565  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-13-u8.c
+ 115002dec30238a205a4354f4476b366  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u128.c
+ ac9f63f6ea85867406e806edc5864fde  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u32.c
+ ae0e39d69dae1db9a67ebcbd27ec20b7  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u64.c
+ fdd9500fa3b712baf5142fa776cf49a1  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u128.c
+ 5e97ff6090626942f9a352fb1c651c1c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u64.c
+ 4f869d07ef02a9d80d3c7f5517cf4f8e  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u64-from-u128.c
+ 115002dec30238a205a4354f4476b366  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u128.c
+ a1f036c2547626e2b3f24e22bba7b348  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c
+ 4b35fc79d94f65ece071283d7aaa42d5  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c
+ a65501bdd75b62f095b2fad943862a35  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c
  6e4e3e7e8157d61d92fd2d57b879983c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u16.c
  7c4b9349b8740bc9b8a5febcbb96897c  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u32.c
  4c1f4994dcf2fb5cd55247f60b8383f3  gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-3-u64.c
*************** ddd06bb7aa032539e1d7f788e2ddb31f  gcc/te
*** 106745,106750 ****
--- 106898,106905 ----
  8e924805f1a0bbe1a1a2871be67a0970  gcc/testsuite/gcc.target/s390/pr119873-4.c
  c5b09d072962be55a3b282895afe41d6  gcc/testsuite/gcc.target/s390/pr119873-5.c
  d49455031d1c0b8c6740f90cf831720a  gcc/testsuite/gcc.target/s390/pr124079.c
+ d519a0e6ac82acfc25e0475e29ea6d80  gcc/testsuite/gcc.target/s390/pr125972.c
+ 86e19acef61e2b484623df454673168e  gcc/testsuite/gcc.target/s390/pr125992.c
  765307a040de72f2f4376b7068d68018  gcc/testsuite/gcc.target/s390/pr20927.c
  85f31fb9b4b15529205376d3f6fa385c  gcc/testsuite/gcc.target/s390/pr24624.c
  7adacbd67601dc0845e556e5632cd718  gcc/testsuite/gcc.target/s390/pr27661.c
*************** efede2d1d5cccacefc4de5c919a14b01  gcc/te
*** 107514,107519 ****
--- 107669,107676 ----
  c420e8b5d1ad1e97bdbdadc212460a15  gcc/testsuite/gcc.target/sh/torture/pr17280.c
  e3304fa443d00dfb07ed96db3d7d911f  gcc/testsuite/gcc.target/sh/torture/pr30807.c
  4c34097afd7b286028be7f7030fd597e  gcc/testsuite/gcc.target/sh/torture/pr34777.c
+ 5725e63ece230916d5eea624780c3d16  gcc/testsuite/gcc.target/sh/torture/pr55212-c464-1.c
+ b1da7e8cb592c67d2bf91767319694df  gcc/testsuite/gcc.target/sh/torture/pr55212-c464-2.c
  d30d38c361043cbed33b4eb6d83b5657  gcc/testsuite/gcc.target/sh/torture/pr58314-2.c
  ea4b84c2a1538fdea01a68123c548440  gcc/testsuite/gcc.target/sh/torture/pr58314.c
  ea51469597a5cfee0e33fc77f92446d0  gcc/testsuite/gcc.target/sh/torture/pr58475.c
*************** f3a2f2d532dfb58980122e4734146c0d  gcc/te
*** 113461,113466 ****
--- 113618,113624 ----
  66de6cb3bf07d14487491fac7d1ee72f  gcc/testsuite/gfortran.dg/asan/pointer_assign_16.f90
  68c306b7235f43b669fee04a590362d9  gcc/testsuite/gfortran.dg/asan/pr110415-2.f90
  5ba36953a293a48947580de915906563  gcc/testsuite/gfortran.dg/asan/pr110415-3.f90
+ 32d9be812c09154a35032de8b1adcbec  gcc/testsuite/gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90
  2afed544877f5a6213485c057dd4276d  gcc/testsuite/gfortran.dg/asan/unlimited_polymorphic_34.f90
  28bbca8fc062ad301c676d4eb94d000d  gcc/testsuite/gfortran.dg/assign-debug.f90
  7ad5faf60f3a1cebebfbb2c9e52516d7  gcc/testsuite/gfortran.dg/assign.f90
*************** ab1680fba79a3e8495b3b46064f1a59f  gcc/te
*** 114203,114208 ****
--- 114361,114368 ----
  8c7f6dde1eea44cf8af5e581897328fa  gcc/testsuite/gfortran.dg/c-interop/ubound-bindc.f90
  137d881d0a8857a78cdb9126e2217371  gcc/testsuite/gfortran.dg/c-interop/ubound-poly.f90
  37ab8568bd215c1d33b0c69042924b38  gcc/testsuite/gfortran.dg/c-interop/ubound.f90
+ 99fff7184577ed79359139f978263ef7  gcc/testsuite/gfortran.dg/c-prototypes_1.F90
+ 026b67e86fde91d40eba8cecaa285500  gcc/testsuite/gfortran.dg/c-prototypes_2.F90
  1b401bdae1b8b765397b10aa78d39feb  gcc/testsuite/gfortran.dg/c_assoc.f90
  836175653a8d0cef54e1b053f6226dfa  gcc/testsuite/gfortran.dg/c_assoc_2.f03
  0c01f4864b877d36b3d6e539f521f58b  gcc/testsuite/gfortran.dg/c_assoc_3.f90
*************** af62f8e63487374ab7f55bf98ba22f9f  gcc/te
*** 114583,114589 ****
  211e434394ea8ce43ce8f5c2e671416d  gcc/testsuite/gfortran.dg/class_array_12.f03
  7d1b70fed6324f2dae86399e70c60cb7  gcc/testsuite/gfortran.dg/class_array_13.f90
  c846364e17a1733317b1f609e1a937f9  gcc/testsuite/gfortran.dg/class_array_14.f90
! 90fc85dc9bd404ddcb7d00dcb7d97691  gcc/testsuite/gfortran.dg/class_array_15.f03
  26e53d866d760ca631e05275ed5d5281  gcc/testsuite/gfortran.dg/class_array_16.f90
  db91c4c4aafba393cb88a89c0beacd9c  gcc/testsuite/gfortran.dg/class_array_17.f90
  c51442df4b78a56b7cd5dc0dacc16f6b  gcc/testsuite/gfortran.dg/class_array_18.f90
--- 114743,114749 ----
  211e434394ea8ce43ce8f5c2e671416d  gcc/testsuite/gfortran.dg/class_array_12.f03
  7d1b70fed6324f2dae86399e70c60cb7  gcc/testsuite/gfortran.dg/class_array_13.f90
  c846364e17a1733317b1f609e1a937f9  gcc/testsuite/gfortran.dg/class_array_14.f90
! 97846008ac1481ee9b4981dbdaced72b  gcc/testsuite/gfortran.dg/class_array_15.f03
  26e53d866d760ca631e05275ed5d5281  gcc/testsuite/gfortran.dg/class_array_16.f90
  db91c4c4aafba393cb88a89c0beacd9c  gcc/testsuite/gfortran.dg/class_array_17.f90
  c51442df4b78a56b7cd5dc0dacc16f6b  gcc/testsuite/gfortran.dg/class_array_18.f90
*************** f024936b2bb3be33b204bc283db65a94  gcc/te
*** 115426,115432 ****
  cb44893d94f03877d3d146a8c1da8bd8  gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
  1985d33efa2fb91552f8a4d90653edd7  gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
  b90644647498c9ab9c17c0d5ea8d1b82  gcc/testsuite/gfortran.dg/derived_constructor_comps_5.f90
! b82bb411ffe2afd1f983103a913048ea  gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
  a4520e3938bf347c0b9e1003348fd3b6  gcc/testsuite/gfortran.dg/derived_constructor_comps_7.f90
  d651e8567ae16400b1f0dd3cfa78dfbe  gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90
  cff987fa6f89201aa37245231d20c023  gcc/testsuite/gfortran.dg/derived_external_function_1.f90
--- 115586,115592 ----
  cb44893d94f03877d3d146a8c1da8bd8  gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
  1985d33efa2fb91552f8a4d90653edd7  gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
  b90644647498c9ab9c17c0d5ea8d1b82  gcc/testsuite/gfortran.dg/derived_constructor_comps_5.f90
! f17a865f91f1b90d59c3de5cd61a4843  gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
  a4520e3938bf347c0b9e1003348fd3b6  gcc/testsuite/gfortran.dg/derived_constructor_comps_7.f90
  d651e8567ae16400b1f0dd3cfa78dfbe  gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90
  cff987fa6f89201aa37245231d20c023  gcc/testsuite/gfortran.dg/derived_external_function_1.f90
*************** e483ed156816d5eadb1c29eb4aa771d5  gcc/te
*** 116022,116027 ****
--- 116182,116189 ----
  817f12fc29f7089a206f5b9ea00a6eb7  gcc/testsuite/gfortran.dg/fmt_read_5.f
  43e2fd9433bc1ee1fb07cd35d02dbec3  gcc/testsuite/gfortran.dg/fmt_read_bz_bn.f90
  1ccf86cc72f856d844dbbf28175cd618  gcc/testsuite/gfortran.dg/fmt_t_1.f90
+ 2c6ca0acd2bf578a4f538ba32cea5c01  gcc/testsuite/gfortran.dg/fmt_t_10.f90
+ a1fde2ba16467e13f0be016f2527e994  gcc/testsuite/gfortran.dg/fmt_t_11.f90
  3dfbcdfa52c98bbcbffa012d74d139fc  gcc/testsuite/gfortran.dg/fmt_t_2.f90
  6fe1eae7825f29f89583c88c0651bd9f  gcc/testsuite/gfortran.dg/fmt_t_3.f90
  ab284a204891b5c5562bc3cd7291a666  gcc/testsuite/gfortran.dg/fmt_t_4.f90
*************** ea0c8f606b40e128514e68c437210991  gcc/te
*** 116739,116744 ****
--- 116901,116907 ----
  504c422953056318a81d621175f64178  gcc/testsuite/gfortran.dg/gomp/declare-mapper-5.f90
  2fbe08279951fcf4d5378402ec69617f  gcc/testsuite/gfortran.dg/gomp/declare-mapper-6.f90
  c0f12c2cbdf05de833a7b126bba981ba  gcc/testsuite/gfortran.dg/gomp/declare-mapper-7.f90
+ 56e0715b42e3133415a76f21c8a1c853  gcc/testsuite/gfortran.dg/gomp/declare-mapper-8.f90
  64e62b03ab3e24a3a50176ae4cc4d925  gcc/testsuite/gfortran.dg/gomp/declare-reduction-1.f90
  223baf5df5e1298dad4aff7b68bb5351  gcc/testsuite/gfortran.dg/gomp/declare-reduction-2.f90
  50ccf43b00095b0ac8f7f40d24996595  gcc/testsuite/gfortran.dg/gomp/declare-reduction-3.f90
*************** fd8beb621042a5dfb3a9cdfcd84fba1e  gcc/te
*** 116864,116869 ****
--- 117027,117033 ----
  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
+ 3e049ac37e9a2cca4cd19e37e0662b5c  gcc/testsuite/gfortran.dg/gomp/lastprivate-allocatable-barrier-1.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
*************** ecc6a107b4b8d99f10df6f63298016f0  gcc/te
*** 116903,116909 ****
  50d9e88ef3e24f6a0f0bcc698af2f0bb  gcc/testsuite/gfortran.dg/gomp/map-subarray-4.f90
  0fcf24902afdfb50ca313bb63e127456  gcc/testsuite/gfortran.dg/gomp/map-subarray-5.f90
  5a07328f491fd2469ed5686d84fef199  gcc/testsuite/gfortran.dg/gomp/map-subarray.f90
! 27a18505986bb3d15bf8fae66e56277d  gcc/testsuite/gfortran.dg/gomp/masked-1.f90
  3dcee7c8522ab62ae30bfb476d1ff838  gcc/testsuite/gfortran.dg/gomp/masked-2.f90
  030bb5759e59829f3b659878d4b71c83  gcc/testsuite/gfortran.dg/gomp/masked-3.f90
  cb24525724c32b45315c964136a5f1b9  gcc/testsuite/gfortran.dg/gomp/masked-combined-1.f90
--- 117067,117073 ----
  50d9e88ef3e24f6a0f0bcc698af2f0bb  gcc/testsuite/gfortran.dg/gomp/map-subarray-4.f90
  0fcf24902afdfb50ca313bb63e127456  gcc/testsuite/gfortran.dg/gomp/map-subarray-5.f90
  5a07328f491fd2469ed5686d84fef199  gcc/testsuite/gfortran.dg/gomp/map-subarray.f90
! 6215b9b42c543f6883f774960ae65f3f  gcc/testsuite/gfortran.dg/gomp/masked-1.f90
  3dcee7c8522ab62ae30bfb476d1ff838  gcc/testsuite/gfortran.dg/gomp/masked-2.f90
  030bb5759e59829f3b659878d4b71c83  gcc/testsuite/gfortran.dg/gomp/masked-3.f90
  cb24525724c32b45315c964136a5f1b9  gcc/testsuite/gfortran.dg/gomp/masked-combined-1.f90
*************** ea3c8aeb506b4c30f03aaff80bc6ee7a  gcc/te
*** 118557,118570 ****
  23a7eba590f0e92297cfe998826840ea  gcc/testsuite/gfortran.dg/namelist_38.f90
  692c5f326734d09e4cc39080826d1bf5  gcc/testsuite/gfortran.dg/namelist_39.f90
  cf65f0ee124f55cc70d09e61931263f9  gcc/testsuite/gfortran.dg/namelist_4.f90
! c32970dca3c09d3218272754ac0e084d  gcc/testsuite/gfortran.dg/namelist_40.f90
  991c2beb9a4db0c3b864d7500049c6ea  gcc/testsuite/gfortran.dg/namelist_41.f90
  24af4bdf7b20059ba30b90301a3984f7  gcc/testsuite/gfortran.dg/namelist_42.f90
  5e7b167b9a0603fe9a01cd6368878ed2  gcc/testsuite/gfortran.dg/namelist_43.f90
  bef49328c049eb5d05139ee02a8dd4ea  gcc/testsuite/gfortran.dg/namelist_44.f90
  3323b03ab02322d6cafa6c30c26c25c5  gcc/testsuite/gfortran.dg/namelist_45.f90
  04714ed92ea63f10bc8f26d084d85ec1  gcc/testsuite/gfortran.dg/namelist_46.f90
! 41dc5937c29478f700e1dc9de0fc3c0b  gcc/testsuite/gfortran.dg/namelist_47.f90
  4ab84b333c8ddd566e220e003370696c  gcc/testsuite/gfortran.dg/namelist_48.f90
  9915c27f8789994659b2639ff2ecd7ae  gcc/testsuite/gfortran.dg/namelist_49.f90
  c55a3f1959ffd76433be0ad57f12b681  gcc/testsuite/gfortran.dg/namelist_5.f90
--- 118721,118734 ----
  23a7eba590f0e92297cfe998826840ea  gcc/testsuite/gfortran.dg/namelist_38.f90
  692c5f326734d09e4cc39080826d1bf5  gcc/testsuite/gfortran.dg/namelist_39.f90
  cf65f0ee124f55cc70d09e61931263f9  gcc/testsuite/gfortran.dg/namelist_4.f90
! 3921299cb4792a44f50aca800be7a477  gcc/testsuite/gfortran.dg/namelist_40.f90
  991c2beb9a4db0c3b864d7500049c6ea  gcc/testsuite/gfortran.dg/namelist_41.f90
  24af4bdf7b20059ba30b90301a3984f7  gcc/testsuite/gfortran.dg/namelist_42.f90
  5e7b167b9a0603fe9a01cd6368878ed2  gcc/testsuite/gfortran.dg/namelist_43.f90
  bef49328c049eb5d05139ee02a8dd4ea  gcc/testsuite/gfortran.dg/namelist_44.f90
  3323b03ab02322d6cafa6c30c26c25c5  gcc/testsuite/gfortran.dg/namelist_45.f90
  04714ed92ea63f10bc8f26d084d85ec1  gcc/testsuite/gfortran.dg/namelist_46.f90
! b91f22cdf037ea9212cb5f32a116212a  gcc/testsuite/gfortran.dg/namelist_47.f90
  4ab84b333c8ddd566e220e003370696c  gcc/testsuite/gfortran.dg/namelist_48.f90
  9915c27f8789994659b2639ff2ecd7ae  gcc/testsuite/gfortran.dg/namelist_49.f90
  c55a3f1959ffd76433be0ad57f12b681  gcc/testsuite/gfortran.dg/namelist_5.f90
*************** c6f893cb449a80625f83167f1ff5ba51  gcc/te
*** 118925,118931 ****
  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
  4747be1a3cc11eccca3b4eae7a5beaef  gcc/testsuite/gfortran.dg/pdt_79.f03
  e21f38a2db39f95405441b61c12cf1e6  gcc/testsuite/gfortran.dg/pdt_8.f03
--- 119089,119095 ----
  8d4993c59b25b275c9be746b415c88a7  gcc/testsuite/gfortran.dg/pdt_74.f03
  8ccbb94fe607aa377b82a359ac1d2ab7  gcc/testsuite/gfortran.dg/pdt_75.f03
  872e5a262b625630f6c8518c84192fe0  gcc/testsuite/gfortran.dg/pdt_76.f03
! 3623b8eed4455c77276ea9b37cb50625  gcc/testsuite/gfortran.dg/pdt_77.f03
  3d080e764a86b6c6b89cec537323af50  gcc/testsuite/gfortran.dg/pdt_78.f03
  4747be1a3cc11eccca3b4eae7a5beaef  gcc/testsuite/gfortran.dg/pdt_79.f03
  e21f38a2db39f95405441b61c12cf1e6  gcc/testsuite/gfortran.dg/pdt_8.f03
*************** a9bf4794f30ae634c052287a5ba2cdf1  gcc/te
*** 119038,119047 ****
  3869225f03fb5d001028059c121d9134  gcc/testsuite/gfortran.dg/power.f90
  11045741b4ed7c5c974c0263bda7d4e5  gcc/testsuite/gfortran.dg/power1.f90
  4481fbf7802bf5b9ef2d0c2cc5864d67  gcc/testsuite/gfortran.dg/power2.f90
  085c39a4166c2bb920ee3f8775d41bb5  gcc/testsuite/gfortran.dg/power_3.f90
  e56589659150235b708a1f6ca0f9b2fa  gcc/testsuite/gfortran.dg/power_4.f90
  c893cc6bcb01079435bb1e32e1ab471e  gcc/testsuite/gfortran.dg/power_5.f90
! a3ab8fbef738997039cfd45f350461a3  gcc/testsuite/gfortran.dg/power_6.f90
  77eca811eac1f80edb0f33c68ac0c4d3  gcc/testsuite/gfortran.dg/power_7.f90
  457d6bb30d331f4d3250628bdae53dc3  gcc/testsuite/gfortran.dg/power_8.f90
  e13b5dd50c332ea865cb6fabb5f79f29  gcc/testsuite/gfortran.dg/pr100154.f90
--- 119202,119212 ----
  3869225f03fb5d001028059c121d9134  gcc/testsuite/gfortran.dg/power.f90
  11045741b4ed7c5c974c0263bda7d4e5  gcc/testsuite/gfortran.dg/power1.f90
  4481fbf7802bf5b9ef2d0c2cc5864d67  gcc/testsuite/gfortran.dg/power2.f90
+ fa385920cb768c0970dee9beefd1110c  gcc/testsuite/gfortran.dg/power_10.f90
  085c39a4166c2bb920ee3f8775d41bb5  gcc/testsuite/gfortran.dg/power_3.f90
  e56589659150235b708a1f6ca0f9b2fa  gcc/testsuite/gfortran.dg/power_4.f90
  c893cc6bcb01079435bb1e32e1ab471e  gcc/testsuite/gfortran.dg/power_5.f90
! 3421ba7e55658c4f148b7a3b1d8f9310  gcc/testsuite/gfortran.dg/power_6.f90
  77eca811eac1f80edb0f33c68ac0c4d3  gcc/testsuite/gfortran.dg/power_7.f90
  457d6bb30d331f4d3250628bdae53dc3  gcc/testsuite/gfortran.dg/power_8.f90
  e13b5dd50c332ea865cb6fabb5f79f29  gcc/testsuite/gfortran.dg/pr100154.f90
*************** d832d83a7f0305ed5af20dce6be24b4b  gcc/te
*** 119234,119240 ****
  439f95a81137197be61b0747f76ecd0f  gcc/testsuite/gfortran.dg/pr114304.f90
  e91d746b0b9de2b6ed5529fb46921a0b  gcc/testsuite/gfortran.dg/pr114535d.f90
  60e9f03f051c282f39e48a14c058f5de  gcc/testsuite/gfortran.dg/pr114535iv.f90
- c24606560078085a8a9e3258e51d24e3  gcc/testsuite/gfortran.dg/pr114618.f90
  d3d77a4c149cf5358eb97935171795fb  gcc/testsuite/gfortran.dg/pr114739.f90
  f62b2fa65f325ecd9897d1210ea1dd59  gcc/testsuite/gfortran.dg/pr114874_1.f90
  c2c29ab4a03f3fce7c592346c758df55  gcc/testsuite/gfortran.dg/pr114874_2.f90
--- 119399,119404 ----
*************** fd6ab0a5e316e2999bc498f35a3c0877  gcc/te
*** 120700,120705 ****
--- 120864,120870 ----
  652809f8153234254b8b67a7efca979e  gcc/testsuite/gfortran.dg/select_type_5.f03
  c49dfaa1a2a6089d06b0254006e229bf  gcc/testsuite/gfortran.dg/select_type_50.f90
  a8352826e9f0fa4c72ba19289828641b  gcc/testsuite/gfortran.dg/select_type_51.f90
+ 998ae53975614b40f9335fc9cb61c005  gcc/testsuite/gfortran.dg/select_type_53.f90
  d4874fed6108821dfa28ab998af7855a  gcc/testsuite/gfortran.dg/select_type_6.f03
  3acc63d3709ace8561c2455ee8125fbc  gcc/testsuite/gfortran.dg/select_type_7.f03
  701c50cf2ae8ae92625bdf57c4ff5f6f  gcc/testsuite/gfortran.dg/select_type_8.f03
*************** cb57540320d67acb41e7efaa7ba125d0  gcc/te
*** 121610,121615 ****
--- 121775,121781 ----
  56a3a5f8ff51a24ce353221e7324130b  gcc/testsuite/gfortran.dg/warn_undefined_vars_3.f90
  15546f4c6b4226c2e0d73ba60c0a5549  gcc/testsuite/gfortran.dg/warn_undefined_vars_4.f90
  0018d0733d18a0f47c6da784c3973fb6  gcc/testsuite/gfortran.dg/warn_unused_but_set_1.f90
+ 822b5613939ca362acee8780262f85b3  gcc/testsuite/gfortran.dg/warn_unused_but_set_error_1.f90
  c259ba3b6590fa830ea50bba33344f9a  gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_2.f90
  6a3b31dd7967f719de6ae9da27ef1896  gcc/testsuite/gfortran.dg/warn_unused_but_set_variable_3.f90
  faef1baec47674d096569b4803422d64  gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_1.f90
*************** a889821a76a43cd0bc42032f92d62143  gcc/te
*** 121622,121627 ****
--- 121788,121794 ----
  c9497af1ed4f39ba98f09ab4c4e7e8d0  gcc/testsuite/gfortran.dg/warn_unused_function_2.f90
  ae95981491a9741922c27b078d9a628c  gcc/testsuite/gfortran.dg/warn_unused_function_3.f90
  3e4e1b8a24e475de2f532a9df7dded54  gcc/testsuite/gfortran.dg/warn_unused_intent_out_1.f90
+ 7cacdf2e2980eb5ff6f7988520e67f0a  gcc/testsuite/gfortran.dg/warn_unused_intent_out_2.f90
  6a41a4c6045eb6b079fc564cc6de3190  gcc/testsuite/gfortran.dg/warn_unused_read_1.f90
  025932868233d92449d247c6dacf72a1  gcc/testsuite/gfortran.dg/warn_unused_var.f90
  505984a29bdb4c6918091f5ecf8088e8  gcc/testsuite/gfortran.dg/warn_unused_var_2.f90
*************** cc0ad95b0f3d6b4ef54e287b438acb10  gcc/te
*** 129268,129274 ****
  327125e0f9770fa0fdc3ed8f820c8fb2  gcc/testsuite/lib/options.exp
  4837951677485b41199b6215388f44c4  gcc/testsuite/lib/plugin-support.exp
  0b47cfd7dff343f4c4e9785998f240c7  gcc/testsuite/lib/print-stack.exp
! 82be545bb9c2d70a74bf4eb4d5a8ecb8  gcc/testsuite/lib/profopt.exp
  4ef74e524e3ef5f3dec8824220faea8a  gcc/testsuite/lib/prune.exp
  52ac0ffa39ac607ccf00f72889b6058a  gcc/testsuite/lib/rust-dg.exp
  d84a04f02b348b9b24a659413d60a25b  gcc/testsuite/lib/rust.exp
--- 129435,129441 ----
  327125e0f9770fa0fdc3ed8f820c8fb2  gcc/testsuite/lib/options.exp
  4837951677485b41199b6215388f44c4  gcc/testsuite/lib/plugin-support.exp
  0b47cfd7dff343f4c4e9785998f240c7  gcc/testsuite/lib/print-stack.exp
! 11bc3c94d1410de260592b2ecddf37dc  gcc/testsuite/lib/profopt.exp
  4ef74e524e3ef5f3dec8824220faea8a  gcc/testsuite/lib/prune.exp
  52ac0ffa39ac607ccf00f72889b6058a  gcc/testsuite/lib/rust-dg.exp
  d84a04f02b348b9b24a659413d60a25b  gcc/testsuite/lib/rust.exp
*************** de9eeadec9703aff96169206e31a3a22  gcc/te
*** 129293,129299 ****
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! 31f13b67afd050b5b9bb06ec7c98bc03  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
--- 129460,129466 ----
  275f7eb9618e6b097a58c1fba25cdb9c  gcc/testsuite/lib/scanwpaipa.exp
  9bc4cbcf0cb4f1aa30a8cf3142d157eb  gcc/testsuite/lib/target-libpath.exp
  6f6a566231f79b409eb113cf2e7f5132  gcc/testsuite/lib/target-supports-dg.exp
! a2a82ddbb4e3a5c8e4e622b4faec14a2  gcc/testsuite/lib/target-supports.exp
  b1eb2edcf4941bfb00c200eb000a0a7b  gcc/testsuite/lib/target-utils.exp
  98b890f6c455deafd6ca241993fc5d67  gcc/testsuite/lib/timeout-dg.exp
  0afb0c69501fa44908d13017be208db3  gcc/testsuite/lib/timeout.exp
*************** bef0b63cc1001918d661e9e13db5ef66  gcc/te
*** 130390,130396 ****
  b844641ffa836259966da8bbdb705602  gcc/testsuite/rust/compile/arrays2.rs
  293314113a4ba4b608178368155ed2fa  gcc/testsuite/rust/compile/assert_missing_panic.rs
  0e211ddb899f5f3123a498cfad360aa2  gcc/testsuite/rust/compile/assume.rs
! 1eefc880259227fbe7000d396bfa5565  gcc/testsuite/rust/compile/attr-macro.rs
  86f36986db04879d961e8610ff5743b5  gcc/testsuite/rust/compile/attr-mismatch-crate-name.rs
  4a8cb1f4a8775d0891e89dad8e64f191  gcc/testsuite/rust/compile/attr_cold.rs
  e5ed37869d42b1e44616a14c50faa71b  gcc/testsuite/rust/compile/attr_deprecated.rs
--- 130557,130565 ----
  b844641ffa836259966da8bbdb705602  gcc/testsuite/rust/compile/arrays2.rs
  293314113a4ba4b608178368155ed2fa  gcc/testsuite/rust/compile/assert_missing_panic.rs
  0e211ddb899f5f3123a498cfad360aa2  gcc/testsuite/rust/compile/assume.rs
! 6073012d58901a9b4fa93a8cc3ab6efb  gcc/testsuite/rust/compile/attr-allocator1.rs
! 328554ef224af71babac5a995a70182e  gcc/testsuite/rust/compile/attr-allocator2.rs
! de5ff52a7faa943ce9c97ac64ba795c2  gcc/testsuite/rust/compile/attr-allocator3.rs
  86f36986db04879d961e8610ff5743b5  gcc/testsuite/rust/compile/attr-mismatch-crate-name.rs
  4a8cb1f4a8775d0891e89dad8e64f191  gcc/testsuite/rust/compile/attr_cold.rs
  e5ed37869d42b1e44616a14c50faa71b  gcc/testsuite/rust/compile/attr_deprecated.rs
*************** a76f341ccd5fefbbc01a53f44e7feaf2  gcc/te
*** 130498,130507 ****
  25eb2b47069bab5628a45c28451d0425  gcc/testsuite/rust/compile/const_trait_fn.rs
  6721281195cc56cd12e84384cd45cd14  gcc/testsuite/rust/compile/continue1.rs
  3370848ae37e0693aa39989f2c545c89  gcc/testsuite/rust/compile/crate-metavar1.rs
! b510d87d13fab162e1a275914ee681e4  gcc/testsuite/rust/compile/ctlz.rs
! 39d2b1d47d794da7478d0ecd91625f6e  gcc/testsuite/rust/compile/ctlz_nonzero.rs
! 0508792255106678deb4e026eff1c7e9  gcc/testsuite/rust/compile/cttz.rs
! 9e91f83282433dae17447ab85d62c19b  gcc/testsuite/rust/compile/cttz_nonzero.rs
  0e35180eb3f40915dc324e9d5517c1aa  gcc/testsuite/rust/compile/deadcode_err1.rs
  274c5bccf4091c298f8b3bcb0001befb  gcc/testsuite/rust/compile/deadcode_err2.rs
  938e724daf0b9c0267c67985ebfc93e8  gcc/testsuite/rust/compile/debug-diagnostics-default.rs
--- 130667,130676 ----
  25eb2b47069bab5628a45c28451d0425  gcc/testsuite/rust/compile/const_trait_fn.rs
  6721281195cc56cd12e84384cd45cd14  gcc/testsuite/rust/compile/continue1.rs
  3370848ae37e0693aa39989f2c545c89  gcc/testsuite/rust/compile/crate-metavar1.rs
! e807b4ccce56ea32a587b0a497e544a7  gcc/testsuite/rust/compile/ctlz.rs
! a3a299c44f5b9d73a5d5975e77f10d2b  gcc/testsuite/rust/compile/ctlz_nonzero.rs
! 9e349f980fc4c8a59365f50a0f7c37e2  gcc/testsuite/rust/compile/cttz.rs
! c33f9054c0e6cb996f8d54b94d48f9f0  gcc/testsuite/rust/compile/cttz_nonzero.rs
  0e35180eb3f40915dc324e9d5517c1aa  gcc/testsuite/rust/compile/deadcode_err1.rs
  274c5bccf4091c298f8b3bcb0001befb  gcc/testsuite/rust/compile/deadcode_err2.rs
  938e724daf0b9c0267c67985ebfc93e8  gcc/testsuite/rust/compile/debug-diagnostics-default.rs
*************** b9d63212cced17f6d52eb1b38435a8bc  gcc/te
*** 130541,130546 ****
--- 130710,130716 ----
  325f757f357f27fb55dacdaed8f24d6a  gcc/testsuite/rust/compile/doc_isolated_cr_line_comment.rs
  ead4df48e55f0f1f47527f8f29ed0ce4  gcc/testsuite/rust/compile/doc_macro.rs
  7b6ea58d42bad3b93ea13f14c2afc6e3  gcc/testsuite/rust/compile/drop-lang-item.rs
+ 49ba6ca039aa82ba1b4411386fe834f8  gcc/testsuite/rust/compile/drop-ref-pattern.rs
  ffccd19a7721d4e438526bc94d785560  gcc/testsuite/rust/compile/dropck_eyepatch_feature_gate.rs
  95d3e14a4c9c5b1fb5d1171f270642c7  gcc/testsuite/rust/compile/dup_fields.rs
  7d596256980e172cd54a08f34b7f7d48  gcc/testsuite/rust/compile/e0579-neg-float-fail.rs
*************** d7a19aa4ebfd5e24ab46829e8f056008  gcc/te
*** 130557,130562 ****
--- 130727,130733 ----
  a9e08c5d4009f77dffa67287a47e44c3  gcc/testsuite/rust/compile/enum_discriminant3.rs
  2a334ae2f153c70fc2c5b473c90b308c  gcc/testsuite/rust/compile/enum_variant_name.rs
  3a4043be7e667b71b7a1bd1e36a7a4d9  gcc/testsuite/rust/compile/evaluate-integer-or-float.rs
+ e803915bea520428618dd603dff11537  gcc/testsuite/rust/compile/exchange_malloc.rs
  8c264b62a9fcd868449f37332b134faf  gcc/testsuite/rust/compile/exclusive_range_pattern.rs
  a017a785b809075c624123c7c3f19848  gcc/testsuite/rust/compile/exclusive_range_pattern_feature_gate.rs
  d258c7c2d32f482d26eaddf68e107dc3  gcc/testsuite/rust/compile/exhaustiveness1.rs
*************** a8ab705d8a097bd51f3c2fa613b47d3c  gcc/te
*** 130567,130572 ****
--- 130738,130744 ----
  9735fadad7994906bb560e8e972c9544  gcc/testsuite/rust/compile/expected_type_args3.rs
  ff861694aaea8ab14602138adc67cd02  gcc/testsuite/rust/compile/export_name.rs
  b10da56b6e89371d06c1988c0e96cc37  gcc/testsuite/rust/compile/extern_c_named_variadic.rs
+ bf51d21126f21158feb58d2e39d9964f  gcc/testsuite/rust/compile/extern_crate_self.rs
  c0c927e1e2fc08f64af016ff1735ec11  gcc/testsuite/rust/compile/extern_func_with_body.rs
  27c08735f7bfba0879e8283cfc0d74a7  gcc/testsuite/rust/compile/extern_generics.rs
  4ed707186663ac827fa0e62cd8979042  gcc/testsuite/rust/compile/extern_type_item.rs
*************** e364c68fafebd1608e50787d90c6b3e6  gcc/te
*** 130576,130581 ****
--- 130748,130754 ----
  291933df6286b5d2289e0120718719ab  gcc/testsuite/rust/compile/feature_intrinsics.rs
  6f9e00ba38fde78d12dfe07c558689d8  gcc/testsuite/rust/compile/feature_rust_attri0.rs
  afa033c1c4fe2a31381283d6e822cbaa  gcc/testsuite/rust/compile/feature_rust_attri1.rs
+ 2997d00c8bc560b725f868bc777be2a1  gcc/testsuite/rust/compile/float_literals.rs
  5c079fa99106c412becfa756d5d5973d  gcc/testsuite/rust/compile/for-loop1.rs
  59ff350085e259f0850f2b29cc652056  gcc/testsuite/rust/compile/for-loop2.rs
  867005dd9a2dc5871d483b69f5d191c4  gcc/testsuite/rust/compile/for_expr.rs
*************** f393b26051ebd301bb886eda0461df73  gcc/te
*** 130627,130632 ****
--- 130800,130807 ----
  23fcb730f99021360c9d28c0834ee4b8  gcc/testsuite/rust/compile/implicit_returns_err2.rs
  93acc9517ab5363a7655d5b50a4cbf16  gcc/testsuite/rust/compile/implicit_returns_err3.rs
  43a87c9f6f27b1568e8066968e276b5c  gcc/testsuite/rust/compile/implicit_returns_err4.rs
+ 26f1c67e736b8c314bcc23078f46c247  gcc/testsuite/rust/compile/import_in_type_ns6.rs
+ 52f285714eca095288796fb0f93c8931  gcc/testsuite/rust/compile/import_in_type_ns7.rs
  066821e5180beb0aa6b4c8caf1016d2e  gcc/testsuite/rust/compile/import_wildcards.rs
  6e9d06bd7806b627386fd989566d2414  gcc/testsuite/rust/compile/include_empty.rs
  1b40abdd095a8e3abae8a1adea4ddb31  gcc/testsuite/rust/compile/infer-crate-name.rs
*************** a2c833385a2666d37e47be020f020e83  gcc/te
*** 130643,130648 ****
--- 130818,130824 ----
  e2c94590ac101390289fd84ba50f0e32  gcc/testsuite/rust/compile/inline_asm_parse_operand.rs
  9600f1c64f2d09e5d69e42eeb33f7cf8  gcc/testsuite/rust/compile/inline_asm_parse_output_operand.rs
  9707ab68deb18971d4011357c81c9c2b  gcc/testsuite/rust/compile/inline_asm_typecheck.rs
+ 256140bc646e03cc1b7279995055a5dc  gcc/testsuite/rust/compile/intrinsic-checker.rs
  6726c10633de16483b712accccd9a283  gcc/testsuite/rust/compile/invalid_label_name.rs
  259d523cf59af0ab7affa0b5224952ee  gcc/testsuite/rust/compile/invalid_variadics.rs
  b5ce6a25e409a2368920d8a11afafaac  gcc/testsuite/rust/compile/issue-1005.rs
*************** b71d5ff0a38e7a4230824523da226d1d  gcc/te
*** 130946,130952 ****
  510c1b618e30d63f72b351215369f234  gcc/testsuite/rust/compile/issue-4234.rs
  b3cddeca15a7d211fd0486a280dab02d  gcc/testsuite/rust/compile/issue-4235.rs
  0fc139bb6420f85c20c7573edd960813  gcc/testsuite/rust/compile/issue-4242.rs
! c7807406080caf33438776b26ccc98de  gcc/testsuite/rust/compile/issue-4245.rs
  d3c25032b8e53cce6c34fafb5c355bda  gcc/testsuite/rust/compile/issue-4260_0.rs
  8535ad42022800c7f590dae363f7402d  gcc/testsuite/rust/compile/issue-4261.rs
  4cca37aaba46ad2ca34e404507b2536a  gcc/testsuite/rust/compile/issue-4262.rs
--- 131122,131128 ----
  510c1b618e30d63f72b351215369f234  gcc/testsuite/rust/compile/issue-4234.rs
  b3cddeca15a7d211fd0486a280dab02d  gcc/testsuite/rust/compile/issue-4235.rs
  0fc139bb6420f85c20c7573edd960813  gcc/testsuite/rust/compile/issue-4242.rs
! b7e9ffa4b007aee5c7a65d22ec62ffef  gcc/testsuite/rust/compile/issue-4245.rs
  d3c25032b8e53cce6c34fafb5c355bda  gcc/testsuite/rust/compile/issue-4260_0.rs
  8535ad42022800c7f590dae363f7402d  gcc/testsuite/rust/compile/issue-4261.rs
  4cca37aaba46ad2ca34e404507b2536a  gcc/testsuite/rust/compile/issue-4262.rs
*************** b9dece72b980e6878e0b9c8f92233dad  gcc/te
*** 130965,130970 ****
--- 131141,131147 ----
  7835d03556e24617123ceaf32f087c93  gcc/testsuite/rust/compile/issue-4414.rs
  a54fd203759501635c8dded722e53305  gcc/testsuite/rust/compile/issue-4433.rs
  056ded6ab1597de901b0442358e37ff4  gcc/testsuite/rust/compile/issue-4517.rs
+ a8bb81b5dff32585332ab4a069ec39ec  gcc/testsuite/rust/compile/issue-4563.rs
  a814a3e2cad8eccf8272598f00384a38  gcc/testsuite/rust/compile/issue-557.rs
  93b8051018ad8ff1a45c001b33db9697  gcc/testsuite/rust/compile/issue-635-1.rs
  45b28bac74e6ab3db3594e805656e836  gcc/testsuite/rust/compile/issue-635-2.rs
*************** b8a7c530f7860fb135cbe960165b1cdf  gcc/te
*** 131089,131094 ****
--- 131266,131272 ----
  9eb1a540ede29562cb8b9d85e810cc32  gcc/testsuite/rust/compile/macros/mbe/macro7.rs
  cb74349555219f2c7d6160714b93a6bd  gcc/testsuite/rust/compile/macros/mbe/macro8.rs
  09c76bdc36d100c6bdcea97014611fe3  gcc/testsuite/rust/compile/macros/mbe/macro9.rs
+ 1eefc880259227fbe7000d396bfa5565  gcc/testsuite/rust/compile/macros/mbe/macro_attr_expr.rs
  6f3cda4608059ed4a910ae7bfcff33b6  gcc/testsuite/rust/compile/macros/mbe/macro_call_statement.rs
  88c4ff418a5c49ee6e471dc6bfc43ac3  gcc/testsuite/rust/compile/macros/mbe/macro_export_1.rs
  2fe34921fe2f009319438bae53a516ff  gcc/testsuite/rust/compile/macros/mbe/macro_return.rs
*************** e05003672155738b42ff0078b90b057c  gcc/te
*** 131154,131159 ****
--- 131332,131339 ----
  b156f9fdfb8912df64086e4f8eb959dd  gcc/testsuite/rust/compile/missing_constructor_fields.rs
  9b6e3f6b3dd4d34b65d0488caa8b8def  gcc/testsuite/rust/compile/missing_return1.rs
  337e1df3e5e3bd1d3dec508b4c0e9f19  gcc/testsuite/rust/compile/missing_staged_api.rs
+ 252334e0a003c0ee968d809b285017b8  gcc/testsuite/rust/compile/mod_in_types_ns.rs
+ b475e7091045925799a3784871b15c8b  gcc/testsuite/rust/compile/mod_in_types_ns2.rs
  69ce5ca8d9cd89167d372f1e02f637fa  gcc/testsuite/rust/compile/mod_missing_middle.rs
  8be74e65315656ba49991eeddb4db9df  gcc/testsuite/rust/compile/mod_missing_middle/missing_middle/both_path.rs
  c77634f91d8ff73375a4fd3937c763c7  gcc/testsuite/rust/compile/mod_missing_middle/missing_middle/explicit.not.rs
*************** acbfdf43d45e9b359ffe6452e728ce3e  gcc/te
*** 131184,131189 ****
--- 131364,131371 ----
  6715795bac2540387c9db9c2c23156ab  gcc/testsuite/rust/compile/name_resolution24.rs
  cefb9b77daaccd73b370186f4ee71449  gcc/testsuite/rust/compile/name_resolution25.rs
  f2d88fe8252f01af4730abafad1310e1  gcc/testsuite/rust/compile/name_resolution26.rs
+ 7b120070e1b191592129c6417fe9c4f4  gcc/testsuite/rust/compile/name_resolution27.rs
+ a6cf1be2582306a7f743bd784523e5c4  gcc/testsuite/rust/compile/name_resolution28.rs
  5f38daf97ae6c4790bacbccb0704c14b  gcc/testsuite/rust/compile/name_resolution3.rs
  bfbd3d4e88343eb9eb20e7216d26b6e9  gcc/testsuite/rust/compile/name_resolution4.rs
  58d0e429429b9438c856e08d1f54c2ac  gcc/testsuite/rust/compile/name_resolution5.rs
*************** c72552190a0a381dbcb7bab442fa77be  gcc/te
*** 131275,131280 ****
--- 131457,131464 ----
  52d16f29dbd1ca8921fdc064b00537f4  gcc/testsuite/rust/compile/rustc_attr1.rs
  bf62b7606c00db6b184c45b231db1408  gcc/testsuite/rust/compile/rustc_const_stable.rs
  4b559d8796e89809f073fb08909aee03  gcc/testsuite/rust/compile/rustc_const_unstable.rs
+ d6f87ddfc49892e3748ea29ff4be3035  gcc/testsuite/rust/compile/rustc_std_internal_symbol1.rs
+ 585f8b0d1365c474bfc9c5bcc0afa82e  gcc/testsuite/rust/compile/rustc_std_internal_symbol2.rs
  a66752fffa3bdfeb59eada30f50ce317  gcc/testsuite/rust/compile/same_field_name.rs
  29393f315ab90f0cc70a576074df16c6  gcc/testsuite/rust/compile/self-in-impl.rs
  44c330cfcee096e2ec499783947d7d76  gcc/testsuite/rust/compile/self-path1.rs
*************** f05f38a075c38b9b6ab4d903a30ee7c8  gcc/te
*** 131435,131441 ****
  a724c68c3ccf3f22e9cd7832abf66249  gcc/testsuite/rust/compile/torture/integer_inference_var5.rs
  b50cb749da23fbae22b68db3f6aab2ad  gcc/testsuite/rust/compile/torture/integer_types.rs
  d6a70b203e21498fa0449bb3e2be4762  gcc/testsuite/rust/compile/torture/intrinsics-2.rs
! 08e73f4fc48b464f67bb3181d1e24cf3  gcc/testsuite/rust/compile/torture/intrinsics-3.rs
  97b3db8374f4d7454d3a6edac75ff171  gcc/testsuite/rust/compile/torture/intrinsics-4.rs
  4c5d250f5eeb92bef29aca3506c09fb0  gcc/testsuite/rust/compile/torture/intrinsics-5.rs
  10959ef262885359c19cc59bde35de55  gcc/testsuite/rust/compile/torture/intrinsics-6.rs
--- 131619,131625 ----
  a724c68c3ccf3f22e9cd7832abf66249  gcc/testsuite/rust/compile/torture/integer_inference_var5.rs
  b50cb749da23fbae22b68db3f6aab2ad  gcc/testsuite/rust/compile/torture/integer_types.rs
  d6a70b203e21498fa0449bb3e2be4762  gcc/testsuite/rust/compile/torture/intrinsics-2.rs
! 99f83fec0977f94731ea1a18bfe4c15c  gcc/testsuite/rust/compile/torture/intrinsics-3.rs
  97b3db8374f4d7454d3a6edac75ff171  gcc/testsuite/rust/compile/torture/intrinsics-4.rs
  4c5d250f5eeb92bef29aca3506c09fb0  gcc/testsuite/rust/compile/torture/intrinsics-5.rs
  10959ef262885359c19cc59bde35de55  gcc/testsuite/rust/compile/torture/intrinsics-6.rs
*************** d504161e24b666b868502d7722093a4e  gcc/te
*** 131589,131595 ****
  5452bcc0d79dc9a5af71e6cea63217a5  gcc/testsuite/rust/compile/torture/unused_struct.rs
  30fd1951699396b20950f7b1f31df2f8  gcc/testsuite/rust/compile/torture/unused_struct_field.rs
  dc9acb603012ddac5d874429661fc2e2  gcc/testsuite/rust/compile/torture/usize1.rs
! 830d8ae3a38ff12ca2b69005f1ca32bc  gcc/testsuite/rust/compile/torture/utf8_identifiers.rs
  e98ca06b6f306b6bea9cad6e55bfee64  gcc/testsuite/rust/compile/torture/utf8_whitespaces.rs
  086c8f2639392f24c1a8d60145c15f47  gcc/testsuite/rust/compile/torture/very-broken-attr-string.rs
  68568050ab105f2110e2c3261c95f20e  gcc/testsuite/rust/compile/torture/while_function.rs
--- 131773,131779 ----
  5452bcc0d79dc9a5af71e6cea63217a5  gcc/testsuite/rust/compile/torture/unused_struct.rs
  30fd1951699396b20950f7b1f31df2f8  gcc/testsuite/rust/compile/torture/unused_struct_field.rs
  dc9acb603012ddac5d874429661fc2e2  gcc/testsuite/rust/compile/torture/usize1.rs
! 9d0c514b6a6f802d4dd073eaf80bc4c0  gcc/testsuite/rust/compile/torture/utf8_identifiers.rs
  e98ca06b6f306b6bea9cad6e55bfee64  gcc/testsuite/rust/compile/torture/utf8_whitespaces.rs
  086c8f2639392f24c1a8d60145c15f47  gcc/testsuite/rust/compile/torture/very-broken-attr-string.rs
  68568050ab105f2110e2c3261c95f20e  gcc/testsuite/rust/compile/torture/while_function.rs
*************** f1d5123657fc6159987adfc10e9a51c7  gcc/te
*** 131629,131634 ****
--- 131813,131819 ----
  327b2855c73d318f1913d9235779d72f  gcc/testsuite/rust/compile/type-alias1.rs
  71c01ad03e2210d0247966a67c80e9e2  gcc/testsuite/rust/compile/type-bindings1.rs
  34935eb9cc883ddde614fb5d934f9978  gcc/testsuite/rust/compile/type-if.rs
+ da419c5ff7ab8035a1ac612cde004e3e  gcc/testsuite/rust/compile/type-with-builtin-type-name.rs
  5233de51e85c1ea27dac1fd33890a341  gcc/testsuite/rust/compile/unary_negation.rs
  93a97c2adba4b75a9fc175526d4ca9fd  gcc/testsuite/rust/compile/unary_not.rs
  54d4817692ffd0fc8a3351312e608067  gcc/testsuite/rust/compile/unconstrained_type_param.rs
*************** c7800d2a071ca2035e1e11d541d30282  gcc/te
*** 131695,131706 ****
--- 131880,131895 ----
  88b00a09a41ef0fed7704188b89d3129  gcc/testsuite/rust/execute/cf-labeled-block.rs
  a56f460658cfa395fe3344ba68ff230f  gcc/testsuite/rust/execute/const-compound-assignment.rs
  4f364d5e8f1e982f8dd260d4e285ddcb  gcc/testsuite/rust/execute/crate-metavar1.rs
+ 09e4d03dc32179648d3c7480dd71e0d7  gcc/testsuite/rust/execute/drop-block-scope.rs
+ f19541fd953f46622ca16f7d6f82229b  gcc/testsuite/rust/execute/drop-function-scope-unit.rs
+ 973f188ba37707e9a470abc5050ff6d2  gcc/testsuite/rust/execute/drop-function-scope.rs
  ee134a130743701047cd96c1fbf6fd01  gcc/testsuite/rust/execute/execute.exp
  5fce9179d59f0126f11a1db088901e50  gcc/testsuite/rust/execute/ident_pat_vs_path_1.rs
  1367735cf0c407f6eac379c6d157ffc4  gcc/testsuite/rust/execute/ident_pat_vs_path_2.rs
  ee23f2ac9014108d621746737e1803e4  gcc/testsuite/rust/execute/inline_asm_inout_ident.rs
  662f5147acc82b839a44e77df01fd782  gcc/testsuite/rust/execute/inline_asm_inout_var.rs
  ea3394a2e4f70b56cff9533b77626b80  gcc/testsuite/rust/execute/issue-1245.rs
+ a7f7c83e1714c01e9cc8437236496baa  gcc/testsuite/rust/execute/min_align_of.rs
  b3889753c0ac11385836b9891bb934cc  gcc/testsuite/rust/execute/non_decimal_128_saturation.rs
  b4a0564525cb409452c76182233b23f4  gcc/testsuite/rust/execute/torture/arrays.rs
  f4ad97f462282641b0be461bfd9da9b1  gcc/testsuite/rust/execute/torture/atomic_load.rs
*************** cf3c2e8a32e22bb5a54cc44916eb077d  gcc/te
*** 131743,131768 ****
  bb0ddd95fe3f5578010121054958e8a8  gcc/testsuite/rust/execute/torture/const_fold1.rs
  a1b8764cdc045929458a55830e126e25  gcc/testsuite/rust/execute/torture/const_fold2.rs
  2277be44f1f68c546656f52331e90beb  gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
! 9766b5fa120ab49cda38ffc3f8e7a231  gcc/testsuite/rust/execute/torture/ctlz.rs
! 685e3562b098593b02de96cf9a355cd6  gcc/testsuite/rust/execute/torture/ctlz_i16.rs
! babd446aea8010bd566b850cbab2505b  gcc/testsuite/rust/execute/torture/ctlz_i32.rs
! 55d0ff37159e9bc6152b3aa5e8e1039c  gcc/testsuite/rust/execute/torture/ctlz_i64.rs
! b2872fc701199a9484c994ea5a91a0c3  gcc/testsuite/rust/execute/torture/ctlz_i8.rs
! d427748f217d630770a7a19a94944d61  gcc/testsuite/rust/execute/torture/ctlz_nonzero.rs
! 3e32afdbded0dea9157d7c13bd2fc446  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
! 47e6d6388278dfb395e261a86e0be84e  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
! f32255c0aa43cab4389f955105094f49  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
! 582c0f7938354d21d470a4d0171ebcdf  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
! 9191c7c08cf926beb35467b8a071de7f  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
! 22d44dd14c0c9e64a4a2f5673f68505c  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
! 0d926e19a86fa64a32d079c6f3c7ff24  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
! a8b0cff976a2e7f6d2bc12d7860d2ff5  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
! f7d5ea174bf2692bfe0c356284f01909  gcc/testsuite/rust/execute/torture/ctlz_u16.rs
! b0739150c5d47224d9e044df513c335b  gcc/testsuite/rust/execute/torture/ctlz_u32.rs
! b2c045bab04a20f38ceaefbaee9d2dda  gcc/testsuite/rust/execute/torture/ctlz_u64.rs
! d9c190b35c4328c5c284d28f10d3e92b  gcc/testsuite/rust/execute/torture/ctlz_u8.rs
! a76dcf54c8d2c3bea6e7e3e4d503465b  gcc/testsuite/rust/execute/torture/cttz.rs
! b49feec62709f6ce8cef5fac7dd8aaae  gcc/testsuite/rust/execute/torture/cttz_nonzero.rs
  821982e815686e67dc21eea14b062c29  gcc/testsuite/rust/execute/torture/decl_macro1.rs
  98ab35fa6fcae6b653dfc8410b57b655  gcc/testsuite/rust/execute/torture/decl_macro2.rs
  b87b7afb7bf91fb0988c4dd50750d625  gcc/testsuite/rust/execute/torture/decl_macro3.rs
--- 131932,131957 ----
  bb0ddd95fe3f5578010121054958e8a8  gcc/testsuite/rust/execute/torture/const_fold1.rs
  a1b8764cdc045929458a55830e126e25  gcc/testsuite/rust/execute/torture/const_fold2.rs
  2277be44f1f68c546656f52331e90beb  gcc/testsuite/rust/execute/torture/copy_nonoverlapping1.rs
! 96a524065792262995b99659469b0b49  gcc/testsuite/rust/execute/torture/ctlz.rs
! 9caa0dfa900f252b0757062baa8516a5  gcc/testsuite/rust/execute/torture/ctlz_i16.rs
! 2c7c2eff7b5e92fd7ab04176cef52c3e  gcc/testsuite/rust/execute/torture/ctlz_i32.rs
! 7d1680a6f77e3b972aae682d775f2fd1  gcc/testsuite/rust/execute/torture/ctlz_i64.rs
! a300062c598d1598bff596e4c25477cc  gcc/testsuite/rust/execute/torture/ctlz_i8.rs
! e195559ecdf85563b392f2c43cf5322c  gcc/testsuite/rust/execute/torture/ctlz_nonzero.rs
! a00fa465a525143d5caf76e435f42c93  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
! 2171687783bb75471094dfa55c051e90  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
! c20d712e1263691142e3075698fd25f4  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
! e8ee0af30940be31bc958244410be76c  gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
! 74e1840cb3ea3c1396e3cc018071588b  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
! 27945fab9e90e6ece884332c3845b823  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
! 8bc3903fb3a0f2b06c80192d68c164ee  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
! 6835980f5cb8ee75631ca301d6d94751  gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
! afe3df0a95d0bdfc57023dccc3f35e22  gcc/testsuite/rust/execute/torture/ctlz_u16.rs
! 8c6a3badbe43d063a0f5426891ef97dd  gcc/testsuite/rust/execute/torture/ctlz_u32.rs
! 435cd8b7cedfb62e9f7efaaabd369369  gcc/testsuite/rust/execute/torture/ctlz_u64.rs
! e5f63bd3c1577af5c7335fc39eee3f54  gcc/testsuite/rust/execute/torture/ctlz_u8.rs
! f35744ea14be82262c193968e1458058  gcc/testsuite/rust/execute/torture/cttz.rs
! da783b59052ada239db04bc5f9292c53  gcc/testsuite/rust/execute/torture/cttz_nonzero.rs
  821982e815686e67dc21eea14b062c29  gcc/testsuite/rust/execute/torture/decl_macro1.rs
  98ab35fa6fcae6b653dfc8410b57b655  gcc/testsuite/rust/execute/torture/decl_macro2.rs
  b87b7afb7bf91fb0988c4dd50750d625  gcc/testsuite/rust/execute/torture/decl_macro3.rs
*************** a0c02d542dbd50cb44704b2ffce2739c  gcc/tr
*** 132094,132100 ****
  f52407e888b9f0b3706e16b105f0ee56  gcc/tree-chrec.cc
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
  f6230fc0d600174a276b14cbea9f0e37  gcc/tree-complex.cc
! d3ccd3304fc182827fc9b36850d97224  gcc/tree-core.h
  872c20fe2fd8d662c991f9f0b4ddaaef  gcc/tree-data-ref.cc
  8a41e760788789609c052d419c155691  gcc/tree-data-ref.h
  89ef786b9c4639015bae3652c90fa60f  gcc/tree-dfa.cc
--- 132283,132289 ----
  f52407e888b9f0b3706e16b105f0ee56  gcc/tree-chrec.cc
  1cf760e3e7aab6f94a5e56897486623d  gcc/tree-chrec.h
  f6230fc0d600174a276b14cbea9f0e37  gcc/tree-complex.cc
! 891f03cd6411a8a239edcf6e6789611f  gcc/tree-core.h
  872c20fe2fd8d662c991f9f0b4ddaaef  gcc/tree-data-ref.cc
  8a41e760788789609c052d419c155691  gcc/tree-data-ref.h
  89ef786b9c4639015bae3652c90fa60f  gcc/tree-dfa.cc
*************** d7c0da59494a51ae966d29f4618b2f9a  gcc/tr
*** 132113,132119 ****
  f8be97e59befb22cc3869e742a095cca  gcc/tree-hasher.h
  cdd5b6e337c42a25898e156aa6966042  gcc/tree-if-conv.cc
  87f110e202a07bb1d7e6402808531851  gcc/tree-if-conv.h
! abcba2a22e072da7c4ef537475cdefef  gcc/tree-inline.cc
  8e4dac1ee5fbcab0629042db2f9ece45  gcc/tree-inline.h
  a5cbab6e62ef515070f1e584b679c35c  gcc/tree-into-ssa.cc
  72f7e515faeeb8223adbdd63816cd07d  gcc/tree-into-ssa.h
--- 132302,132308 ----
  f8be97e59befb22cc3869e742a095cca  gcc/tree-hasher.h
  cdd5b6e337c42a25898e156aa6966042  gcc/tree-if-conv.cc
  87f110e202a07bb1d7e6402808531851  gcc/tree-if-conv.h
! a732d62d3abbd72dc1de3342a12fd876  gcc/tree-inline.cc
  8e4dac1ee5fbcab0629042db2f9ece45  gcc/tree-inline.h
  a5cbab6e62ef515070f1e584b679c35c  gcc/tree-into-ssa.cc
  72f7e515faeeb8223adbdd63816cd07d  gcc/tree-into-ssa.h
*************** ffbdc6cd519d8fe2b404591eecafac89  gcc/tr
*** 132122,132128 ****
  da9de571efa01bc66c1db48e416352ae  gcc/tree-logical-location.cc
  3fc6fceee69fd62a808aa84716a854b7  gcc/tree-logical-location.h
  171f3ff8f6df290bf7db7fd2eb70e077  gcc/tree-loop-distribution.cc
! 9481e12742d3ca76c5a21661a3b82130  gcc/tree-nested.cc
  7bdbfccebe0ea4963fd220c0676ad6a2  gcc/tree-nested.h
  d239500c752edeffb49a14623c8a522a  gcc/tree-nrv.cc
  8157c4cf3bda13c019a5c6784e7e9e70  gcc/tree-object-size.cc
--- 132311,132317 ----
  da9de571efa01bc66c1db48e416352ae  gcc/tree-logical-location.cc
  3fc6fceee69fd62a808aa84716a854b7  gcc/tree-logical-location.h
  171f3ff8f6df290bf7db7fd2eb70e077  gcc/tree-loop-distribution.cc
! 9bb73f69c94a2ad2ac4dbf1f2b2d0dd7  gcc/tree-nested.cc
  7bdbfccebe0ea4963fd220c0676ad6a2  gcc/tree-nested.h
  d239500c752edeffb49a14623c8a522a  gcc/tree-nrv.cc
  8157c4cf3bda13c019a5c6784e7e9e70  gcc/tree-object-size.cc
*************** fe7cb8d01db48420c7b2914863f3580c  gcc/tr
*** 132136,132142 ****
  d370934f01e7c80fa4e88a80fabbcb95  gcc/tree-phinodes.h
  e955b77da9f61f19437f61d65861e763  gcc/tree-predcom.cc
  47856333edaecc32813dad93ecb96fbe  gcc/tree-pretty-print-markup.h
! 22d3a68b8d4f84b3274676efe2904e09  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
  fb27a9c19b7277714515baa728b01a3e  gcc/tree-profile.cc
  a5d549b577480d9f00caa8fb844f28dc  gcc/tree-scalar-evolution.cc
--- 132325,132331 ----
  d370934f01e7c80fa4e88a80fabbcb95  gcc/tree-phinodes.h
  e955b77da9f61f19437f61d65861e763  gcc/tree-predcom.cc
  47856333edaecc32813dad93ecb96fbe  gcc/tree-pretty-print-markup.h
! d888f11a2d3c6e726662788b30484217  gcc/tree-pretty-print.cc
  c021bc7a8aa59f2b8184de8bff6b1d14  gcc/tree-pretty-print.h
  fb27a9c19b7277714515baa728b01a3e  gcc/tree-profile.cc
  a5d549b577480d9f00caa8fb844f28dc  gcc/tree-scalar-evolution.cc
*************** c3b5af33118e23a3f3b653f87a6181d3  gcc/tr
*** 132146,132152 ****
  39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
  bcc14a4de2b37f6c98080d60cd3a2c36  gcc/tree-ssa-alias-compare.h
! fb7e0c140fb1708d8ea6d5897c0afb52  gcc/tree-ssa-alias.cc
  05510947cfea397a44870db7a92b253c  gcc/tree-ssa-alias.h
  7ea04656ca71cfab9d92b5810abd6687  gcc/tree-ssa-ccp.cc
  00bd4ac9fa4538263509ec504e606320  gcc/tree-ssa-ccp.h
--- 132335,132341 ----
  39f64c2e1c6ae742ac610f096aa9e013  gcc/tree-ssa-address.cc
  2cc8f7ab186c793b91875224ed16edc6  gcc/tree-ssa-address.h
  bcc14a4de2b37f6c98080d60cd3a2c36  gcc/tree-ssa-alias-compare.h
! 644f6e23e1ad9eb6167ad0f8f072437c  gcc/tree-ssa-alias.cc
  05510947cfea397a44870db7a92b253c  gcc/tree-ssa-alias.h
  7ea04656ca71cfab9d92b5810abd6687  gcc/tree-ssa-ccp.cc
  00bd4ac9fa4538263509ec504e606320  gcc/tree-ssa-ccp.h
*************** ec31925fe8431d27258939fc79f1f02e  gcc/tr
*** 132160,132166 ****
  ec4fb47e62593f549e393a7e359eab42  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
  fd1bf671e636cb196f153568d80a7481  gcc/tree-ssa-forwprop.cc
! 3e4848e9a46f33eab1b56187075818bb  gcc/tree-ssa-ifcombine.cc
  b1c1f1362ac401ede3373f8aa23c02f1  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
--- 132349,132356 ----
  ec4fb47e62593f549e393a7e359eab42  gcc/tree-ssa-dse.cc
  1df01d660e0f98ade0ae7a3152aa33ed  gcc/tree-ssa-dse.h
  fd1bf671e636cb196f153568d80a7481  gcc/tree-ssa-forwprop.cc
! 08b268d14a31ab5a2dcca17ab4a0afbd  gcc/tree-ssa-ifcombine.cc
! 417a76837cd2f895f07d02485a3cdffe  gcc/tree-ssa-ifcombine.h
  b1c1f1362ac401ede3373f8aa23c02f1  gcc/tree-ssa-live.cc
  7c36b95c9d109be3302936ceed49fb4f  gcc/tree-ssa-live.h
  8810d451bbe1958d41d972bc0224c156  gcc/tree-ssa-loop-ch.cc
*************** ba282fb45d22dd7b9f51e27d263cda3d  gcc/tr
*** 132181,132187 ****
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! d4e365d089d37e8c913c54062717c316  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
  bc7a10fe1c5522f4d907263e36ac5945  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
--- 132371,132377 ----
  fa83f982a805985b3a3da2ca5e10e43a  gcc/tree-ssa-math-opts.h
  56d25f9d7a5f35aa3637460c00b7eb7e  gcc/tree-ssa-operands.cc
  f83d0b12185538e6f679296bebfe3d2f  gcc/tree-ssa-operands.h
! 3c7ab8fec2008943cc188cfe8cd9f8f3  gcc/tree-ssa-phiopt.cc
  fe5ca56c2551cb5cbd256cfafdcabecd  gcc/tree-ssa-phiprop.cc
  bc7a10fe1c5522f4d907263e36ac5945  gcc/tree-ssa-pre.cc
  f39acc236b21f9150a1ef4359aef585e  gcc/tree-ssa-propagate.cc
*************** ccd81769582e0122376dc2d42e8c2af1  gcc/tr
*** 132197,132203 ****
  7e86234d60a489dfd04ff6e6792e020e  gcc/tree-ssa-strlen.h
  ff50beb419088f374a4b656a71fd772a  gcc/tree-ssa-structalias.cc
  1cb62c7fa7db51a11ab31132b6a2edee  gcc/tree-ssa-structalias.h
! 0446a2ea253b8980787fe93568c7836b  gcc/tree-ssa-tail-merge.cc
  4835f0b56bdf88ee25d6d6e08808a7db  gcc/tree-ssa-ter.cc
  ade30359e437d413371ab6bf896f2aa8  gcc/tree-ssa-ter.h
  aec3a3878fe29a9644281cb009405ac7  gcc/tree-ssa-threadbackward.cc
--- 132387,132393 ----
  7e86234d60a489dfd04ff6e6792e020e  gcc/tree-ssa-strlen.h
  ff50beb419088f374a4b656a71fd772a  gcc/tree-ssa-structalias.cc
  1cb62c7fa7db51a11ab31132b6a2edee  gcc/tree-ssa-structalias.h
! f3e7c56f55d15a7ad4c88bc40bad8aa5  gcc/tree-ssa-tail-merge.cc
  4835f0b56bdf88ee25d6d6e08808a7db  gcc/tree-ssa-ter.cc
  ade30359e437d413371ab6bf896f2aa8  gcc/tree-ssa-ter.h
  aec3a3878fe29a9644281cb009405ac7  gcc/tree-ssa-threadbackward.cc
*************** aec3a3878fe29a9644281cb009405ac7  gcc/tr
*** 132206,132212 ****
  5eaf91b9a03861ce39b4478c6bb848e9  gcc/tree-ssa-threadupdate.cc
  9a23dad40361ccf83cef995bf6f1eb7f  gcc/tree-ssa-threadupdate.h
  0b038be05a994656b633b1dad37e5247  gcc/tree-ssa-uncprop.cc
! 5bc0c1ce1e36ce9bf867ddbb1095c996  gcc/tree-ssa-uninit.cc
  9efa39c096ff342ed062200d36b3c7a2  gcc/tree-ssa.cc
  070343f0d359685a1e4b6492f3a41e29  gcc/tree-ssa.h
  052a721ed990fd6834de1f701e1bc4e2  gcc/tree-ssanames.cc
--- 132396,132402 ----
  5eaf91b9a03861ce39b4478c6bb848e9  gcc/tree-ssa-threadupdate.cc
  9a23dad40361ccf83cef995bf6f1eb7f  gcc/tree-ssa-threadupdate.h
  0b038be05a994656b633b1dad37e5247  gcc/tree-ssa-uncprop.cc
! 1fdfe92b2f91507fee3530366a88d8c5  gcc/tree-ssa-uninit.cc
  9efa39c096ff342ed062200d36b3c7a2  gcc/tree-ssa.cc
  070343f0d359685a1e4b6492f3a41e29  gcc/tree-ssa.h
  052a721ed990fd6834de1f701e1bc4e2  gcc/tree-ssanames.cc
*************** f8119a019450befbbf3e3e40b010cf74  gcc/tr
*** 132221,132233 ****
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
  1e7175c3baf76e10f726ed4ce66e6c1c  gcc/tree-vect-data-refs.cc
! 8d27b93ebf87d8bcc1776ea3342d49c8  gcc/tree-vect-generic.cc
  e831ebfca544eefb262286a3269fa8ce  gcc/tree-vect-loop-manip.cc
  9de44d9b245ef555cc4d368457deb3a0  gcc/tree-vect-loop.cc
! 4fae14fe305cc80a323b06b7e7865c05  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
  f702e9e693012b61afb43981b59768cb  gcc/tree-vect-slp.cc
! f8a1377e48953eeb14b43ce87ef96069  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
  a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
--- 132411,132423 ----
  fa20fc0102b6036d5fa58b953c127e15  gcc/tree-switch-conversion.h
  6a0f6268d598b3c59871ad41e01f33c1  gcc/tree-tailcall.cc
  1e7175c3baf76e10f726ed4ce66e6c1c  gcc/tree-vect-data-refs.cc
! 851cdeabb53d017910c4c7442f3afe61  gcc/tree-vect-generic.cc
  e831ebfca544eefb262286a3269fa8ce  gcc/tree-vect-loop-manip.cc
  9de44d9b245ef555cc4d368457deb3a0  gcc/tree-vect-loop.cc
! 14fdba1e6d50517ed4d832ad5d063740  gcc/tree-vect-patterns.cc
  4eab6d0f40af2653170a2f7ecf2d6fc1  gcc/tree-vect-slp-patterns.cc
  f702e9e693012b61afb43981b59768cb  gcc/tree-vect-slp.cc
! 2ad586c245e88f3a2b497f2769c9f7e8  gcc/tree-vect-stmts.cc
  42032e04f389a2e0f43fbb46ac091dac  gcc/tree-vector-builder.cc
  4a1b4947e64a076fdca46d14aab2181f  gcc/tree-vector-builder.h
  a87f80d9a1405f816a0b6d544400beef  gcc/tree-vectorizer.cc
*************** ca9cb422fed204a85a3a1a56b3ca8812  gcc/tr
*** 132236,132242 ****
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
  492567c5d0718a51da88ab34330c3fed  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! 427b1240a6a25f018b52e245cb6aa7fd  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
--- 132426,132432 ----
  c946b0d59b15393b95e356052c027eed  gcc/tree-vrp.h
  492567c5d0718a51da88ab34330c3fed  gcc/tree.cc
  f88475a43ca5e7c59112c941875a762c  gcc/tree.def
! bfcb67830fe6ae74eda42e77329da480  gcc/tree.h
  56652e612288132aa8395fdf720b0146  gcc/treestruct.def
  6c6350469a3dbb37f658f247d16ed872  gcc/tristate.cc
  704359710c2d40a58b6646b2da626443  gcc/tristate.h
*************** c559980f2936e62bb80a512b1682d0fd  gcc/va
*** 132259,132274 ****
  2ac29a8fee451f101da64d0a64eefa26  gcc/value-range-pretty-print.h
  036586a7b9d2ff4356b32777d11fcd29  gcc/value-range-storage.cc
  a53a9c85ab653caca9f26257daf5bfea  gcc/value-range-storage.h
! a7049b3fbb2204dbbdd431ca8a72a995  gcc/value-range.cc
! fbd4ea271a7976446cbfea46db271a89  gcc/value-range.h
  67666161e57e5be58fba9c1c031067b0  gcc/value-relation.cc
  ea7df3e5b6ab2e6e23e741431d583880  gcc/value-relation.h
  063ac1ec4666e86252dc7653bde86852  gcc/var-tracking.cc
  abe4064b9258df5b6c87d9394dc9b67c  gcc/varasm.cc
  183473e8cac5bad9279eb1937e4edda9  gcc/varasm.h
  136dfca78729a02f744f7929df4331c9  gcc/varpool.cc
! 1eb1aeaffcea7302f0e479e7e824f742  gcc/vec-perm-indices.cc
! f5d57a9ceb21da232787c72a12a3b597  gcc/vec-perm-indices.h
  0eab6e9da32af1112170f518a116f7cb  gcc/vec.cc
  c91273a15934abde46fad0e255ab7a7d  gcc/vec.h
  f2d9db7b65884c657d64eb3ef0099e7e  gcc/vector-builder.h
--- 132449,132464 ----
  2ac29a8fee451f101da64d0a64eefa26  gcc/value-range-pretty-print.h
  036586a7b9d2ff4356b32777d11fcd29  gcc/value-range-storage.cc
  a53a9c85ab653caca9f26257daf5bfea  gcc/value-range-storage.h
! c210d770d6e95b32ac6887b37a5fbbaf  gcc/value-range.cc
! 7d6f590ff775e8cf6a2294e92a716df4  gcc/value-range.h
  67666161e57e5be58fba9c1c031067b0  gcc/value-relation.cc
  ea7df3e5b6ab2e6e23e741431d583880  gcc/value-relation.h
  063ac1ec4666e86252dc7653bde86852  gcc/var-tracking.cc
  abe4064b9258df5b6c87d9394dc9b67c  gcc/varasm.cc
  183473e8cac5bad9279eb1937e4edda9  gcc/varasm.h
  136dfca78729a02f744f7929df4331c9  gcc/varpool.cc
! 67ef90b264ca4a7659bfc0d8463734ab  gcc/vec-perm-indices.cc
! e935d6531151e5ddb269beeff4ed2d53  gcc/vec-perm-indices.h
  0eab6e9da32af1112170f518a116f7cb  gcc/vec.cc
  c91273a15934abde46fad0e255ab7a7d  gcc/vec.h
  f2d9db7b65884c657d64eb3ef0099e7e  gcc/vector-builder.h
*************** c4e8176c1964a5ebe0a55900f2141299  gotool
*** 132304,132310 ****
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 32b171565e2e7562a2dc70032790943b  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  e4fcea241d25fd2866c6026dcccbe5bd  include/ansidecl.h
--- 132494,132500 ----
  eb2aeb3a6cffe7b26a8f1c8a2da23dcd  gotools/gofmt.1
  59530bdf33659b29e73d4adb9f9f6552  include/COPYING
  d32239bcb673463ab874e80d47fae504  include/COPYING3
! 02fcbee86a0e265e43edb7c4798b082c  include/ChangeLog
  4263432a72ff47ed8bf420208ee7eea5  include/ChangeLog-9103
  a43d76108493b20da790f953f829c6a5  include/ChangeLog.jit
  e4fcea241d25fd2866c6026dcccbe5bd  include/ansidecl.h
*************** c80f0d1413922b6c23015d781fb57ade  includ
*** 132329,132335 ****
  1f473e7d70366fbbe39ec745cde53247  include/gcc-interface.h
  449fdb595aee67684de51e4fd976f01b  include/gdb/gdb-index.h
  22135c8657b517d667c6d7e6b9b0de3c  include/getopt.h
! 5115ce6e1a0085669e80ffa0ce1b3ce7  include/gomp-constants.h
  3c78dff688fb8d8a53788a7820f5f1f8  include/hashtab.h
  e10a926ac9146a394aa47259c571ac55  include/hsa.h
  834b1af17bcbcd3944b557484c126a73  include/hsa_ext_amd.h
--- 132519,132525 ----
  1f473e7d70366fbbe39ec745cde53247  include/gcc-interface.h
  449fdb595aee67684de51e4fd976f01b  include/gdb/gdb-index.h
  22135c8657b517d667c6d7e6b9b0de3c  include/getopt.h
! 013f4d737e62dfb41efc26395a3d5956  include/gomp-constants.h
  3c78dff688fb8d8a53788a7820f5f1f8  include/hashtab.h
  e10a926ac9146a394aa47259c571ac55  include/hsa.h
  834b1af17bcbcd3944b557484c126a73  include/hsa_ext_amd.h
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 132462,132468 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 8045530c972ef2d5dae910e233e6ee0e  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  3666db75f4b55461411d215c60f35beb  libbacktrace/Makefile.am
  f9e4383641cb9203faa7433e51857ce2  libbacktrace/Makefile.in
--- 132652,132658 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 1db424010cb9c07992c559de76d5d453  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  3666db75f4b55461411d215c60f35beb  libbacktrace/Makefile.am
  f9e4383641cb9203faa7433e51857ce2  libbacktrace/Makefile.in
*************** af9ddebed2e099e1b87b2f3ca1d3c59d  libbac
*** 132482,132488 ****
  46ec0883605fc53660c7f51dbe16b83f  libbacktrace/dwarf.c
  883b410489e200aea1b6ecc248562d86  libbacktrace/edtest.c
  1908cd42481d0b1a8a32ff691f4eaeb9  libbacktrace/edtest2.c
! e3f851f0aeeafe99349001633094f7b6  libbacktrace/elf.c
  46ea221f18220bbecd9d7128ca3f6741  libbacktrace/fileline.c
  2101239b2b163b2ca53d5ae30bbfaadf  libbacktrace/filetype.awk
  f074a8be4c44a8cd964cec9d10340d19  libbacktrace/install-debuginfo-for-buildid.sh.in
--- 132672,132678 ----
  46ec0883605fc53660c7f51dbe16b83f  libbacktrace/dwarf.c
  883b410489e200aea1b6ecc248562d86  libbacktrace/edtest.c
  1908cd42481d0b1a8a32ff691f4eaeb9  libbacktrace/edtest2.c
! e5a0074584e2209556e30e796206f573  libbacktrace/elf.c
  46ea221f18220bbecd9d7128ca3f6741  libbacktrace/fileline.c
  2101239b2b163b2ca53d5ae30bbfaadf  libbacktrace/filetype.awk
  f074a8be4c44a8cd964cec9d10340d19  libbacktrace/install-debuginfo-for-buildid.sh.in
*************** d8d1bc377aa497a217f38aad204fd050  libbac
*** 132509,132515 ****
  fa9332436547b6e468e3f9d3560612c5  libbacktrace/unknown.c
  c2c965e4a7a144af3e430d4191b2a091  libbacktrace/xcoff.c
  04137bad794f9bfb1236039f63227eef  libbacktrace/xztest.c
! 67a4114ee4c9db4b29b839e0f1e1d3b8  libbacktrace/zstdtest.c
  ace1e49933e01dd308790e101ff593e2  libbacktrace/ztest.c
  2bba393e96eff722fc2a34903416cd55  libcc1/ChangeLog
  8449193c9f9b6527fb64e695789dd4bf  libcc1/Makefile.am
--- 132699,132705 ----
  fa9332436547b6e468e3f9d3560612c5  libbacktrace/unknown.c
  c2c965e4a7a144af3e430d4191b2a091  libbacktrace/xcoff.c
  04137bad794f9bfb1236039f63227eef  libbacktrace/xztest.c
! eeca8e2df01fdc9fa455f2c703d1acee  libbacktrace/zstdtest.c
  ace1e49933e01dd308790e101ff593e2  libbacktrace/ztest.c
  2bba393e96eff722fc2a34903416cd55  libcc1/ChangeLog
  8449193c9f9b6527fb64e695789dd4bf  libcc1/Makefile.am
*************** d1bc698652ed847a9a315e51f8dfecc1  libgcc
*** 133302,133321 ****
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
  917132c185ae7bd80d7b1f0373ff05ea  libgcc/config/avr/libf7/ChangeLog
  1b3a595323fbea22cd1737fc614cc808  libgcc/config/avr/libf7/asm-defs.h
! 7f7d24ba47e5a6cfeaf669beb81a0cc2  libgcc/config/avr/libf7/f7-renames.h
  92bbb0397c760b4e93af191f49964ad4  libgcc/config/avr/libf7/f7-wraps.h
  b9901623ec29c1c4dd98d6fae040518c  libgcc/config/avr/libf7/f7renames.sh
  d250706c46cb1217dd828894cbba2d45  libgcc/config/avr/libf7/f7wraps.sh
  21c3bae3e2a940175ece1853b7992808  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! 5b6f6e10e876f49c1fc876fb5290e0e2  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
! 7b524c1023cb08a1135fc21df268afcc  libgcc/config/avr/libf7/libf7-common.mk
  92d858f8a00be9163a745497796e81c2  libgcc/config/avr/libf7/libf7-const.def
  b73226e862ca01a6b2bdefee583d73ab  libgcc/config/avr/libf7/libf7-constdef.h
! be449ccdab4a3bf3121e80796fdb35fd  libgcc/config/avr/libf7/libf7.c
  3e4fb67c778390ccd964ce9b3b53ed69  libgcc/config/avr/libf7/libf7.h
! cff4e2f6d44bbaf9153db20731b2f659  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  bafae17b5d2413fa5abeb0be76fd62ca  libgcc/config/avr/t-avr
--- 133492,133511 ----
  c7a08febc167bf9a84c28593ca627617  libgcc/config/avr/lib2funcs.c
  917132c185ae7bd80d7b1f0373ff05ea  libgcc/config/avr/libf7/ChangeLog
  1b3a595323fbea22cd1737fc614cc808  libgcc/config/avr/libf7/asm-defs.h
! 9bd59f1ae77ab1aca77f15fb5ede4792  libgcc/config/avr/libf7/f7-renames.h
  92bbb0397c760b4e93af191f49964ad4  libgcc/config/avr/libf7/f7-wraps.h
  b9901623ec29c1c4dd98d6fae040518c  libgcc/config/avr/libf7/f7renames.sh
  d250706c46cb1217dd828894cbba2d45  libgcc/config/avr/libf7/f7wraps.sh
  21c3bae3e2a940175ece1853b7992808  libgcc/config/avr/libf7/libf7-array.def
  5d9def53110ec07e8f29e66d593d758f  libgcc/config/avr/libf7/libf7-asm-object.mk
! b4cb39f6c19743988cc2a1748ed19cd1  libgcc/config/avr/libf7/libf7-asm.sx
  6b4886ae302fca1fa733831066c5c830  libgcc/config/avr/libf7/libf7-c-object.mk
! 894bb7590b14eeb4fa15f02a1445749c  libgcc/config/avr/libf7/libf7-common.mk
  92d858f8a00be9163a745497796e81c2  libgcc/config/avr/libf7/libf7-const.def
  b73226e862ca01a6b2bdefee583d73ab  libgcc/config/avr/libf7/libf7-constdef.h
! badb073cfbf15031442110b1cfaeab5f  libgcc/config/avr/libf7/libf7.c
  3e4fb67c778390ccd964ce9b3b53ed69  libgcc/config/avr/libf7/libf7.h
! 2921a86fef727ada45668b8c0f091e33  libgcc/config/avr/libf7/t-libf7
  bf9360cfc14e0b0129af5560893f374e  libgcc/config/avr/libf7/t-libf7-math
  761826027ebb1cfbb089d23904494606  libgcc/config/avr/libf7/t-libf7-math-symbols
  bafae17b5d2413fa5abeb0be76fd62ca  libgcc/config/avr/t-avr
*************** b7bdc64c03d62f87f61d3d8a61a75d2d  libgcc
*** 134730,134744 ****
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 5979a35ecfa7995f37cb134187f08611  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
  b0657c8d818882b87c44a17db46300df  libgcobol/README
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
! 963ceeaf037e6a880f70ad233da93150  libgcobol/charmaps.cc
! 0cb43a94ed27462e331ab6c781721373  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
--- 134920,134934 ----
  227525d7193394128a83ce15e7642842  libgcc/vtv_start.c
  23ad2a8d256ba5dca28382d64a20e8f2  libgcc/vtv_start_preinit.c
  e50c29294062dfe571c9c053a8ec217b  libgcobol/.gitignore
! 647e3c864b036b175ec2ee46eadb0564  libgcobol/ChangeLog
  bec1e79fc8ada70ed4ac3dc61a33d576  libgcobol/LICENSE
  8b9a5263fc79d367bdafa609a2ac1363  libgcobol/Makefile.am
  d97f1f2b9efb3a8fa8c9db9a04ea78db  libgcobol/Makefile.in
  b0657c8d818882b87c44a17db46300df  libgcobol/README
  a69c3f28d1be90eb0b0287fa450c3684  libgcobol/acinclude.m4
  916ce15e68376e661a41f183252a74ec  libgcobol/aclocal.m4
! 1a36387a9e52a001f44000ab03cfe817  libgcobol/charmaps.cc
! 9426f381b268b4bbe246126f5d7d7ae5  libgcobol/charmaps.h
  94c48aaa30cd3785160dfbdf56b68d0a  libgcobol/common-defs.h
  fba8f609927b913d1ca3d30a27d0febc  libgcobol/compat/README.md
  69fc231dbe0ada7d183b3b115faee461  libgcobol/compat/gnu/cpy/cblproto.cpy
*************** ede045a132a5720d5dd585db12f8c221  libgco
*** 134773,134779 ****
  491cba1b87576f84add391975992c7ce  libgcobol/configure.tgt
  ee9716a45633fbc51fcf882ae2a28ae7  libgcobol/constants.cc
  a5821ed24abf64b452f15f29da418d17  libgcobol/ec.h
! 20b3ffc0454e6b54c8c8c7a6e9213d2b  libgcobol/encodings.h
  44aa23a1baad26222e629bf8cf03a357  libgcobol/exceptl.h
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
  882856d895b686fc355b61771cada120  libgcobol/gfileio.cc
--- 134963,134969 ----
  491cba1b87576f84add391975992c7ce  libgcobol/configure.tgt
  ee9716a45633fbc51fcf882ae2a28ae7  libgcobol/constants.cc
  a5821ed24abf64b452f15f29da418d17  libgcobol/ec.h
! 0fbbb7014a9f8ebc82c4fd8130f54774  libgcobol/encodings.h
  44aa23a1baad26222e629bf8cf03a357  libgcobol/exceptl.h
  649e793ce5ae15bd0f3dd1fe2ecfbea9  libgcobol/gcobolio.h
  882856d895b686fc355b61771cada120  libgcobol/gfileio.cc
*************** fa11a6e56c666d0f6aed79e8a76ee830  libgco
*** 134839,134850 ****
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! f77fe8bff424830ac79c8b2fec983268  libgcobol/stringbin.cc
  f49aafcc21e24a1ea3753658ab5250a9  libgcobol/stringbin.h
  d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
! f68052a5a3969f34da35d08cce05dbe1  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
--- 135029,135040 ----
  859336a5b2670d1679e68d9e00bec381  libgcobol/posix/udf/posix-stat.cbl
  9c2b0ac9c647bc3a9b65244797bb88d7  libgcobol/posix/udf/posix-unlink.cbl
  f7f3ede57639856878087542116a625d  libgcobol/posix/udf/posix-write.cbl
! 1dc9043a932d4684a029d5bd1110f47c  libgcobol/stringbin.cc
  f49aafcc21e24a1ea3753658ab5250a9  libgcobol/stringbin.h
  d77d00934ab6b213d8c526ae0673969c  libgcobol/valconv.cc
  3466db9e6fc5748c08c947e71a566c07  libgcobol/valconv.h
  8485adf73f6988a83d317bb42594aa15  libgcobol/xmlparse.cc
! 53aee16fea4924a675a9cfc081eaaef6  libgfortran/ChangeLog
  d99469a76bfe825683f8d94fe07b508c  libgfortran/ChangeLog-2002
  522fdb2df6cefe6bcaed3c7c7311eae1  libgfortran/ChangeLog-2003
  5a3a93e76d878d063aba66079340cfe0  libgfortran/ChangeLog-2004
*************** cec32999db8b4e87719bd32022b37c61  libgfo
*** 135780,135799 ****
  c62b817e6f400a567db7dccd71d76f33  libgfortran/io/close.c
  0686754907b94e015f02e5417b8ecb03  libgfortran/io/fbuf.c
  2a512bb8d96b461dcb82470c5dd52121  libgfortran/io/fbuf.h
! dd12c9337c5b8da315083627d633c703  libgfortran/io/file_pos.c
  3e6e07cd0b374e658d1f25a5afe82e63  libgfortran/io/format.c
  73d01474fc7e12ff7cd21c2c920a6638  libgfortran/io/format.h
  3d6bdfad19038c8e5794b4f1d39dc010  libgfortran/io/inquire.c
  86f78d0a8d7fd3418de9e9f9a1cb384f  libgfortran/io/intrinsics.c
! 951a0fb44143778514eae26164fc62b0  libgfortran/io/io.h
! 8c6574875a8d296faff4aee7831e7f38  libgfortran/io/list_read.c
  908721400434528de210b0cbef37f603  libgfortran/io/lock.c
  601d86fd12148a4342e1ca9c4905714d  libgfortran/io/open.c
  33bad6f40ed7c20e9562f82b2f8387c3  libgfortran/io/read.c
  4d71c600a702cb37b041c18304734191  libgfortran/io/size_from_kind.c
! 2a6fb1240d41a9af5b25cadab728f411  libgfortran/io/transfer.c
  be377468666649cbd953626596944272  libgfortran/io/transfer128.c
! 6cf3fdea6474d249cc6fe641cb6a7629  libgfortran/io/unit.c
  f10c0db103b5f89684041aff43553d3d  libgfortran/io/unix.c
  f460ce66bb06770e24fc348ce57dcea7  libgfortran/io/unix.h
  4092613d079ce7160a7ce3e52722bf1e  libgfortran/io/write.c
--- 135970,135989 ----
  c62b817e6f400a567db7dccd71d76f33  libgfortran/io/close.c
  0686754907b94e015f02e5417b8ecb03  libgfortran/io/fbuf.c
  2a512bb8d96b461dcb82470c5dd52121  libgfortran/io/fbuf.h
! dd973d8040e0630939ee22b69ae43002  libgfortran/io/file_pos.c
  3e6e07cd0b374e658d1f25a5afe82e63  libgfortran/io/format.c
  73d01474fc7e12ff7cd21c2c920a6638  libgfortran/io/format.h
  3d6bdfad19038c8e5794b4f1d39dc010  libgfortran/io/inquire.c
  86f78d0a8d7fd3418de9e9f9a1cb384f  libgfortran/io/intrinsics.c
! a2f65c26aecd11bf2d28164967bcf9dc  libgfortran/io/io.h
! a7f1f84c3d85c67f583fa6c7674fdd06  libgfortran/io/list_read.c
  908721400434528de210b0cbef37f603  libgfortran/io/lock.c
  601d86fd12148a4342e1ca9c4905714d  libgfortran/io/open.c
  33bad6f40ed7c20e9562f82b2f8387c3  libgfortran/io/read.c
  4d71c600a702cb37b041c18304734191  libgfortran/io/size_from_kind.c
! e576991d7c7b08d89f87f41afb9590d0  libgfortran/io/transfer.c
  be377468666649cbd953626596944272  libgfortran/io/transfer128.c
! 6b4c699c45d7572e14c3e15d974a752a  libgfortran/io/unit.c
  f10c0db103b5f89684041aff43553d3d  libgfortran/io/unix.c
  f460ce66bb06770e24fc348ce57dcea7  libgfortran/io/unix.h
  4092613d079ce7160a7ce3e52722bf1e  libgfortran/io/write.c
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 141432,141451 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 81058abd33992fdbb6dc091ef699b3e0  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
! 714e3b9c0810a61df01246c2a97e825a  libgomp/Makefile.am
! 6687ddf350c549b16e165de0211f0471  libgomp/Makefile.in
  7f1d00b196788c5e20ac3392affbc699  libgomp/acc_prof.h
  5e63b3cd1246f4c73a49880cad1844ee  libgomp/acinclude.m4
  5a46efd6e18e24c37640f51369238fe4  libgomp/aclocal.m4
  a518e5f5538c5ff629ba3a8f88128480  libgomp/affinity-fmt.c
! ea7c79b61ea2ff5a43a38e1ae139c083  libgomp/affinity.c
  44e82ee5e47677da6205a78497c6a566  libgomp/alloc.c
  0c08d5aa3b537038621b9e3d7c3f28df  libgomp/alloc_cache.h
  4eb87fef655de54484eccb7b204e5916  libgomp/allocator.c
! 9be4323f25d5a03ee903e8e5a5aa76bd  libgomp/atomic.c
! 57adabf6519fd5d55b63b9989528fd44  libgomp/barrier.c
  817a188fa4d37e0fffa03364d2f1507d  libgomp/basic-allocator.c
  037ba614230cf1e1886c5ef589cae6d0  libgomp/config.h.in
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/libgomp-plugin.c
--- 141622,141641 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! e10b9c517a12013659f80a8f58d6c5d5  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
! e1d869816ce58d8fdc05a55313f8c194  libgomp/Makefile.am
! 4da024f3aacefa7a1d2396c494ae6526  libgomp/Makefile.in
  7f1d00b196788c5e20ac3392affbc699  libgomp/acc_prof.h
  5e63b3cd1246f4c73a49880cad1844ee  libgomp/acinclude.m4
  5a46efd6e18e24c37640f51369238fe4  libgomp/aclocal.m4
  a518e5f5538c5ff629ba3a8f88128480  libgomp/affinity-fmt.c
! 06478025336afe5fce9b998b4c7710b1  libgomp/affinity.c
  44e82ee5e47677da6205a78497c6a566  libgomp/alloc.c
  0c08d5aa3b537038621b9e3d7c3f28df  libgomp/alloc_cache.h
  4eb87fef655de54484eccb7b204e5916  libgomp/allocator.c
! a33e006e46a2cc9bc17ff967a8169bac  libgomp/atomic.c
! 4cc5b004a12e0e03b1d4c1fca9e65c4a  libgomp/barrier.c
  817a188fa4d37e0fffa03364d2f1507d  libgomp/basic-allocator.c
  037ba614230cf1e1886c5ef589cae6d0  libgomp/config.h.in
  d41d8cd98f00b204e9800998ecf8427e  libgomp/config/accel/libgomp-plugin.c
*************** c447ed13e1d693f4b983b83ca2478aa8  libgom
*** 141486,141495 ****
  c4edbd7c2c1205e40ebb4fe0f1270559  libgomp/config/gcn/target.c
  55d3b1a161a020a1c6c18b3e41dd9420  libgomp/config/gcn/task.c
  8c261f3d46bea4a014a7dc403f84226a  libgomp/config/gcn/team.c
! c0f4bc26ad28bb0712bebfcae4c6a978  libgomp/config/gcn/teams.c
  de27fe416c22021c880c3ef4d002aa91  libgomp/config/gcn/time.c
  7bff56f23fd667518b0ce11825f3a66b  libgomp/config/hpux/plugin-suffix.h
! 5fa45367d4769267b9dc4398d759b193  libgomp/config/linux/affinity.c
  d77d4ae9962036bcecc3a3ba0cc10040  libgomp/config/linux/allocator.c
  29d574ec8d851693d9b472f7519c22d9  libgomp/config/linux/alpha/futex.h
  2a9f66d6adadccefb7a7d88d5445f143  libgomp/config/linux/bar.c
--- 141676,141685 ----
  c4edbd7c2c1205e40ebb4fe0f1270559  libgomp/config/gcn/target.c
  55d3b1a161a020a1c6c18b3e41dd9420  libgomp/config/gcn/task.c
  8c261f3d46bea4a014a7dc403f84226a  libgomp/config/gcn/team.c
! 4b378d1e45ffdf29f9ca2f8a1a8b573d  libgomp/config/gcn/teams.c
  de27fe416c22021c880c3ef4d002aa91  libgomp/config/gcn/time.c
  7bff56f23fd667518b0ce11825f3a66b  libgomp/config/hpux/plugin-suffix.h
! 7a0a6a6d5cb567d0de762d9dbe76d9be  libgomp/config/linux/affinity.c
  d77d4ae9962036bcecc3a3ba0cc10040  libgomp/config/linux/allocator.c
  29d574ec8d851693d9b472f7519c22d9  libgomp/config/linux/alpha/futex.h
  2a9f66d6adadccefb7a7d88d5445f143  libgomp/config/linux/bar.c
*************** d77d4ae9962036bcecc3a3ba0cc10040  libgom
*** 141501,141506 ****
--- 141691,141697 ----
  e7c5c296b51e59e33374488e93c9c6ab  libgomp/config/linux/mips/futex.h
  47e7a47aebd6958882eef3212804e900  libgomp/config/linux/mutex.c
  0e18908d6748091d5123412101b2a228  libgomp/config/linux/mutex.h
+ a629129febd91dc2742200ef90fb4aae  libgomp/config/linux/numa.c
  7973e447504d3a02e64bae101b909b1a  libgomp/config/linux/omp-lock.h
  e75b2f29c2bf9217db7e9d912f650fc6  libgomp/config/linux/powerpc/futex.h
  4c0ff8c6c44815a5051b7050398c1bff  libgomp/config/linux/proc.c
*************** ca14627edee8edaa51ae0d2606f17be4  libgom
*** 141531,141537 ****
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
  4e1466b25843542d995400bca06e4868  libgomp/config/nvptx/team.c
! 25e9242a0e4530902ae2914c443cea04  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
  b72c763edbd3bad13d1a4137ea03cf10  libgomp/config/posix/bar.h
--- 141722,141728 ----
  d4ef411ea34a5e21bbc28b10c1f3b9cf  libgomp/config/nvptx/target.c
  1ccc40324f0cdb57674db555b003e81d  libgomp/config/nvptx/task.c
  4e1466b25843542d995400bca06e4868  libgomp/config/nvptx/team.c
! 6a2f12a09bf4819db6c48ee99a46a005  libgomp/config/nvptx/teams.c
  1e82aa2630626e511ff0d1341a76d2fb  libgomp/config/nvptx/time.c
  f71a2c1760df3cace4ad96cbc50e724c  libgomp/config/posix/bar.c
  b72c763edbd3bad13d1a4137ea03cf10  libgomp/config/posix/bar.h
*************** e24fbe0295408a451cb420526533051f  libgom
*** 141566,141588 ****
  32ee987623cb1d4e924d40431df6168d  libgomp/critical.c
  58467d214066591e724f1370bfeb505a  libgomp/env.c
  93acc4d17ce91729e01212d518bafca0  libgomp/error.c
! 1a8ce2ac98b5113a23ab57a7ccdd9e32  libgomp/fortran.c
  46849b5af1169f593c12afeebfac9940  libgomp/hashtab.h
  a1605e6bc0999c90a1c4e966af584f1c  libgomp/icv-device.c
! a4cc1480c8ee441a3ccf2c250c7c0cad  libgomp/icv.c
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! 86c5ee434cd811c606b407fed96ff39a  libgomp/libgomp-plugin.h
! 085e80e96ce71a845196f549250dd0f0  libgomp/libgomp.h
! 847dd5780ff3a61d09f88ea2a6f6690a  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! f270c328e372f545a93d85b5391d3f65  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
! e60f4fb3af97e19475db309ac38e933f  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
  83ae93ed86e28412cd75aa493fe04885  libgomp/loop.c
  80446fe6cd6193819bea8853c8dcc525  libgomp/loop_ull.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
  7685edcf1f7e7bced0d4ea02b83aa067  libgomp/oacc-cuda.c
  61adf03be7b2d1afcc210f5648057a45  libgomp/oacc-host.c
--- 141757,141780 ----
  32ee987623cb1d4e924d40431df6168d  libgomp/critical.c
  58467d214066591e724f1370bfeb505a  libgomp/env.c
  93acc4d17ce91729e01212d518bafca0  libgomp/error.c
! 5a7099c8ae0c692dd86eae3cade49016  libgomp/fortran.c
  46849b5af1169f593c12afeebfac9940  libgomp/hashtab.h
  a1605e6bc0999c90a1c4e966af584f1c  libgomp/icv-device.c
! 2bf94a21ab7f066efbb464a792fda3fa  libgomp/icv.c
  e40f7f1dbaf7de3643dec21493aed6b5  libgomp/iter.c
  6d019b48c2311268a20cabe9f65f73ad  libgomp/iter_ull.c
  e59f9d9c4947a5f7d4bdd011da890930  libgomp/libgomp-plugin.c
! 9304dc649fd491bbe591b24bd59dbca4  libgomp/libgomp-plugin.h
! 47525f7d91f1fb8f5ff4f471e17bae2c  libgomp/libgomp.h
! c227fce7002f7e0944869b5940e49fc8  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
! b7fa019d9bea4de0a9b979a11a262ebf  libgomp/libgomp.texi
  1d54928ce4032885323fb921fd1df788  libgomp/libgomp_f.h.in
! 3fe9ecb217c50929b3a00a144bd1b440  libgomp/libgomp_g.h
  26474764313104462f3252f8ce962c10  libgomp/lock.c
  83ae93ed86e28412cd75aa493fe04885  libgomp/loop.c
  80446fe6cd6193819bea8853c8dcc525  libgomp/loop_ull.c
+ 806319a3f4077f3dfe6699ec2e9051c9  libgomp/numa.c
  6688bf57d8344fc3ab514e0ca98629a5  libgomp/oacc-async.c
  7685edcf1f7e7bced0d4ea02b83aa067  libgomp/oacc-cuda.c
  61adf03be7b2d1afcc210f5648057a45  libgomp/oacc-host.c
*************** dd36fcbd7fd6cd40560a449ca272d054  libgom
*** 141594,141614 ****
  a09ede7d3d21d275ef33da3aeef727b7  libgomp/oacc-plugin.h
  ccc59a273af5bb87bc4287e838131e91  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 55c1b72f5c30f9ae0e6e93903367f82b  libgomp/omp.h.in
! 65e5868dc0758ab95a4c383bae7e47df  libgomp/omp_lib.f90.in
! ce0e4f04d8d42bc2fabe8f2b00245356  libgomp/omp_lib.h.in
  3a0b904af6b419d48883939e83c1150c  libgomp/openacc.f90
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
  da2ae01cd3ee1b82927ed89b489413c4  libgomp/ordered.c
! 9175c3aaac7a44bd118f7fb462894ff7  libgomp/parallel.c
  a19fe470b125fddc580e5e0bbeee471d  libgomp/plugin/Makefrag.am
  1b94d027e28b8b7e6f38e326d8412459  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
  471ff3e1b4f9a16cc006a5fa4c1542d3  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! 8205326e04eb4c5fa4326cc7be85be48  libgomp/plugin/plugin-gcn.c
! 2ed35f20b51021dd4a9ae2df371d6f48  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
--- 141786,141806 ----
  a09ede7d3d21d275ef33da3aeef727b7  libgomp/oacc-plugin.h
  ccc59a273af5bb87bc4287e838131e91  libgomp/oacc-profiling.c
  6a2627e5d8a4e542cab7eddc96b53f37  libgomp/oacc-target.c
! 7744635f53e50c8d86b2d922601b521d  libgomp/omp.h.in
! b514e62ec1099b7683f3107c94615e99  libgomp/omp_lib.f90.in
! 7675eced797cb78e112e106388711194  libgomp/omp_lib.h.in
  3a0b904af6b419d48883939e83c1150c  libgomp/openacc.f90
  951da06c04766ca9e95dd4a2294b9b77  libgomp/openacc.h
  499db3818012abc0c973cf7887ad887b  libgomp/openacc_lib.h
  da2ae01cd3ee1b82927ed89b489413c4  libgomp/ordered.c
! 651856f2bfdb63d51dbae6fa0f30bbbd  libgomp/parallel.c
  a19fe470b125fddc580e5e0bbeee471d  libgomp/plugin/Makefrag.am
  1b94d027e28b8b7e6f38e326d8412459  libgomp/plugin/build-target-indirect-htab.h
  fab10af27c836c7b90303245f3965cb8  libgomp/plugin/configfrag.ac
  471ff3e1b4f9a16cc006a5fa4c1542d3  libgomp/plugin/cuda-lib.def
  d024ec56acbc3411cedc7899b8bbdd02  libgomp/plugin/mutex.c
! fdff70072a32c3f2c613c35948efa0b1  libgomp/plugin/plugin-gcn.c
! cc929b1986f7751d9e2014305ba999fb  libgomp/plugin/plugin-nvptx.c
  575940d2b8e2a941f78af850aac28928  libgomp/priority_queue.c
  c88620bad36f9c420348d0508bd4b346  libgomp/priority_queue.h
  20aaa72861afa50254f90e9a0839d451  libgomp/scope.c
*************** ed195dc04ac3e252f89029dee0bc9c05  libgom
*** 141620,141630 ****
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  efc6f457ddec802a552a289c9f6cec1d  libgomp/target-indirect.c
! 51aa7cf9d8b8e212c9753b83f7da3581  libgomp/target.c
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
! 75558421f6643377456e1afccbec5b19  libgomp/teams.c
  ae0dcb4c08025996b4bf4550cf72832e  libgomp/testsuite/Makefile.am
  2c4f8874086e4e29d9e1638e65b409b3  libgomp/testsuite/Makefile.in
  4f0fd32ecaf8eb341fbaa1f46bfaf2a2  libgomp/testsuite/config/default.exp
--- 141812,141822 ----
  bbb8b404de421c08a4468a7c149897e3  libgomp/splay-tree.h
  1775f6ebbed5a9aef1882e66136d9e2b  libgomp/target-cxa-dso-dtor.c
  efc6f457ddec802a552a289c9f6cec1d  libgomp/target-indirect.c
! 2709cc03bb2c86820c8b73bb127d0554  libgomp/target.c
  9423c0473a15a8d13b93375561ef5058  libgomp/task.c
  7f9c7ebe470f1e58806b1136258bd786  libgomp/taskloop.c
  abb5e2202aa84d67c967b7dc176fc937  libgomp/team.c
! d4dbcf7aa478af80e0612b229077cd7c  libgomp/teams.c
  ae0dcb4c08025996b4bf4550cf72832e  libgomp/testsuite/Makefile.am
  2c4f8874086e4e29d9e1638e65b409b3  libgomp/testsuite/Makefile.in
  4f0fd32ecaf8eb341fbaa1f46bfaf2a2  libgomp/testsuite/config/default.exp
*************** d8a4580727b203fa0b4b3bb5a6495aea  libgom
*** 142529,142535 ****
  7f6115d0c5452c0fe6027668b7322ee2  libgomp/testsuite/libgomp.c/autopar-6.c
  e55bb2fa22ecfad155b92c445e4128e4  libgomp/testsuite/libgomp.c/autopar-7.c
  1332d360ab9db69538186f861d89a00c  libgomp/testsuite/libgomp.c/autopar-8.c
! c75783c8a3d7ab920c82ea2321e24d1d  libgomp/testsuite/libgomp.c/barrier-1.c
  066b9d9d98732e0a73ac90df1395e15a  libgomp/testsuite/libgomp.c/bitint-1.c
  b7564639746915d44a752a4eb20f16a2  libgomp/testsuite/libgomp.c/c.exp
  02516a63eb7c2c6d10a65b41dd80b536  libgomp/testsuite/libgomp.c/cancel-for-1.c
--- 142721,142727 ----
  7f6115d0c5452c0fe6027668b7322ee2  libgomp/testsuite/libgomp.c/autopar-6.c
  e55bb2fa22ecfad155b92c445e4128e4  libgomp/testsuite/libgomp.c/autopar-7.c
  1332d360ab9db69538186f861d89a00c  libgomp/testsuite/libgomp.c/autopar-8.c
! 0acbde9036da03fdaf1812938e4802fe  libgomp/testsuite/libgomp.c/barrier-1.c
  066b9d9d98732e0a73ac90df1395e15a  libgomp/testsuite/libgomp.c/bitint-1.c
  b7564639746915d44a752a4eb20f16a2  libgomp/testsuite/libgomp.c/c.exp
  02516a63eb7c2c6d10a65b41dd80b536  libgomp/testsuite/libgomp.c/cancel-for-1.c
*************** b0f5c1da84528f7536416837c59936a3  libgom
*** 142709,142714 ****
--- 142901,142907 ----
  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
+ 716cb3c9afc7ce03c62c935d7ff31959  libgomp/testsuite/libgomp.c/multi-dim-routines.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
*************** e9a079a2d85004b1722782adaa37de8a  libgom
*** 143296,143301 ****
--- 143489,143496 ----
  5ae2ae972961030d963d73631aecabe3  libgomp/testsuite/libgomp.fortran/metadirective-4.f90
  1ab6677b5e3bc30e5c3ea7f03141763c  libgomp/testsuite/libgomp.fortran/metadirective-5.f90
  c27e3ff7785e28826ee4bdcf83b8105f  libgomp/testsuite/libgomp.fortran/metadirective-6.f90
+ 269d47338d81f9595b204ce2c9bba64c  libgomp/testsuite/libgomp.fortran/multi-dim-routines-2.F90
+ efdf63505c42e894da0b7426036030d9  libgomp/testsuite/libgomp.fortran/multi-dim-routines.F90
  835cd687e20bf1f2c12df594c245ecdc  libgomp/testsuite/libgomp.fortran/my-usleep.c
  ee59540d156de5375a9874d751f6ee09  libgomp/testsuite/libgomp.fortran/nested-fn.f90
  34e118b4de7cfbd20c7427abb1d4c7e5  libgomp/testsuite/libgomp.fortran/nested1.f90
*************** a73d560a3ba317c5ad0a7919d87b4b6d  libssp
*** 147093,147099 ****
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 3cd0b3242704dfd7b58dc4dadaf70ec2  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 147288,147294 ----
  7d75fa0d30318408fe4cd91d9cbe3ac7  libssp/vsnprintf-chk.c
  e9ff0f4bdd1be75a507480ed1267459d  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! ee9fbf398bab61dd29db86c1cfe55dc7  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** a94321c8d0dbbc71741ebf0f1cc9828c  libstd
*** 147125,147131 ****
  9161085c79a8bf8d60641b5525f28bd7  libstdc++-v3/Makefile.am
  dbe6646c8cac125dd885d66a4fd4ce40  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! b9cbca9b4cd0db9842cfeee922aa2c51  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  2345fca717fc01f8c1494241d6a88e94  libstdc++-v3/config/abi/compatibility.h
--- 147320,147326 ----
  9161085c79a8bf8d60641b5525f28bd7  libstdc++-v3/Makefile.am
  dbe6646c8cac125dd885d66a4fd4ce40  libstdc++-v3/Makefile.in
  f372af73db4ac0ad88e43199e1f29e08  libstdc++-v3/README
! 6376a34d1eeacc12b18def32a3185ce1  libstdc++-v3/acinclude.m4
  66d9ad645fa12cd3028e72df3375d9a6  libstdc++-v3/aclocal.m4
  99a3cff2df96180120774fefa11f050e  libstdc++-v3/config.h.in
  2345fca717fc01f8c1494241d6a88e94  libstdc++-v3/config/abi/compatibility.h
*************** a144795bdde388f89eb6222f0c2e4932  libstd
*** 147319,147328 ****
  53df82982400fd3d426f3fd0e0c37b54  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  a3f907fa7f71dc9eb08755c9c438accc  libstdc++-v3/config/os/vxworks/ctype_inline.h
  e8e7da2b87b17dcd2c2faadb8b5cd1ad  libstdc++-v3/config/os/vxworks/os_defines.h
! 697b9ccb3dac2fc9458b082cfcd68e0c  libstdc++-v3/configure
! 3d4afabfe754da548766585878942937  libstdc++-v3/configure.ac
  ac3c5c4c31f1e2c1f6e793bafb5f3931  libstdc++-v3/configure.host
! 450cc52f6f6f0abf59940662504c450e  libstdc++-v3/crossconfig.m4
  21e660b6ad1acb38a925de8aee375f12  libstdc++-v3/doc/Makefile.am
  015a7bc96be2528c79352941cf0f8da0  libstdc++-v3/doc/Makefile.in
  3f7ff07f68cc7610addc1921bc125548  libstdc++-v3/doc/doxygen/Intro.3
--- 147514,147523 ----
  53df82982400fd3d426f3fd0e0c37b54  libstdc++-v3/config/os/vxworks/ctype_configure_char.cc
  a3f907fa7f71dc9eb08755c9c438accc  libstdc++-v3/config/os/vxworks/ctype_inline.h
  e8e7da2b87b17dcd2c2faadb8b5cd1ad  libstdc++-v3/config/os/vxworks/os_defines.h
! 0a3e0c39cff2046f50d98471fd1988b7  libstdc++-v3/configure
! 159707023fcf6084313b6d6e970be4b2  libstdc++-v3/configure.ac
  ac3c5c4c31f1e2c1f6e793bafb5f3931  libstdc++-v3/configure.host
! e9366e11a064aa5c3169c19d2164c799  libstdc++-v3/crossconfig.m4
  21e660b6ad1acb38a925de8aee375f12  libstdc++-v3/doc/Makefile.am
  015a7bc96be2528c79352941cf0f8da0  libstdc++-v3/doc/Makefile.in
  3f7ff07f68cc7610addc1921bc125548  libstdc++-v3/doc/doxygen/Intro.3
*************** f3a54a6315d716742603d33f454f2c19  libstd
*** 147438,147444 ****
  f66b4b01119c005cf471450613fc105b  libstdc++-v3/doc/html/manual/containers_and_c.html
  5905f8be24ae69bb804c3d5a6a4abf7d  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
! 90b457b0d4240ee5b826a815bcd90912  libstdc++-v3/doc/html/manual/debug_mode_design.html
  397ce9357678670b7c451c92eab7cb57  libstdc++-v3/doc/html/manual/debug_mode_semantics.html
  1fe03067a558eb3fd4b3a8c1337db0d1  libstdc++-v3/doc/html/manual/debug_mode_using.html
  ac31629383ea02b6f9d9689f5dd5494c  libstdc++-v3/doc/html/manual/diagnostics.html
--- 147633,147639 ----
  f66b4b01119c005cf471450613fc105b  libstdc++-v3/doc/html/manual/containers_and_c.html
  5905f8be24ae69bb804c3d5a6a4abf7d  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
! b58c9f1877e0fad06fcb855c15431dfc  libstdc++-v3/doc/html/manual/debug_mode_design.html
  397ce9357678670b7c451c92eab7cb57  libstdc++-v3/doc/html/manual/debug_mode_semantics.html
  1fe03067a558eb3fd4b3a8c1337db0d1  libstdc++-v3/doc/html/manual/debug_mode_using.html
  ac31629383ea02b6f9d9689f5dd5494c  libstdc++-v3/doc/html/manual/diagnostics.html
*************** af3361d0d0af961859ec0346c38ac8c8  libstd
*** 147716,147722 ****
  8fb8db51febba73cfb5456272d1dcb7a  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
  0423695ef5d72eb026dfccb3b68e16ac  libstdc++-v3/doc/xml/manual/debug.xml
! a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  90361f264f5edc899c47c155c4106f24  libstdc++-v3/doc/xml/manual/diagnostics.xml
  3680906036c20b1ccc54e2d06b5a3a24  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
  0f2b78b7b0ac8c29796c1f480b6880dd  libstdc++-v3/doc/xml/manual/evolution.xml
--- 147911,147917 ----
  8fb8db51febba73cfb5456272d1dcb7a  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
  0423695ef5d72eb026dfccb3b68e16ac  libstdc++-v3/doc/xml/manual/debug.xml
! f23396d370a73693fc3a9b59b5cff3ef  libstdc++-v3/doc/xml/manual/debug_mode.xml
  90361f264f5edc899c47c155c4106f24  libstdc++-v3/doc/xml/manual/diagnostics.xml
  3680906036c20b1ccc54e2d06b5a3a24  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
  0f2b78b7b0ac8c29796c1f480b6880dd  libstdc++-v3/doc/xml/manual/evolution.xml
*************** abf1c74de0fb52f696034bd48432d075  libstd
*** 147784,147790 ****
  34446381e4c4746a62681665aebf236a  libstdc++-v3/include/bits/c++config
  5cbbd0fafb904f86c9ddce3fc54380f1  libstdc++-v3/include/bits/char_traits.h
  9a3227d14b324832ae22b4c7ec6979e2  libstdc++-v3/include/bits/charconv.h
! ef5da941e610aa07597222bbacff9975  libstdc++-v3/include/bits/chrono.h
  d0d10dddbd3971b63c4733b04e1bc69a  libstdc++-v3/include/bits/chrono_io.h
  1f26067336c4957237db887ab1ce6b55  libstdc++-v3/include/bits/codecvt.h
  53f7e45e350f1bb99b3d67e27f914b61  libstdc++-v3/include/bits/concept_check.h
--- 147979,147985 ----
  34446381e4c4746a62681665aebf236a  libstdc++-v3/include/bits/c++config
  5cbbd0fafb904f86c9ddce3fc54380f1  libstdc++-v3/include/bits/char_traits.h
  9a3227d14b324832ae22b4c7ec6979e2  libstdc++-v3/include/bits/charconv.h
! a15f9dcf8ee271924862e5e3c21b9bd5  libstdc++-v3/include/bits/chrono.h
  d0d10dddbd3971b63c4733b04e1bc69a  libstdc++-v3/include/bits/chrono_io.h
  1f26067336c4957237db887ab1ce6b55  libstdc++-v3/include/bits/codecvt.h
  53f7e45e350f1bb99b3d67e27f914b61  libstdc++-v3/include/bits/concept_check.h
*************** f9e306b8cee74f13390d2c91f994d69f  libstd
*** 147905,147911 ****
  9414705c520a817ae3b22dec29912b18  libstdc++-v3/include/bits/stdexcept_throwfwd.h
  ac8c75ff38bcadb8aebb2f0148bff370  libstdc++-v3/include/bits/stl_algo.h
  bb3f76482179ec4ebe183284d0d69874  libstdc++-v3/include/bits/stl_algobase.h
! 4e5a06e505381e0b1af562ff59670f89  libstdc++-v3/include/bits/stl_bvector.h
  c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
  3e4f6e814111cf95a66ca90d92f7cee6  libstdc++-v3/include/bits/stl_deque.h
  dad6f36c0bb9a2b5c5cfe42d6904e350  libstdc++-v3/include/bits/stl_function.h
--- 148100,148106 ----
  9414705c520a817ae3b22dec29912b18  libstdc++-v3/include/bits/stdexcept_throwfwd.h
  ac8c75ff38bcadb8aebb2f0148bff370  libstdc++-v3/include/bits/stl_algo.h
  bb3f76482179ec4ebe183284d0d69874  libstdc++-v3/include/bits/stl_algobase.h
! 93fb042c4fe4f9ba7e63ccbb7c5f3845  libstdc++-v3/include/bits/stl_bvector.h
  c53878727e94c56c0b362d17dfe0fca2  libstdc++-v3/include/bits/stl_construct.h
  3e4f6e814111cf95a66ca90d92f7cee6  libstdc++-v3/include/bits/stl_deque.h
  dad6f36c0bb9a2b5c5cfe42d6904e350  libstdc++-v3/include/bits/stl_function.h
*************** ddd4bdc2fa29f8f2aa3386cead9ebcb2  libstd
*** 147951,147958 ****
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
  682dec8d9b388681bc1f171ba0c5590e  libstdc++-v3/include/bits/vec_ops.h
  fe1be23d00db0d87529a75faf3afb98a  libstdc++-v3/include/bits/vector.tcc
! 0098dc61ef157982e654da7b6e12da5b  libstdc++-v3/include/bits/version.def
! bfe65712895a2702ace0010f7a3d7af2  libstdc++-v3/include/bits/version.h
  07c6aeb4ce2629a1da2d63d08e65c0f8  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
  7f5b12607c4d7cbbcf705b672613447b  libstdc++-v3/include/c/cctype
--- 148146,148153 ----
  16c6db3f5b1e7b3e37c3febbf4dc4e8c  libstdc++-v3/include/bits/valarray_before.h
  682dec8d9b388681bc1f171ba0c5590e  libstdc++-v3/include/bits/vec_ops.h
  fe1be23d00db0d87529a75faf3afb98a  libstdc++-v3/include/bits/vector.tcc
! 22927f0f08145352905ba0aaa58134ee  libstdc++-v3/include/bits/version.def
! 9daae6860a957a3a5a26eb21f7324d8e  libstdc++-v3/include/bits/version.h
  07c6aeb4ce2629a1da2d63d08e65c0f8  libstdc++-v3/include/bits/version.tpl
  d99b1b69e5f87e5a631c8a881d053766  libstdc++-v3/include/c/cassert
  7f5b12607c4d7cbbcf705b672613447b  libstdc++-v3/include/c/cctype
*************** f1c08a4c9a736109edfd3c39c60c1669  libstd
*** 148504,148510 ****
  296bd89909b318bdabaa47ea5703c2b3  libstdc++-v3/include/std/atomic
  43d5b40ea90d5c416339579b4b867b3f  libstdc++-v3/include/std/barrier
  085ec2d298f0be079b303330b81b05d1  libstdc++-v3/include/std/bit
! 77a61cb2f8d3877899db65086d807411  libstdc++-v3/include/std/bitset
  221c225c0ffb7ac1a214c4da510bfdcc  libstdc++-v3/include/std/charconv
  14b6d91c13fb07b8ce2bdcf49753a183  libstdc++-v3/include/std/chrono
  6250fdc57cc9fcf4c5cc699808a8871f  libstdc++-v3/include/std/codecvt
--- 148699,148705 ----
  296bd89909b318bdabaa47ea5703c2b3  libstdc++-v3/include/std/atomic
  43d5b40ea90d5c416339579b4b867b3f  libstdc++-v3/include/std/barrier
  085ec2d298f0be079b303330b81b05d1  libstdc++-v3/include/std/bit
! 8def829b781a39346d0da630d247e7ee  libstdc++-v3/include/std/bitset
  221c225c0ffb7ac1a214c4da510bfdcc  libstdc++-v3/include/std/charconv
  14b6d91c13fb07b8ce2bdcf49753a183  libstdc++-v3/include/std/chrono
  6250fdc57cc9fcf4c5cc699808a8871f  libstdc++-v3/include/std/codecvt
*************** c64ab520b4f6639a904aff1b2898fe5d  libstd
*** 148520,148526 ****
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  5f6d1d543aa97204300a7a76284f8775  libstdc++-v3/include/std/flat_map
  c3b66598ccd8ea2009de9b04433b7dcf  libstdc++-v3/include/std/flat_set
! 5d82d308f832bee1efe5b1082a5bf6c1  libstdc++-v3/include/std/format
  821d1dff1ce8d861767808c7c5eab838  libstdc++-v3/include/std/forward_list
  10ba06a4268328778f0feab5e3778f91  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
--- 148715,148721 ----
  d1dc8325fc8c069a07bab71a935bced3  libstdc++-v3/include/std/filesystem
  5f6d1d543aa97204300a7a76284f8775  libstdc++-v3/include/std/flat_map
  c3b66598ccd8ea2009de9b04433b7dcf  libstdc++-v3/include/std/flat_set
! b16e263a86b68b229b29a2bbd0356402  libstdc++-v3/include/std/format
  821d1dff1ce8d861767808c7c5eab838  libstdc++-v3/include/std/forward_list
  10ba06a4268328778f0feab5e3778f91  libstdc++-v3/include/std/fstream
  5907213253b81e40fd9101e5d092fc82  libstdc++-v3/include/std/functional
*************** bc14d87c108d5fa9b39e85c939e01550  libstd
*** 148736,148742 ****
  9fb9720f94d0ef5c04cca94f7eee162f  libstdc++-v3/libsupc++/vmi_class_type_info.cc
  6713dd603339580d0691802ad0b1ed36  libstdc++-v3/libsupc++/vterminate.cc
  b9118cf900271d7d58361c1295e1945d  libstdc++-v3/libsupc++/vtv_stubs.cc
! e88dc2fa68ea978011d41472f6dab4fa  libstdc++-v3/linkage.m4
  b89937ce5dad12dac8ae87864a728181  libstdc++-v3/po/Makefile.am
  6321c23acc02ce612d563a8c52873f4d  libstdc++-v3/po/Makefile.in
  c023fe871df3212938073242c8197eb3  libstdc++-v3/po/POTFILES.in
--- 148931,148937 ----
  9fb9720f94d0ef5c04cca94f7eee162f  libstdc++-v3/libsupc++/vmi_class_type_info.cc
  6713dd603339580d0691802ad0b1ed36  libstdc++-v3/libsupc++/vterminate.cc
  b9118cf900271d7d58361c1295e1945d  libstdc++-v3/libsupc++/vtv_stubs.cc
! 7df858133064062b7312bcb6d3a2822d  libstdc++-v3/linkage.m4
  b89937ce5dad12dac8ae87864a728181  libstdc++-v3/po/Makefile.am
  6321c23acc02ce612d563a8c52873f4d  libstdc++-v3/po/Makefile.in
  c023fe871df3212938073242c8197eb3  libstdc++-v3/po/POTFILES.in
*************** efc2d383fef2d2a712b15fabea12d717  libstd
*** 148825,148831 ****
  659a979550a9164c9cc00eadc56c1ec0  libstdc++-v3/src/c++11/mutex_pool.h
  bcc29315c82a14b52c6365db75dda9ca  libstdc++-v3/src/c++11/ostream-inst.cc
  e48ef7a6cf2da7685415cd5d955300bf  libstdc++-v3/src/c++11/placeholders.cc
! 96d215af0042873c7a358f976e98f259  libstdc++-v3/src/c++11/random.cc
  6bc08d9625685244d6b0aaf82383cbf3  libstdc++-v3/src/c++11/regex.cc
  0de8c751a515414ac6a35a29f43b4fa0  libstdc++-v3/src/c++11/shared_ptr.cc
  0b0cd40b1a6354ab1889e430bd8ecd11  libstdc++-v3/src/c++11/snprintf_lite.cc
--- 149020,149026 ----
  659a979550a9164c9cc00eadc56c1ec0  libstdc++-v3/src/c++11/mutex_pool.h
  bcc29315c82a14b52c6365db75dda9ca  libstdc++-v3/src/c++11/ostream-inst.cc
  e48ef7a6cf2da7685415cd5d955300bf  libstdc++-v3/src/c++11/placeholders.cc
! 4fd221907296ad6d12451aa0b4cc4e5c  libstdc++-v3/src/c++11/random.cc
  6bc08d9625685244d6b0aaf82383cbf3  libstdc++-v3/src/c++11/regex.cc
  0de8c751a515414ac6a35a29f43b4fa0  libstdc++-v3/src/c++11/shared_ptr.cc
  0b0cd40b1a6354ab1889e430bd8ecd11  libstdc++-v3/src/c++11/snprintf_lite.cc
*************** b4fa33c3234234ee50ec148cb246a424  libstd
*** 148878,148892 ****
  e017d47cedd4e843177ec9ff2c936541  libstdc++-v3/src/c++20/clock.cc
  beadb627afafbd9d018802046c0b4403  libstdc++-v3/src/c++20/cow-string-inst.cc
  950ea458edaf556ab767e8e46c180ee3  libstdc++-v3/src/c++20/format-inst.cc
! 94b3ab191e8fe566a951ac2b4f081c40  libstdc++-v3/src/c++20/format.cc
  c2bd27af25e57adce5807e0f01a2d0dc  libstdc++-v3/src/c++20/sstream-inst.cc
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
  c8e15a23e0318d4217cc91b00e606cee  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
! 7c8cb4e8c454557197d2d63ced1992bb  libstdc++-v3/src/c++23/Makefile.am
! b00f9570f9f027f375c731351ae64403  libstdc++-v3/src/c++23/Makefile.in
  3c95970ad4fd23117b63a99dd3241ebe  libstdc++-v3/src/c++23/libstdc++.modules.json.in
  9d2dc72c1a96e4af02d5f86278cb705b  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
--- 149073,149087 ----
  e017d47cedd4e843177ec9ff2c936541  libstdc++-v3/src/c++20/clock.cc
  beadb627afafbd9d018802046c0b4403  libstdc++-v3/src/c++20/cow-string-inst.cc
  950ea458edaf556ab767e8e46c180ee3  libstdc++-v3/src/c++20/format-inst.cc
! 6f52cb5166806e80230cc27bc6c99101  libstdc++-v3/src/c++20/format.cc
  c2bd27af25e57adce5807e0f01a2d0dc  libstdc++-v3/src/c++20/sstream-inst.cc
  23187a5ee053acd65f32c0dc2ac4bdf7  libstdc++-v3/src/c++20/string-inst.cc
  50ac2e00d5794df965e47509f3c16cb5  libstdc++-v3/src/c++20/syncbuf.cc
  0dfa4a770289b4e926b8281770732d5a  libstdc++-v3/src/c++20/tzdata.zi
  c8e15a23e0318d4217cc91b00e606cee  libstdc++-v3/src/c++20/tzdb.cc
  ac7b7a080d5f7aa8fe6a26188631fc18  libstdc++-v3/src/c++20/windows_zones-map.h
! 863fc49f52a3a3665416a7c88fc4f3e7  libstdc++-v3/src/c++23/Makefile.am
! 0d7332606e5b7973ac0d4398f18cfd17  libstdc++-v3/src/c++23/Makefile.in
  3c95970ad4fd23117b63a99dd3241ebe  libstdc++-v3/src/c++23/libstdc++.modules.json.in
  9d2dc72c1a96e4af02d5f86278cb705b  libstdc++-v3/src/c++23/print.cc
  15f6b28b71ad24bc5b6d33c21048e59a  libstdc++-v3/src/c++23/stacktrace.cc
*************** e5fcb5f023bfc3d27671aa858bd578e5  libstd
*** 149403,149408 ****
--- 149598,149605 ----
  ef5ce132b10534bed9b3ad7fdd12c45b  libstdc++-v3/testsuite/20_util/bitset/access/118341_smoke.cc
  0be3c1005581d429a9faed927cfeb925  libstdc++-v3/testsuite/20_util/bitset/access/constexpr.cc
  43d71c85a4ec0e174c7f0b853dbd8d54  libstdc++-v3/testsuite/20_util/bitset/access/dr396.cc
+ 16323ee5f82784cd561128f3d7a7d28f  libstdc++-v3/testsuite/20_util/bitset/access/range_proxy.cc
+ f920c5d4e63d7ef878fa93fb7c9c9508  libstdc++-v3/testsuite/20_util/bitset/access/ref_swap.cc
  a6b86f8a55e9b1eead484667cf6253fb  libstdc++-v3/testsuite/20_util/bitset/access/subscript.cc
  ccca031a446625e2bda8a0f43d00b14f  libstdc++-v3/testsuite/20_util/bitset/access/subscript_const_neg.cc
  12a0b968a4d225ad6b88e083c68c47b0  libstdc++-v3/testsuite/20_util/bitset/access/to_string.cc
*************** df7be4683e3a26a290854738516c5111  libstd
*** 150285,150290 ****
--- 150482,150488 ----
  73a667577bedc64786c6f5d7f6a5b955  libstdc++-v3/testsuite/20_util/pointer_traits/requirements/typedefs.cc
  3d4d1cdd09a11b7a212ba28fd15c2f0e  libstdc++-v3/testsuite/20_util/polymorphic_allocator/1.cc
  921ab22ad1c8b959803b45c60c3e92b5  libstdc++-v3/testsuite/20_util/polymorphic_allocator/allocate_object.cc
+ c1b1eaeee3bc0da509305f299c2de1f2  libstdc++-v3/testsuite/20_util/polymorphic_allocator/at_least.cc
  157477fb697b0e84f4f36c4449264c45  libstdc++-v3/testsuite/20_util/polymorphic_allocator/construct_c++2a.cc
  b26d23b5080d9f7b8062a627e6d9d355  libstdc++-v3/testsuite/20_util/polymorphic_allocator/construct_pair.cc
  6226f7e617116802ee9168dcfe8d3905  libstdc++-v3/testsuite/20_util/polymorphic_allocator/lwg3237.cc
*************** b025e5b427377546e909828f639caa82  libstd
*** 153557,153562 ****
--- 153755,153762 ----
  ad15fc56a5a30614ca5f7a9ede3c9c88  libstdc++-v3/testsuite/23_containers/vector/bool/cons/noexcept_move_construct.cc
  e0b11c4dbbdafef2f8d275b74b88c682  libstdc++-v3/testsuite/23_containers/vector/bool/element_access/1.cc
  84a82a207e12552b87bf4fb648202e46  libstdc++-v3/testsuite/23_containers/vector/bool/element_access/constexpr.cc
+ d00afebc2f16d01121a57a893a2639fa  libstdc++-v3/testsuite/23_containers/vector/bool/element_access/range_proxy.cc
+ 085f590584104311fd5fdfec01e749a7  libstdc++-v3/testsuite/23_containers/vector/bool/element_access/ref_swap.cc
  cbc20ed4a734956b0114e35076144b6f  libstdc++-v3/testsuite/23_containers/vector/bool/emplace.cc
  9bba5ce3ba0483f8ef7cb5a64b90bd8f  libstdc++-v3/testsuite/23_containers/vector/bool/emplace_cxx17_return.cc
  61dccf009d507fd3f577a5aeacafcbf6  libstdc++-v3/testsuite/23_containers/vector/bool/emplace_rvalue.cc
*************** a3f6acaf0f148ccc887838a6ce174a0b  libstd
*** 153577,153583 ****
  ff9d5673f40678b2d4268d0b9a93a134  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/insert_range.cc
  48629400552c3855720bc8e0a59d85bb  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/1.cc
  71934215bf3116918831a09da7b79072  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/2.cc
! 780e46ea3d7c50d8c8512793253f488f  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc
  31c799452b75d4a7fb199d7b5f443181  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc
  ad660fda3c29ab35eedf7379130c96b3  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/dr438/constructor.cc
  f4381d5476ae68861583669200255268  libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc
--- 153777,153783 ----
  ff9d5673f40678b2d4268d0b9a93a134  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/insert/insert_range.cc
  48629400552c3855720bc8e0a59d85bb  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/1.cc
  71934215bf3116918831a09da7b79072  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/2.cc
! 67070cb3a4c644e9a9ea717b060d7644  libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc
  31c799452b75d4a7fb199d7b5f443181  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/citerators.cc
  ad660fda3c29ab35eedf7379130c96b3  libstdc++-v3/testsuite/23_containers/vector/bool/requirements/dr438/constructor.cc
  f4381d5476ae68861583669200255268  libstdc++-v3/testsuite/23_containers/vector/bool/swap.cc
*************** adc6af2775128f30c704ec44557da0a1  libstd
*** 156188,156197 ****
  832f8d573494c3abf8c0f6500b2032dd  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
  e9e60d498c74c0a3d23036c3eba3d49b  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
  10b6e95add9984bd29138cd25bc3a19f  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file_108178.cc
! cffb913862500cfd29affa80e490e98a  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc
! 05dc7e66d0dfa60391d177d38acd0c39  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/2.cc
! d9bf221401c7689900c22be0c813dced  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/3.cc
! 64e47d79625895207fe2b6d78a89ded6  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/4.cc
  5fcd86f1a789d066b4a083fe71dabed4  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
  c71f77900df86672b089222e0d14255b  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
  1a5b1ee849c9982ffc64129da7d6b274  libstdc++-v3/testsuite/27_io/filesystem/operations/create_symlink.cc
--- 156388,156397 ----
  832f8d573494c3abf8c0f6500b2032dd  libstdc++-v3/testsuite/27_io/filesystem/operations/copy.cc
  e9e60d498c74c0a3d23036c3eba3d49b  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file.cc
  10b6e95add9984bd29138cd25bc3a19f  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_file_108178.cc
! b525967ce54dc62a026c3eb55dbbc17a  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc
! 44211ecba3fdfd7a8cb2bb525c7f643b  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/2.cc
! 5800b3307eda160468cd0e6d825bbcd0  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/3.cc
! 8b0f8b892fa5a35a601b5bf0737e01cf  libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/4.cc
  5fcd86f1a789d066b4a083fe71dabed4  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directories.cc
  c71f77900df86672b089222e0d14255b  libstdc++-v3/testsuite/27_io/filesystem/operations/create_directory.cc
  1a5b1ee849c9982ffc64129da7d6b274  libstdc++-v3/testsuite/27_io/filesystem/operations/create_symlink.cc
*************** aecb3356c64edbcd333d271606efd55f  libstd
*** 156203,156209 ****
  9aa4edaec681b4c91aa1fc15e09fd6bf  libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
  e11957df9e55154829ef2c88f05939da  libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
  21ce7cfab3a7d4fae787d92e0964bbf0  libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
! d3bfb9763a0417404cbf25c413706c20  libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc
  b647d57a9901c82d0129c5201acc9094  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
  42bbabf2da09905ae37bbba098e11e54  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
  7a4057ce0324bf3666a807bf226db6b0  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
--- 156403,156409 ----
  9aa4edaec681b4c91aa1fc15e09fd6bf  libstdc++-v3/testsuite/27_io/filesystem/operations/is_empty.cc
  e11957df9e55154829ef2c88f05939da  libstdc++-v3/testsuite/27_io/filesystem/operations/last_write_time.cc
  21ce7cfab3a7d4fae787d92e0964bbf0  libstdc++-v3/testsuite/27_io/filesystem/operations/permissions.cc
! 8c96b3b2206b4a258bec4e71bdf5c09d  libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc
  b647d57a9901c82d0129c5201acc9094  libstdc++-v3/testsuite/27_io/filesystem/operations/proximate.cc
  42bbabf2da09905ae37bbba098e11e54  libstdc++-v3/testsuite/27_io/filesystem/operations/read_symlink.cc
  7a4057ce0324bf3666a807bf226db6b0  libstdc++-v3/testsuite/27_io/filesystem/operations/relative.cc
*************** fa9cb661a609c85c1c56083ca7d1b07f  libstd
*** 156212,156219 ****
  1c86186d63e9b0d895cb79ffe26403e5  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
  5b1f139296baa9d7352b83f77632719d  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
  e7e092a06ff77f3e5512bfbdf499ef49  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
! 67ef0d7370ff91e2c7e865251870e776  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
! dcac9365571fc86d1db025d0b10eb773  libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
  b4eec234efb26b94b92ce5a57a3fe46e  libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
  bd3e7e9b4dd0fdc9590ee569b21617aa  libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
  6dfbc01f57a0a31caab30c71dc1b23ba  libstdc++-v3/testsuite/27_io/filesystem/path/108636.cc
--- 156412,156419 ----
  1c86186d63e9b0d895cb79ffe26403e5  libstdc++-v3/testsuite/27_io/filesystem/operations/rename.cc
  5b1f139296baa9d7352b83f77632719d  libstdc++-v3/testsuite/27_io/filesystem/operations/resize_file.cc
  e7e092a06ff77f3e5512bfbdf499ef49  libstdc++-v3/testsuite/27_io/filesystem/operations/space.cc
! 313722d3d10698a6eaaa7de110cb505b  libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
! 7fa64d46c7f92f1329be5a82a8c0744d  libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
  b4eec234efb26b94b92ce5a57a3fe46e  libstdc++-v3/testsuite/27_io/filesystem/operations/temp_directory_path.cc
  bd3e7e9b4dd0fdc9590ee569b21617aa  libstdc++-v3/testsuite/27_io/filesystem/operations/weakly_canonical.cc
  6dfbc01f57a0a31caab30c71dc1b23ba  libstdc++-v3/testsuite/27_io/filesystem/path/108636.cc
*************** ae67e12b1c6f9ffca9d7f3023ef13a9b  libstd
*** 158119,158125 ****
  32d4944898c5e42531913c85e4ea9ff6  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
  a5010e1860bebb1e16830ce834c641b9  libstdc++-v3/testsuite/lib/dg-options.exp
  553de715cd949bf28f1c09918d91f7e3  libstdc++-v3/testsuite/lib/gdb-test.exp
! 1a47e7e45a62ba86e1733481775dd887  libstdc++-v3/testsuite/lib/libstdc++.exp
  6acf65c30e8c11621ea821f66462e155  libstdc++-v3/testsuite/lib/prune.exp
  9869c7f65acdb8c56e8bf71f506efa5e  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
  52c743e70b23bd7101609f0386f83fb5  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
--- 158319,158325 ----
  32d4944898c5e42531913c85e4ea9ff6  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
  a5010e1860bebb1e16830ce834c641b9  libstdc++-v3/testsuite/lib/dg-options.exp
  553de715cd949bf28f1c09918d91f7e3  libstdc++-v3/testsuite/lib/gdb-test.exp
! 685da342a84446bbbb35d1f2f93745e4  libstdc++-v3/testsuite/lib/libstdc++.exp
  6acf65c30e8c11621ea821f66462e155  libstdc++-v3/testsuite/lib/prune.exp
  9869c7f65acdb8c56e8bf71f506efa5e  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
  52c743e70b23bd7101609f0386f83fb5  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
*************** fd44dfd4ba421163f0a14a74988ea97a  libvtv
*** 159494,159507 ****
  534c98ba47a56c08d77208f4c40a69fc  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  2d10540be0b9516e14daf48616877aad  ltmain.sh
! 880277beff498b3b6d760d03d3897ed6  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  92f6f16bc389d92c31885942b6b0f390  lto-plugin/Makefile.in
  79b337b8e2e684d93cd124b348d1261a  lto-plugin/aclocal.m4
  26e3d7e6d62bd000d0ad9db3b610e91c  lto-plugin/config.h.in
  b386dde9241d1c015a642d8ab491fa30  lto-plugin/configure
  40efd97088318d4823aab5e72c85acd0  lto-plugin/configure.ac
! bf9a10ddf7a918e207afd67ca6300b1a  lto-plugin/lto-plugin.c
  d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
  dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
--- 159694,159707 ----
  534c98ba47a56c08d77208f4c40a69fc  libvtv/vtv_utils.h
  247597a3fcc5b5aa8bd923351c59d853  ltgcc.m4
  2d10540be0b9516e14daf48616877aad  ltmain.sh
! 002620193630695a8abd8a0491803a79  lto-plugin/ChangeLog
  aced0d5ba993307440be577533b64eb3  lto-plugin/Makefile.am
  92f6f16bc389d92c31885942b6b0f390  lto-plugin/Makefile.in
  79b337b8e2e684d93cd124b348d1261a  lto-plugin/aclocal.m4
  26e3d7e6d62bd000d0ad9db3b610e91c  lto-plugin/config.h.in
  b386dde9241d1c015a642d8ab491fa30  lto-plugin/configure
  40efd97088318d4823aab5e72c85acd0  lto-plugin/configure.ac
! c518e97b135d85c77d084731510e25ad  lto-plugin/lto-plugin.c
  d00a1ca9cd8ba450f1a1028fd3e60dc3  lto-plugin/lto-plugin.map
  dee72a6a60e99528b0d17bf3ff9a1e15  ltoptions.m4
  bc2f6032c98896249eadb56177c7d357  ltsugar.m4
diff -Nrcpad gcc-17-20260621/fixincludes/ChangeLog gcc-17-20260628/fixincludes/ChangeLog
*** gcc-17-20260621/fixincludes/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/fixincludes/ChangeLog	Sun Jun 28 22:32:05 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-06-27  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* fixincl.c (extract_quoted_files): Add a const char * helper
+ 	variable.
+ 
+ 2026-06-22  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* fixincl.c (cksum_test): Remove trailing whitespace.
+ 	(quoted_file_exists): Remove trailing whitespace.
+ 	(extract_quoted_files): const char * -> char *.
+ 	(fix_with_system): Remove trailing whitespace.
+ 
  2026-05-30  Dhruv Chawla  <dhruvc@nvidia.com>
  
  	* README: Fix typos.
diff -Nrcpad gcc-17-20260621/fixincludes/fixincl.c gcc-17-20260628/fixincludes/fixincl.c
*** gcc-17-20260621/fixincludes/fixincl.c	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/fixincludes/fixincl.c	Sun Jun 28 22:32:05 2026
*************** cksum_test (char * pz_data, tTestDesc *
*** 650,656 ****
      char * fnm = strrchr(fname, '/');
      if (fnm != NULL)
        fname = fnm + 1;
!     
      errno = 0;
      cksum = (unsigned int)strtoul(p_test->pz_test_text, &fnm, 10);
      if (errno != 0)
--- 650,656 ----
      char * fnm = strrchr(fname, '/');
      if (fnm != NULL)
        fname = fnm + 1;
! 
      errno = 0;
      cksum = (unsigned int)strtoul(p_test->pz_test_text, &fnm, 10);
      if (errno != 0)
*************** cksum_test (char * pz_data, tTestDesc *
*** 691,697 ****
  
  static int
  quoted_file_exists (const char* pz_src_path,
!                     const char* pz_file_path, 
                      const char* pz_file)
  {
    char z[ MAXPATHLEN ];
--- 691,697 ----
  
  static int
  quoted_file_exists (const char* pz_src_path,
!                     const char* pz_file_path,
                      const char* pz_file)
  {
    char z[ MAXPATHLEN ];
*************** quoted_file_exists (const char* pz_src_p
*** 740,758 ****
  
  
  static void
! extract_quoted_files (char* pz_data, 
!                       const char* pz_fixed_file,
                        regmatch_t* p_re_match)
  {
!   char *pz_dir_end = strrchr (pz_fixed_file, '/');
    char *pz_incl_quot = pz_data;
  
    if (VLEVEL( VERB_APPLIES ))
!     fprintf (stderr, "Quoted includes in %s\n", pz_fixed_file);
  
    /*  Set "pz_fixed_file" to point to the containing subdirectory of the source
        If there is none, then it is in our current directory, ".".   */
  
    if (pz_dir_end == (char *) NULL)
      pz_fixed_file = ".";
    else
--- 740,759 ----
  
  
  static void
! extract_quoted_files (char* pz_data,
!                       char* pz_file,
                        regmatch_t* p_re_match)
  {
!   char *pz_dir_end = strrchr (pz_file, '/');
    char *pz_incl_quot = pz_data;
  
    if (VLEVEL( VERB_APPLIES ))
!     fprintf (stderr, "Quoted includes in %s\n", pz_file);
  
    /*  Set "pz_fixed_file" to point to the containing subdirectory of the source
        If there is none, then it is in our current directory, ".".   */
  
+   const char *pz_fixed_file = pz_file;
    if (pz_dir_end == (char *) NULL)
      pz_fixed_file = ".";
    else
*************** fix_with_system (tFixDesc* p_fixd,
*** 941,947 ****
        argsize = sizeof( z_cmd_fmt ) + strlen( pz_temp_file )
                + strlen( pz_file_source );
        parg_size = argsize;
!       
        if (p_fixd->fd_flags & FD_SHELL_SCRIPT)
          {
            argsize += strlen( z_subshell_start ) + strlen ( z_subshell_end );
--- 942,948 ----
        argsize = sizeof( z_cmd_fmt ) + strlen( pz_temp_file )
                + strlen( pz_file_source );
        parg_size = argsize;
! 
        if (p_fixd->fd_flags & FD_SHELL_SCRIPT)
          {
            argsize += strlen( z_subshell_start ) + strlen ( z_subshell_end );
diff -Nrcpad gcc-17-20260621/gcc/ChangeLog gcc-17-20260628/gcc/ChangeLog
*** gcc-17-20260621/gcc/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ChangeLog	Sun Jun 28 22:32:05 2026
***************
*** 1,3 ****
--- 1,1170 ----
+ 2026-06-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/125992
+ 	* config/s390/s390.md (*brx_stage1_<GPR:mode>): Add CC_REGNUM clobber.
+ 
+ 2026-06-27  Eikansh Gupta  <eikansh.gupta@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125385
+ 	* match.pd ((FTYPE) N CMP (FTYPE) M): Use range information
+ 	to decide whether integer operands are exactly representable.
+ 	((FTYPE) N CMP CST): Likewise.
+ 	* real.cc: Include backend.h and vr-values.h.
+ 	(format_helper::can_represent_range_value_p): New function.
+ 	* real.h (format_helper::can_represent_range_value_p): Declare.
+ 	* tree-core.h (class irange): Forward declare.
+ 
+ 2026-06-26  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/125977
+ 	* expr.cc (emit_block_move_via_pattern): Replace ops[6].value
+ 	in assert with GEN_INT (min_size).
+ 
+ 2026-06-26  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR target/125856
+ 	PR target/125865
+ 	* config/i386/i386-expand.cc (ix86_expand_set_or_cpymem):
+ 	Call ix86_expand_set_or_movmem for
+ 	TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES.
+ 	(ix86_expand_memset_val): New.
+ 	(ix86_expand_n_move_movmem): Renamed to ...
+ 	(ix86_expand_n_move_set_or_movmem): This.  Add a pointer to rtx
+ 	argument for memset.  Also expand memset.
+ 	(ix86_expand_n_overlapping_move_movmem): Renamed to ...
+ 	(ix86_expand_n_overlapping_move_set_or_movmem): This.  Add a
+ 	pointer to rtx argument for memset.  Also expand memset.
+ 	(ix86_expand_less_move_movmem): Renamed to ...
+ 	(ix86_expand_less_move_set_or_movmem): This.  Add a pointer to
+ 	rtx argument for memset.  Also expand memset.
+ 	(ix86_expand_movmem): Renamed to ...
+ 	(ix86_expand_set_or_movmem): This.  Add bool arguments for memcpy
+ 	and memset.  Also expand memcpy and memset.
+ 	* config/i386/i386-protos.h (ix86_expand_movmem): Renamed to ...
+ 	(ix86_expand_set_or_movmem): This.  Add bool arguments for memcpy
+ 	and memset.
+ 	* config/i386/i386.md (movmem<mode>): Replace ix86_expand_movmem
+ 	with ix86_expand_set_or_movmem.
+ 
+ 2026-06-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR target/123238
+ 	* config/i386/i386-expand.cc: Delay calling force_reg on
+ 	op_true and op_false.  Generate an AND then XOR sequence
+ 	if op_true and op_false are both CONST_VECTOR_P.
+ 	* config/i386/mmx.md (vcond_mask_<mode>v4hi): Allow operands
+ 	1 and 2 to be vector_or_const_vector_operand.
+ 	(vcond_mask_<mode>v2hi): Likewise.
+ 	(vcond_mask_<mode><mmxintvecmodelower>): Likewise.
+ 	(vcond_mask_<mode><mode>): Likewise.
+ 	* config/i386/sse.md (vcond_mask_<mode><sseintvecmodelower>):
+ 	Likewise.
+ 	(vcond_mask_<mode><sseintvecmodelower>): Likewise.
+ 	(vcond_mask_v1tiv1ti): Likewise.
+ 	(vcond_mask_<mode><sseintvecmodelower>): Likewise.
+ 	(vcond_mask_<mode><sseintvecmodelower>): Likewise.
+ 	* config/i386/predicates.md (vector_or_0_or_1s_operand): Delete
+ 	predicate with no remaining uses.
+ 
+ 2026-06-26  vekumar  <Venkataramanan.Kumar@amd.com>
+ 
+ 	PR target/125949
+ 	* config/i386/i386.md ("isa"): Add avxvnniint8.
+ 	("enabled"): Adjust for avxvnniint8.
+ 	* config/i386/sse.md (vpdp<vpdotprodtype>_<mode>): Adjust for
+ 	AVXVNNIINT8.
+ 
+ 2026-06-26  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/125972
+ 	* config/s390/s390.cc (s390_rtx_costs): Deal with non-compare
+ 	conditions during costing.  Also fix some indentation.
+ 
+ 2026-06-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/125875
+ 	* match.pd: When checking for !can_vec_perm_const_p also
+ 	allow variable permutes and use the vec_perm_indices CTOR
+ 	with the original tree operands.
+ 
+ 2026-06-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	* vec-perm-indices.h (vec_perm_indices::new_vector): New overload.
+ 	(vec_perm_indices::input_bitwise_zero_p): New method.
+ 	(vec_perm_indices::m_input0_bitwise_zero_p,
+ 	vec_perm_indices::m_input1_bitwise_zero_p): New members.
+ 	(vec_perm_indices::vec_perm_indices): Adjust.
+ 	(tree_to_vec_perm_indices): Declare.
+ 	* vec-perm-indices.cc (vec_perm_indices::new_vector): New overload.
+ 	(vec_perm_indices::new_expanded_vector): Adjust.
+ 	(tree_to_vec_perm_indices): New function.
+ 	* optabs-query.cc (can_vec_perm_const_p): Handle permute
+ 	patterns mapping to vec_shl/vec_shr.
+ 	* tree-vect-generic.cc (lower_vec_perm): Move vec_shl/vec_shr
+ 	detection to can_vec_perm_const_p and simplify.
+ 
+ 2026-06-26  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125979
+ 	* dbgcnt.def: Add ranger_cnt.
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Add debug_cnt.
+ 	(gimple_ranger::range_on_entry): Likewise.
+ 	(gimple_ranger::range_on_exit): Likewise.
+ 	(gimple_ranger::range_on_edge); Likewise.
+ 	(gimple_ranger::range_of_stmt): Likewise
+ 	(dom_ranger::range_of_expr): Likewise.
+ 	(dom_ranger::range_on_edge): Likewise.
+ 	(dom_ranger::range_of_stmt): Likewise.
+ 
+ 2026-06-26  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/125977
+ 	* builtins.cc (determine_block_size): Change len_rtx to reference
+ 	and set it to min size if min size == max size.
+ 	* expr.cc (emit_block_move_via_pattern): Assert count == min_size
+ 	if min_size == max_size.
+ 	(set_storage_via_setmem): Likewise.
+ 
+ 2026-06-26  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* config/aarch64/aarch64.cc
+ 	(aarch64_sched_first_cycle_multipass_dfa_lookahead): Return 0
+ 	when dispatch scheduling is enabled.
+ 
+ 2026-06-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (gcc_cv_as_ix86_quad): Remove.
+ 	* configure: Regenerate.
+ 	* config.in: Likewise.
+ 	* config/i386/sol2.h [!HAVE_AS_IX86_QUAD] (ASM_QUAD): Don't undefine.
+ 
+ 2026-06-26  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* configure.ac (gcc_cv_as_ix86_diff_sect_delta): Remove.
+ 	* configure: Regenerate.
+ 	* config.in: Likewise.
+ 	* config/i386/sol2.h [!HAVE_AS_IX86_DIFF_SECT_DELTA]
+ 	(ASM_PREFERRED_EH_DATA_FORMAT): Remove.
+ 	(JUMP_TABLES_IN_TEXT_SECTION): Likewise.
+ 	(ASM_OUTPUT_DWARF_PCREL): Likewise.
+ 
+ 2026-06-26  Jiahao Xu  <xujiahao@loongson.cn>
+ 
+ 	* config/loongarch/loongarch.cc (loongarch_sched_reassociation_width):
+ 	Get a tree_code instead of unsigned int.
+ 
+ 2026-06-25  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 
+ 	* config/riscv/riscv.md (seq_sne_qi): Mark name for debugging purposes
+ 	only.
+ 
+ 2026-06-25  Peter Bergner  <bergner@tenstorrent.com>
+ 
+ 	PR target/87466
+ 	* config/riscv/riscv.cc (TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P):
+ 	Define.
+ 
+ 2026-06-25  Manjunath Matti  <mmatti@linux.ibm.com>
+ 
+ 	* config/rs6000/predicates.md (const_0_to_6_operand): New predicate.
+ 	* config/rs6000/rs6000-builtins.def (__builtin_vsx_xxmulmul): Add new
+ 	builtin definitions under [future] stanza.
+ 	(__builtin_vsx_xxmulmulhiadd): Likewise.
+ 	(__builtin_vsx_xxmulmulloadd): Likewise.
+ 	(__builtin_vsx_xxssumudm): Likewise.
+ 	(__builtin_vsx_xxssumudmc): Likewise.
+ 	(__builtin_vsx_xxssumudmcext): Likewise.
+ 	(__builtin_vsx_xsaddadduqm): Likewise.
+ 	(__builtin_vsx_xsaddaddsuqm): Likewise.
+ 	(__builtin_vsx_xsaddsubuqm): Likewise.
+ 	(__builtin_vsx_xsaddsubsuqm): Likewise.
+ 	(__builtin_vsx_xsmerge2t1uqm): Likewise.
+ 	(__builtin_vsx_xsmerge2t2uqm): Likewise.
+ 	(__builtin_vsx_xsmerge2t3uqm): Likewise.
+ 	(__builtin_vsx_xsmerge3t1uqm): Likewise.
+ 	(__builtin_vsx_xsrebase2t1uqm): Likewise.
+ 	(__builtin_vsx_xsrebase2t2uqm): Likewise.
+ 	(__builtin_vsx_xsrebase2t3uqm): Likewise.
+ 	(__builtin_vsx_xsrebase2t4uqm): Likewise.
+ 	(__builtin_vsx_xsrebase3t1uqm): Likewise.
+ 	(__builtin_vsx_xsrebase3t2uqm): Likewise.
+ 	(__builtin_vsx_xsrebase3t3uqm): Likewise.
+ 	* config/rs6000/vsx.md (UNSPEC_XXMULMUL): Add UNSPEC entry.
+ 	(UNSPEC_XXMULMULHIADD): Likewise.
+ 	(UNSPEC_XXMULMULLOADD): Likewise.
+ 	(UNSPEC_XXSSUMUDM): Likewise.
+ 	(UNSPEC_XXSSUMUDMC): Likewise.
+ 	(UNSPEC_XXSSUMUDMCEXT): Likewise.
+ 	(UNSPEC_XSADDADDUQM): Likewise.
+ 	(UNSPEC_XSADDADDSUQM): Likewise.
+ 	(UNSPEC_XSADDSUBUQM): Likewise.
+ 	(UNSPEC_XSADDSUBSUQM): Likewise.
+ 	(UNSPEC_XSMERGE2T1UQM): Likewise.
+ 	(UNSPEC_XSMERGE2T2UQM): Likewise.
+ 	(UNSPEC_XSMERGE2T3UQM): Likewise.
+ 	(UNSPEC_XSMERGE3T1UQM): Likewise.
+ 	(UNSPEC_XSREBASE2T1UQM): Likewise.
+ 	(UNSPEC_XSREBASE2T2UQM): Likewise.
+ 	(UNSPEC_XSREBASE2T3UQM): Likewise.
+ 	(UNSPEC_XSREBASE2T4UQM): Likewise.
+ 	(UNSPEC_XSREBASE3T1UQM): Likewise.
+ 	(UNSPEC_XSREBASE3T2UQM): Likewise.
+ 	(UNSPEC_XSREBASE3T3UQM): Likewise.
+ 	(vsx_xxmulmul): New define_insn.
+ 	(vsx_xxmulmulhiadd): Likewise.
+ 	(vsx_xxmulmulloadd): Likewise.
+ 	(vsx_xxssumudm): Likewise.
+ 	(vsx_xxssumudmc): Likewise.
+ 	(vsx_xxssumudmcext): Likewise.
+ 	(vsx_xsaddadduqm): Likewise.
+ 	(vsx_xsaddaddsuqm): Likewise.
+ 	(vsx_xsaddsubuqm): Likewise.
+ 	(vsx_xsaddsubsuqm): Likewise.
+ 	(vsx_xsmerge2t1uqm): Likewise.
+ 	(vsx_xsmerge2t2uqm): Likewise.
+ 	(vsx_xsmerge2t3uqm): Likewise.
+ 	(vsx_xsmerge3t1uqm): Likewise.
+ 	(vsx_xsrebase2t1uqm): Likewise.
+ 	(vsx_xsrebase2t2uqm): Likewise.
+ 	(vsx_xsrebase2t3uqm): Likewise.
+ 	(vsx_xsrebase2t4uqm): Likewise.
+ 	(vsx_xsrebase3t1uqm): Likewise.
+ 	(vsx_xsrebase3t2uqm): Likewise.
+ 	(vsx_xsrebase3t3uqm): Likewise.
+ 	* doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions): Add
+ 	documentation for ECC cryptography builtins available on
+ 	future ISA.
+ 
+ 2026-06-25  Milan Tripkovic  <Milan.Tripkovic@rt-rk.com>
+ 	    Jeff Law   <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123884
+ 	PR target/106585
+ 	* config/riscv/bitmanip.md: Add new splits for single bit manipulation
+ 	cases followed by a sign extension.
+ 
+ 2026-06-25  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 	     Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR target/124019
+ 	* config/riscv/riscv.md (seq_sne_qi): New define_insn_and_split.
+ 
+ 2026-06-25  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	PR tree-optimization/102793
+ 	* tree-ssa-ifcombine.cc (bb_guards_loop_p): New function.
+ 	(ifcombine_ifandif): Use it to avoid combining the conditions
+ 	guarding a loop.
+ 	* tree-ssa-tail-merge.cc: Include tree-ssa-ifcombine.h and
+ 	tree-ssa.h.
+ 	(ifcombine_candidate_bbs): New static bitmap.
+ 	(apply_clusters): Collect the merged block's predecessors as
+ 	ifcombine candidates.
+ 	(tail_merge_optimize): Run tree_ssa_ifcombine_bb on the candidates;
+ 	return TODO_cleanup_cfg when it changed the CFG.
+ 
+ 2026-06-25  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	* gimple-predicate-analysis.cc (get_pred_info_from_cond_edge):
+ 	New function.
+ 	(predicate::init_from_control_deps): Use it.
+ 	(predicate::drop_conjuncts_implied_by): New method.
+ 	(uninit_analysis::is_use_guarded): Retry the superset test
+ 	after relaxing the definition predicate by the maybe-undef
+ 	edge conditions.
+ 	* gimple-predicate-analysis.h (class predicate): Declare
+ 	drop_conjuncts_implied_by.
+ 
+ 2026-06-25  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	* tree-ssa-ifcombine.cc: Include tree-ssa-ifcombine.h.
+ 	(recognize_if_then_else): Removed 'static'.
+ 	(tree_ssa_ifcombine_bb): Removed 'static'.
+ 	* tree-ssa-ifcombine.h: New file.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/125977
+ 	* cfgexpand.cc (pass_expand::execute): Guard ranger use
+ 	on optimize.
+ 
+ 2026-06-25  Artemiy Volkov  <artemiy.volkov@arm.com>
+ 
+ 	PR target/125716
+ 	* config/aarch64/aarch64-simd.md (*aarch64_simd_mov<mode>): Add
+ 	(?w,r) alternative for VSUB64 types.
+ 
+ 2026-06-25  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Revert:
+ 	2026-06-25  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125077
+ 	* config/mips/predicates.md (ssp_gp_operand): New
+ 	define_predicate.
+ 	(ssp_operand): New define_predicate.
+ 	(ssp_normal_operand): New define_predicate.
+ 	* config/mips/constraints.md (ZA): New define_constraint.
+ 	(ZB): New define_constraint.
+ 	* config/mips/mips.md (UNSPEC_SSP): New unspec.
+ 	(UNSPEC_SSP_GP): New unspec.
+ 	(cbranch<mode>4): Add '@' to generate the helper function taking
+ 	mode as a parameter.
+ 	(@stack_protect_combined_set_normal_<mode>): New define_insn.
+ 	(stack_protect_combined_set_abs64): New define_insn.
+ 	(@stack_protect_combined_test_internal_<mode>): New define_insn.
+ 	(stack_protect_combined_set): New define_expand.
+ 	(stack_protect_combined_test): New define_expand.
+ 	* config/mips/mips-protos.h (mips_canary_expose_gp_use):
+ 	Declare.
+ 	(mips_output_asm_load_canary): Declare.
+ 	* config/mips/mips.cc (mips_small_data_pattern_1): Don't rewrite
+ 	GP-relative symbol wrapped in UNSPEC_SSP_GP.
+ 	(mips_canary_expose_gp_use): Implement.
+ 	(mips_output_asm_load_canary): Implement.
+ 	(mips_print_operand): Allow 'w' to print d/w for DImode/SImode.
+ 
+ 2026-06-25  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125628
+ 	* config/mips/sync.md (sync_old_<optab><mode>): Fix
+ 	uninitialized operand use.
+ 	(sync_new_<optab><mode>): Fix uninitialized operand use, use the
+ 	same expression for the set source of operand 0 and 1.
+ 
+ 2026-06-25  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	PR target/125077
+ 	* config/mips/predicates.md (ssp_gp_operand): New
+ 	define_predicate.
+ 	(ssp_operand): New define_predicate.
+ 	(ssp_normal_operand): New define_predicate.
+ 	* config/mips/constraints.md (ZA): New define_constraint.
+ 	(ZB): New define_constraint.
+ 	* config/mips/mips.md (UNSPEC_SSP): New unspec.
+ 	(UNSPEC_SSP_GP): New unspec.
+ 	(cbranch<mode>4): Add '@' to generate the helper function taking
+ 	mode as a parameter.
+ 	(@stack_protect_combined_set_normal_<mode>): New define_insn.
+ 	(stack_protect_combined_set_abs64): New define_insn.
+ 	(@stack_protect_combined_test_internal_<mode>): New define_insn.
+ 	(stack_protect_combined_set): New define_expand.
+ 	(stack_protect_combined_test): New define_expand.
+ 	* config/mips/mips-protos.h (mips_canary_expose_gp_use):
+ 	Declare.
+ 	(mips_output_asm_load_canary): Declare.
+ 	* config/mips/mips.cc (mips_small_data_pattern_1): Don't rewrite
+ 	GP-relative symbol wrapped in UNSPEC_SSP_GP.
+ 	(mips_canary_expose_gp_use): Implement.
+ 	(mips_output_asm_load_canary): Implement.
+ 	(mips_print_operand): Allow 'w' to print d/w for DImode/SImode.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* target.def (reassociation_width): Use default_reassociation_width.
+ 	* targhooks.h (default_reassociation_width): Declare.
+ 	* targhooks.cc (default_reassociation_width): Define.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125953
+ 	* gimple-range.cc (gimple_ranger::range_of_expr): Document.
+ 	Fall back to global ranges if 'stmt' is not in the IL.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* tree-vect-patterns.cc (vect_recog_divmod_pattern): Pass
+ 	the division stmt as context for the range query on op0.
+ 	Use the active ranger.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* coretypes.h (enum tree_code): Declare.
+ 	* tree-core.h (enum tree_code): Adjust.
+ 	* target.def (reassociation_width): Get a tree_code instead
+ 	of unsigned int.
+ 	* doc/tm.texi: Regenerate.
+ 	* genmatch.cc (enum tree_code): Adjust.
+ 	* gimple-loop-versioning.cc (address_info_hasher::hash): Likewise.
+ 	* config/aarch64/aarch64.cc (aarch64_reassociation_width):
+ 	Likewise.
+ 	* config/loongarch/loongarch.cc
+ 	(loongarch_cpu_sched_reassociation_width): Likewise.
+ 	* config/mips/mips.cc (mips_sched_reassociation_width): Likewise.
+ 	* config/rs6000/rs6000.cc (rs6000_reassociation_width): Likewise.
+ 	* config/i386/i386.cc (ix86_reassociation_width): Likewise
+ 	and fix bogus compares.
+ 
+ 2026-06-25  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* doc/extend.texi (Constructing Calls): Document
+ 	__builtin_call_static_chain and __builtin_call_code_address
+ 	and update __builtin_call_with_static_chain.
+ 	(Nested Functions): Update.
+ 
+ 2026-06-25  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* builtins.def (BUILT_IN_CALL_CODE_ADDRESS,
+ 	BUILT_IN_CALL_STATIC_CHAIN): New.
+ 	* builtins.cc (expand_builtin): Emit errors for invalid uses.
+ 	(is_simple_builtin): Add new built-in functions.
+ 	* gimple-fold.cc (gimple_fold_builtin_call_info): New function.
+ 	(gimple_fold_builtin): Expand new built-ins for non-nested functions.
+ 	* tree-nested.cc (convert_tramp_reference_stmt): Ingore new built-ins.
+ 	(convert_gimple_call): Expand built-ins for nested functions.
+ 	* tree-inline.cc (initialize_inlined_parameters): Set a missing
+ 	static chain to NULL.
+ 
+ 2026-06-25  Jan Beulich  <jbeulich@suse.com>
+ 
+ 	* config/riscv/arch-canonicalize: Avoid f"..." strings.
+ 
+ 2026-06-24  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+ 
+ 	* config/i386/prfchwintrin.h (_m_prefetchw): Take
+ 	volatile const void * instead of void *.
+ 
+ 2026-06-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125910
+ 	* value-range.cc (prange::set_pt): Do not set PT when zero.
+ 	(prange::intersect): If the result is zero_p, clear PT.
+ 	(prange::verify_range): Verify points-to range is valid.
+ 	* value-range.h (zero_p): Do not assert, move to verify range.
+ 	(prange::set_pt): Only set PT when the range valid.
+ 
+ 2026-06-24  Vineet Gupta  <vineet.gupta@linux.dev>
+ 
+ 	PR debug/125421
+ 	* dwarf2out.cc (modified_type_die): Handle qualified_type being
+ 	a variant of dtype as if they were identical to avoid peeling a
+ 	typdef.
+ 	For named types, use dentry unconditionally as that is valid for
+ 	both cases of qualified_type == and  != dentry.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_GOMP_REDUCTION_START): New builtin.
+ 	(BUILT_IN_GOMP_REDUCTION_END): New builtin.
+ 	* omp-low.cc (lower_reduction_clauses): Replace
+ 	BUILT_IN_GOMP_ATOMIC_START / BUILT_IN_GOMP_ATOMIC_END with
+ 	BUILT_IN_GOMP_REDUCTION_START / BUILT_IN_GOMP_REDUCTION_END.
+ 	(lower_omp_sections): Likewise.
+ 	(lower_omp_scope): Likewise.
+ 	(lower_omp_for): Likewise.
+ 	* tree-ssa-alias.cc (check_fnspec): Handle
+ 	BUILT_IN_GOMP_REDUCTION_START and BUILT_IN_GOMP_REDUCTION_END as
+ 	memory barriers.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_GOMP_BARRIER): Change function to
+ 	GOMP_barrier_ext and type to BT_FN_VOID_INT.
+ 	(BUILT_IN_GOMP_BARRIER_CANCEL): Change function to
+ 	GOMP_barrier_cancel_ext and type to BT_FN_VOID_INT.
+ 	* omp-expand.cc (expand_omp_for_static_nochunk): Pass
+ 	GOMP_BARRIER_IMPLICIT_WORKSHARE to omp_build_barrier.
+ 	(expand_omp_for_static_chunk): Likewise.
+ 	(expand_omp_single): Likewise.
+ 	* omp-general.cc (omp_build_barrier): Add kind parameter; pass it
+ 	to GOMP_barrier_ext or GOMP_barrier_cancel_ext.
+ 	* omp-general.h (omp_build_barrier): Update declaration to add
+ 	kind parameter.
+ 	* omp-low.cc (lower_rec_input_clauses): Determine barrier kind from
+ 	the enclosing gimple statement code and pass it to omp_build_barrier.
+ 	(lower_omp_for_scan): Pass GOMP_BARRIER_IMPLICIT_WORKSHARE to
+ 	omp_build_barrier.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* builtin-types.def (BT_COMPLEX_INT, BT_FN_COMPLEX_INT): New types.
+ 	* omp-builtins.def (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING): New
+ 	builtin.
+ 	(BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING): Likewise.
+ 	* omp-expand.cc (expand_omp_for_static_nochunk): Replace separate calls
+ 	to public API functions with a single call to
+ 	GOMP_loop_static_worksharing or GOMP_distribute_static_worksharing, then
+ 	unpack id and count.
+ 	(expand_omp_for_static_chunk): Likewise.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* omp-builtins.def (BUILT_IN_GOMP_HAS_MASKED_THREAD_NUM): New builtin.
+ 	* omp-low.cc (lower_omp_master): Call it.
+ 
+ 2026-06-24  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* gimple-ssa-pta-constraints.cc (handle_call_arg): Mention in
+ 	comment that the function can get called in IPA mode.
+ 
+ 2026-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/110743
+ 	* tree-ssa-uninit.cc (maybe_warn_operand): Also cover
+ 	VIEW_CONVERT_EXPR uses for RMW bit clear/set pattern
+ 	detection.
+ 
+ 2026-06-24  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	* config/rs6000/altivec.md (V16QI_V2DI): New mode iterator.
+ 	(add<mode>3): Split into two patterns to support future ISA
+ 	alternatives.
+ 	(sub<mode>3): Likewise.
+ 	* config/rs6000/vsx.md (VIArith): New mode iterator.
+ 	(vsx_mul<mode>3): New insn pattern.
+ 	(smul<mode>3_highpart): Split into mode-specific patterns.
+ 	(umul<mode>3_highpart): Likewise.
+ 	(smulv8hi3_highpart): New insn pattern.
+ 	(smulv4si3_highpart): Likewise.
+ 	(smulv2di3_highpart): Likewise.
+ 	(umulv8hi3_highpart): Likewise.
+ 	(umulv4si3_highpart): Likewise.
+ 	(umulv2di3_highpart): Likewise.
+ 	* config/rs6000/rs6000-builtins.def (__builtin_vsx_xvmulhuh): New
+ 	builtin.
+ 	(__builtin_vsx_xvmulhsh): Likewise.
+ 	* config/rs6000/rs6000-overload.def (__builtin_vec_mulh): Add
+ 	overloads for vector multiply-high signed/unsigned halfword.
+ 	* config/rs6000/rs6000-gen-builtins.cc (enum bif_stanza): Add entry for
+ 	BSTZ_FUTURE_VSX.
+ 	(stanza_map): Add future-vsx stanza mapping.
+ 	(enable_string): Add ENB_FUTURE_VSX.
+ 	(write_decls): Add ENB_FUTURE_VSX to the bif_enable enum in the
+ 	generated header file.
+ 	* config/rs6000/rs6000.md (define_attr "isa"): Add future to the list
+ 	of ISA values.
+ 	(define_attr "enabled"): Add check for future ISA.
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_invalid_builtin): Handle
+ 	ENB_FUTURE_VSX and issue a diagnostic requiring -mcpu=future and -mvsx.
+ 	(rs6000_builtin_is_supported): Return TARGET_FUTURE && TARGET_VSX
+ 	for ENB_FUTURE_VSX built-ins.
+ 	* doc/extend.texi (PowerPC AltiVec/VSX Built-in Functions Available
+ 	on Future ISA): Document new functions.
+ 
+ 2026-06-24  Christopher Bazley  <chris.bazley@arm.com>
+ 
+ 	* config/aarch64/aarch64-sve.md: Update
+ 	vec_init<mode><Vel> and vec_shl_insert_<mode> to
+ 	accept all SVE vector modes.
+ 
+ 2026-06-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125958
+ 	* config/i386/i386-expand.cc (ix86_expand_lcp_stall_peephole):
+ 	Replace !REG_P (dest) with !GENERAL_REG_P (dest).
+ 
+ 2026-06-24  Lili Cui  <lili.cui@intel.com>
+ 
+ 	* config/i386/x86-tune-costs.h (generic_cost): Increase branch
+ 	mispredict scale from COSTS_N_INSNS (2) to COSTS_N_INSNS (2) + 3.
+ 
+ 2026-06-24  Jan Beulich  <jbeulich@suse.com>
+ 
+ 	* doc/ifn.texi: Drop blanks after @code.
+ 
+ 2026-06-23  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 	    Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* gimplify.cc (gimplify_omp_affinity): Use macros for accessing
+ 	iterator elements.
+ 	(compute_omp_iterator_count): Likewise.
+ 	(build_omp_iterator_loop): Likewise.
+ 	(copy_omp_iterator): Use a boolean to force creation of an
+ 	expanded iterator vector, instead of specifying the length explicitly.
+ 	(remove_unused_omp_iterator_vars): Use accessor macros.
+ 	(build_omp_iterators_loops): Likewise.
+ 	(enter_omp_iterator_loop_context_1): Likewise.
+ 	(extract_base_bit_offset): Likewise.
+ 	* omp-low.cc (lower_omp_map_iterator_expr): Likewise.
+ 	(lower_omp_map_iterator_size): Likewise.
+ 	* tree-inline.cc (copy_tree_body_r): Likewise.
+ 	* tree-pretty-print.cc (dump_omp_iterators): Likewise.
+ 	* tree.h (OMP_ITERATOR_VAR, OMP_ITERATOR_BEGIN, OMP_ITERATOR_END,
+ 	OMP_ITERATOR_STEP, OMP_ITERATOR_ORIG_STEP, OMP_ITERATOR_BLOCK,
+ 	OMP_ITERATOR_LABEL, OMP_ITERATOR_INDEX, OMP_ITERATOR_ELEMS,
+ 	OMP_ITERATOR_COUNT, OMP_ITERATOR_EXPANDED_P): New macros.
+ 	(make_omp_iterator, make_expanded_omp_iterator): New constructor
+ 	functions.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* ira-build.cc (ira_create_allocno): Initialize dependent
+ 	filters.
+ 	(copy_dependent_filters): New function to copy filters.
+ 	(create_cap_allocno): Use new function.
+ 	(propagate_allocno_info): Ditto.
+ 	(propagate_some_info_from_allocno): Ditto.
+ 	* ira-color.cc (ira_dependent_filter): New function that
+ 	calls lra_get_dependent_filter.
+ 	(assign_hard_reg): Use new function.
+ 	(improve_allocation): Ditto.
+ 	(fast_allocation): Ditto.
+ 	* ira-conflicts.cc (dependent_filter_same_reg_ok_p): New
+ 	function to check if a dependent filter allows the same reg.
+ 	(can_use_same_reg_p): Use new function.
+ 	* ira-int.h (struct ira_dependent_filter): New struct holding
+ 	allocno-specific dependent-filter properties.
+ 	(ALLOCNO_DEPENDENT_FILTERS): New accessor.
+ 	(ira_add_dependent_filter): Declare.
+ 	* ira-lives.cc (ira_add_dependent_filter): New function.
+ 	(process_dependent_filters): New function.
+ 	(process_bb_node_lives): Call new function.
+ 	* ira.cc (ira): Reset filters.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* config/riscv/constraints.md (TARGET_VECTOR ? V_REGS : NO_REGS):
+ 	Add widen overlap dependent constraint.
+ 	* config/riscv/riscv-protos.h (riscv_widen_overlap_ok): Declare.
+ 	* config/riscv/riscv.cc (riscv_widen_operand_ok): New function.
+ 	* config/riscv/vector.md: Use new constraint.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* lra-assigns.cc (find_hard_regno_for_1): Query dependent
+ 	filter of current pseudo.
+ 	* lra-constraints.cc (struct dependent_filter_cache_hasher): New
+ 	hasher.
+ 	(lra_init_dependent_filter_cache): New function.
+ 	(lra_finish_dependent_filter_cache): Ditto.
+ 	(lra_reset_dependent_filters): Ditto.
+ 	(lra_get_dependent_filter): New function to query (and add)
+ 	a dependent filter from/to the cache.
+ 	(lra_add_dependent_filter): New function to add a dependent
+ 	filter to an lra_reg.
+ 	(get_dependent_filter): New function to get a dependent filter
+ 	from a constraint.
+ 	(process_dependent_filters): New function to get all dependent
+ 	filters from the current insn's constraints.
+ 	(process_alt_operands): Initialize dependent-filter regset.
+ 	(curr_insn_transform): Fill lra_reg dependent filters.
+ 	* lra-int.h (struct dependent_filter): Declare.
+ 	(struct dependent_filter_entry): Ditto.
+ 	(lra_init_dependent_filter_cache): Ditto.
+ 	(lra_finish_dependent_filter_cache): Ditto.
+ 	* lra.cc (initialize_lra_reg_info_element): New function.
+ 	(finish_reg_info): Release dependent-filter vector.
+ 	(lra_init_once): Init hash table.
+ 	(lra_finish_once): Clear hash table.
+ 	* lra.h (lra_reset_dependent_filters): Declare.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* recog.cc (preprocess_constraints): Initialize dependent
+ 	filter.
+ 	(test_dependent_filter): New function wrapping
+ 	eval_dependent_filter.
+ 	(constrain_operands): Test dependent filter in strict mode.
+ 	* recog.h (struct operand_alternative): Declare
+ 	dependent_filters.
+ 	(alternative_dependent_filters): New function.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* doc/md.texi: Document dependent filters.
+ 	* doc/tm.texi: Ditto.
+ 	* doc/tm.texi.in: Ditto.
+ 	* genconfig.cc (main): Add number of dependent filters.
+ 	* genpreds.cc (add_constraint): Add dependent-filter reference
+ 	operand.
+ 	(process_define_register_constraint): Handle dependent filter.
+ 	(write_get_register_filter): Ditto.
+ 	(write_get_register_filter_id): Ditto.
+ 	(write_dependent_filter_helpers_h): Ditto.
+ 	(write_dependent_filter_functions_c): Ditto.
+ 	(write_tm_preds_h): Ditto.
+ 	(write_insn_preds_c): Ditto.
+ 	(main): Ditto.
+ 	* gensupport.cc (process_define_register_constraint): Ditto.
+ 	* gensupport.h (get_register_filter_id): Declare.
+ 	* rtl.def (DEFINE_REGISTER_CONSTRAINT): Adjust for dependent
+ 	filter.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* tree-vect-stmts.cc (vect_use_grouped_gather): Only use when
+ 	there are at least two pieces.
+ 
+ 2026-06-23  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	Revert:
+ 	2026-06-08  Xi Ruoyao  <xry111@xry111.site>
+ 
+ 	* config/mips/sync.md (sync_old_<optab><mode>): Fix
+ 	uninitialized operand use.
+ 	(sync_new_<optab><mode>): Fix uninitialized operand use, use the
+ 	same expression for the set source of operand 0 and 1.
+ 
+ 2026-06-23  Zhongyao Chen  <chen.zhongyao@zte.com.cn>
+ 	    Yuke Tang  <tang.yuke@zte.com.cn>
+ 
+ 	* config/riscv/autovec.md: Add auto-vectorization patterns for
+ 	Zvabd instructions.
+ 	* config/riscv/autovec-opt.md: Add widening absolute-difference
+ 	accumulate combine patterns.
+ 	* config/riscv/riscv-ext.def: Add Zvabd extension entry.
+ 	* config/riscv/riscv-ext.opt: Add Zvabd option.
+ 	* config/riscv/vector-iterators.md: Update for Zvabd.
+ 	* config/riscv/vector.md: Add Zvabd patterns.
+ 	* doc/riscv-ext.texi: Document zvabd extension.
+ 
+ 2026-06-23  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/125818
+ 	* config/aarch64/aarch64-sve-builtins-base.cc (svset_impl::fold): Fix
+ 	unsharing to ensure the returned stmt has the exact same lhs as the
+ 	original.
+ 
+ 2026-06-23  Sarvesh Chandra  <Sarvesh.Chandra@amd.com>
+ 	    Ashwin Godbole  <Ashwin.Godbole@amd.com>
+ 
+ 	PR target/107057
+ 	* config/i386/sse.md (avx512f_movddup512<mask_name>): Add a
+ 	register source alternative that emits vunpcklpd.
+ 	(avx_movddup256<mask_name>): Likewise.
+ 
+ 2026-06-23  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125893
+ 	* config/i386/i386-expand.cc (ix86_expand_lcp_stall_peephole): New.
+ 	* config/i386/i386-protos.h (ix86_expand_lcp_stall_peephole):
+ 	Likewise.
+ 	* config/i386/i386.md (TARGET_LCP_STALL peepholes): Call
+ 	ix86_expand_lcp_stall_peephole.
+ 
+ 2026-06-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/110743
+ 	* tree-ssa-uninit.cc (maybe_warn_operand): Suppress diagnostics
+ 	on RMW cycles setting/clearing bits.
+ 
+ 2026-06-23  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	* config/i386/sse.md (V_ANY_CBRANCH): New mode iterator.
+ 	(cond_vec_cbranch_any<mode>): New define_expand.
+ 	(cond_vec_cbranch_all<mode>): Ditto.
+ 
+ 2026-06-23  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	* dojump.cc (do_compare_rtx_and_jump): Use simplify_expand_binop
+ 	instead of expand_binop.
+ 
+ 2026-06-23  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	* doc/md.texi (vec_cbranch_all<mode>): Clarify how the
+ 	middle-end invoke the pattern.
+ 	(cond_vec_cbranch_all<mode>): Ditto.
+ 	(cond_len_vec_cbranch_all<mode>): Ditto.
+ 
+ 2026-06-23  Kishan Parmar  <kishan@linux.ibm.com>
+ 
+ 	* config/rs6000/rs6000-builtin.cc (rs6000_invalid_builtin): Handle
+ 	ENB_FUTURE_ALTIVEC and issue a diagnostic requiring -mcpu=future
+ 	and -maltivec.
+ 	(rs6000_builtin_is_supported): Check TARGET_FUTURE && TARGET_ALTIVEC
+ 	for ENB_FUTURE_ALTIVEC built-ins.
+ 	* config/rs6000/rs6000-gen-builtins.cc (enum bif_stanza): Add
+ 	BSTZ_FUTURE_ALTIVEC entry.
+ 	(stanza_map): Add future-altivec stanza mapping.
+ 	(enable_string): Add ENB_FUTURE_ALTIVEC.
+ 	(write_decls): Add ENB_FUTURE_ALTIVEC to the bif_enable enum in the
+ 	generated header file.
+ 
+ 2026-06-23  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-phiopt.cc (pass_cselim::execute): Don't
+ 	return TODO_TODO_update_ssa_only_virtuals.
+ 
+ 2026-06-23  Xin Liu  <liulxx@hygon.cn>
+ 
+ 	* common/config/i386/cpuinfo.h (get_hygon_cpu): Detect HYGON
+ 	Family 18h model 8 as c86-4g-m8.
+ 	* common/config/i386/i386-common.cc (processor_names): Add
+ 	c86-4g-m8.
+ 	(processor_alias_table): Likewise.
+ 	* common/config/i386/i386-cpuinfo.h (enum processor_subtypes): Add
+ 	HYGONFAM18H_C86_4G_M8.
+ 	* config.gcc: Add c86-4g-m8 to supported x86 CPUs and handle
+ 	c86_4g_m8 target triples.
+ 	* config/i386/c86-4g-m7.md: Rename to ...
+ 	* config/i386/c86-4g-m7m8.md: ... this and extend shared c86-4g-m7
+ 	scheduling reservations to c86-4g-m8.
+ 	(c86_4g_m8_imovx_cwde): New reservation.
+ 	(c86_4g_m7_imov_xchg): Add c86_4g_m8 to CPU attribute.
+ 	(c86_4g_m7_imov_xchg_load): Ditto.
+ 	(c86_4g_m7_imov): Ditto.
+ 	(c86_4g_m7_imov_load): Ditto.
+ 	(c86_4g_m7_imov_store): Ditto.
+ 	(c86_4g_m7_push): Ditto.
+ 	(c86_4g_m7_push_mem): Ditto.
+ 	(c86_4g_m7_pop): Ditto.
+ 	(c86_4g_m7_pop_mem): Ditto.
+ 	(c86_4g_m7_imul): Ditto.
+ 	(c86_4g_m7_imul_load): Ditto.
+ 	(c86_4g_m7_idiv): Ditto.
+ 	(c86_4g_m7_idiv_QI): Ditto.
+ 	(c86_4g_m7_idiv_load): Ditto.
+ 	(c86_4g_m7_idiv_QI_load): Ditto.
+ 	(c86_4g_m7_insn): Ditto.
+ 	(c86_4g_m7_insn_load): Ditto.
+ 	(c86_4g_m7_insn_store): Ditto.
+ 	(c86_4g_m7_insn2_store): Ditto.
+ 	(c86_4g_m7_insn_both): Ditto.
+ 	(c86_4g_m7_setcc): Ditto.
+ 	(c86_4g_m7_setcc_load): Ditto.
+ 	(c86_4g_m7_setcc_store): Ditto.
+ 	(c86_4g_m7_alu1_double): Ditto.
+ 	(c86_4g_m7_alu1_double_load): Ditto.
+ 	(c86_4g_m7_alu1_vector): Ditto.
+ 	(c86_4g_m7_alu1_vector_load): Ditto.
+ 	(c86_4g_m7_alu1_direct): Ditto.
+ 	(c86_4g_m7_alu1_direct_load): Ditto.
+ 	(c86_4g_m7_call): Ditto.
+ 	(c86_4g_m7_branch): Ditto.
+ 	(c86_4g_m7_branch_load): Ditto.
+ 	(c86_4g_m7_lea): Ditto.
+ 	(c86_4g_m7_leave): Ditto.
+ 	(c86_4g_m7_str): Ditto.
+ 	(c86_4g_m7_str_load): Ditto.
+ 	(c86_4g_m7_ieu_vector): Ditto.
+ 	(c86_4g_m7_ieu_vector_load): Ditto.
+ 	(c86_4g_m7_sse_insertimm): Ditto.
+ 	(c86_4g_m7_sse_insert): Ditto.
+ 	(c86_4g_m7_fp_cmov): Ditto.
+ 	(c86_4g_m7_fp_mov_direct_load): Ditto.
+ 	(c86_4g_m7_fp_mov_direct_store): Ditto.
+ 	(c86_4g_m7_fp_mov_double_load): Ditto.
+ 	(c86_4g_m7_fp_mov_double_store): Ditto.
+ 	(c86_4g_m7_fp_mov_direct): Ditto.
+ 	(c86_4g_m7_fp_sqrt): Ditto.
+ 	(c86_4g_m7_fp_spc_direct): Ditto.
+ 	(c86_4g_m7_fp_spc): Ditto.
+ 	(c86_4g_m7_fp_op_mul): Ditto.
+ 	(c86_4g_m7_fp_op_mul_load): Ditto.
+ 	(c86_4g_m7_fp_op_imul_load): Ditto.
+ 	(c86_4g_m7_fp_div): Ditto.
+ 	(c86_4g_m7_fp_div_load): Ditto.
+ 	(c86_4g_m7_fp_idiv_load): Ditto.
+ 	(c86_4g_m7_fp_fsgn): Ditto.
+ 	(c86_4g_m7_fp_fcmp): Ditto.
+ 	(c86_4g_m7_fp_fcmp_load): Ditto.
+ 	(c86_4g_m7_fp_mmx): Ditto.
+ 	(c86_4g_m7_mmx_add_cmp): Ditto.
+ 	(c86_4g_m7_mmx_add_cmp_load): Ditto.
+ 	(c86_4g_m7_mmx_cvt): Ditto.
+ 	(c86_4g_m7_mmx_cvt_load): Ditto.
+ 	(c86_4g_m7_mmx_shift): Ditto.
+ 	(c86_4g_m7_mmx_shift_load): Ditto.
+ 	(c86_4g_m7_mmx_shift_avg): Ditto.
+ 	(c86_4g_m7_mmx_shift_avg_load): Ditto.
+ 	(c86_4g_m7_mmx_shift_sadbw): Ditto.
+ 	(c86_4g_m7_mmx_shift_sadbw_load): Ditto.
+ 	(c86_4g_m7_mmx_mov): Ditto.
+ 	(c86_4g_m7_mmx_mov_store): Ditto.
+ 	(c86_4g_m7_mmx_mov_load): Ditto.
+ 	(c86_4g_m7_mmx_mul): Ditto.
+ 	(c86_4g_m7_mmx_mul_load): Ditto.
+ 	(c86_4g_m7_sse_pinsr_reg): Ditto.
+ 	(c86_4g_m7_sse_pinsr_reg_load): Ditto.
+ 	(c86_4g_m7_avx_vpinsr_reg): Ditto.
+ 	(c86_4g_m7_avx_vpinsr_reg_load): Ditto.
+ 	(c86_4g_m7_avx512_perm_xmm): Ditto.
+ 	(c86_4g_m7_avx512_perm_xmm_opload): Ditto.
+ 	(c86_4g_m7_avx512_permi2_ymm): Ditto.
+ 	(c86_4g_m7_avx512_permi2_zmm): Ditto.
+ 	(c86_4g_m7_avx512_permi2_ymm_load): Ditto.
+ 	(c86_4g_m7_avx512_permi2_zmm_load): Ditto.
+ 	(c86_4g_m7_avx512_perm_zmm_imm): Ditto.
+ 	(c86_4g_m7_avx512_perm_zmm_imm_load): Ditto.
+ 	(c86_4g_m7_avx512_perm_zmm_noimm): Ditto.
+ 	(c86_4g_m7_sse_perm_zmm_noimm_load): Ditto.
+ 	(c86_4g_m7_avx512_insertx_ymm): Ditto.
+ 	(c86_4g_m7_avx512_insertx_ymem): Ditto.
+ 	(c86_4g_m7_avx512_insertx_zxmm): Ditto.
+ 	(c86_4g_m7_avx512_insertx_zxmem): Ditto.
+ 	(c86_4g_m7_avx512_insertx_zymm): Ditto.
+ 	(c86_4g_m7_avx512_insertx_zymem): Ditto.
+ 	(c86_4g_m7_avx_insertx_ymm): Ditto.
+ 	(c86_4g_m7_avx_insertx_ymem): Ditto.
+ 	(c86_4g_m7_avx512_shuf_xymm): Ditto.
+ 	(c86_4g_m7_avx512_shuf_zmm): Ditto.
+ 	(c86_4g_m7_avx512_shuf_xymem): Ditto.
+ 	(c86_4g_m7_avx512_shuf_zmem): Ditto.
+ 	(c86_4g_m7_sselogic_xymm): Ditto.
+ 	(c86_4g_m7_sselogic_xymm_load): Ditto.
+ 	(c86_4g_m7_avx512_cmpestr): Ditto.
+ 	(c86_4g_m7_avx512_cmpestr_load): Ditto.
+ 	(c86_4g_m7_avx512_log): Ditto.
+ 	(c86_4g_m7_avx512_log_load): Ditto.
+ 	(c86_4g_m7_avx512_vdbpsadbw_xymm): Ditto.
+ 	(c86_4g_m7_avx512_vdbpsadbw_xymem): Ditto.
+ 	(c86_4g_m7_avx512_vdbpsadbw_zmm): Ditto.
+ 	(c86_4g_m7_avx512_vdbpsadbw_zmem): Ditto.
+ 	(c86_4g_m7_avx512_abs): Ditto.
+ 	(c86_4g_m7_avx512_abs_load): Ditto.
+ 	(c86_4g_m7_avx_sign): Ditto.
+ 	(c86_4g_m7_avx_sign_load): Ditto.
+ 	(c86_4g_m7_avx_blend): Ditto.
+ 	(c86_4g_m7_avx_blend_load): Ditto.
+ 	(c86_4g_m7_avx512_aes): Ditto.
+ 	(c86_4g_m7_avx512_aes_load): Ditto.
+ 	(c86_4g_m7_avx_aes): Ditto.
+ 	(c86_4g_m7_avx_aes_load): Ditto.
+ 	(c86_4g_m7_extr): Ditto.
+ 	(c86_4g_m7_extr_store): Ditto.
+ 	(c86_4g_m7_avx_ssecomi_comi): Ditto.
+ 	(c86_4g_m7_avx_ssecomi_comi_load): Ditto.
+ 	(c86_4g_m7_avx_ssecomi_test): Ditto.
+ 	(c86_4g_m7_avx_ssecomi_test_load): Ditto.
+ 	(c86_4g_m7_avx512_imul): Ditto.
+ 	(c86_4g_m7_avx512_imul_mem): Ditto.
+ 	(c86_4g_m7_avx_imul): Ditto.
+ 	(c86_4g_m7_avx_imul_mem): Ditto.
+ 	(c86_4g_m7_avx512_mov_vmov): Ditto.
+ 	(c86_4g_m7_avx512_mov_vmov_store): Ditto.
+ 	(c86_4g_m7_avx512_mov_vmov_load): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_y): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_y_load): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_z): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_z_load): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_x): Ditto.
+ 	(c86_4g_m7_avx512_vpmovx_x_load): Ditto.
+ 	(c86_4g_m7_avx_vpmovx_xx): Ditto.
+ 	(c86_4g_m7_avx_vpmovx_xx_load): Ditto.
+ 	(c86_4g_m7_avx512_expand): Ditto.
+ 	(c86_4g_m7_avx512_expand_load): Ditto.
+ 	(c86_4g_m7_avx512_expand_z): Ditto.
+ 	(c86_4g_m7_avx512_expand_z_load): Ditto.
+ 	(c86_4g_m7_avx512_movnt_load): Ditto.
+ 	(c86_4g_m7_avx512_movnt_store): Ditto.
+ 	(c86_4g_m7_sse_movnt_store): Ditto.
+ 	(c86_4g_m7_sse_movnt): Ditto.
+ 	(c86_4g_m7_avx512_blendv): Ditto.
+ 	(c86_4g_m7_avx512_blendv_load): Ditto.
+ 	(c86_4g_m7_sse_mov2): Ditto.
+ 	(c86_4g_m7_sse_mov2_load): Ditto.
+ 	(c86_4g_m7_avx512_sseishft_aligr): Ditto.
+ 	(c86_4g_m7_avx512_sseishft_aligr_load): Ditto.
+ 	(c86_4g_m7_avx512_sseishft_vshift): Ditto.
+ 	(c86_4g_m7_avx512_sseishft_vshift_load): Ditto.
+ 	(c86_4g_m7_avx512_sseadd_maxmin): Ditto.
+ 	(c86_4g_m7_avx512_sseadd_maxmin_load): Ditto.
+ 	(c86_4g_m7_avx_sseadd_maxmin): Ditto.
+ 	(c86_4g_m7_avx_sseadd_maxmin_load): Ditto.
+ 	(c86_4g_m7_sse_sseadd_maxmin): Ditto.
+ 	(c86_4g_m7_sse_sseadd_maxmin_load): Ditto.
+ 	(c86_4g_m7_avx512_sseadd): Ditto.
+ 	(c86_4g_m7_avx512_sseadd_load): Ditto.
+ 	(c86_4g_m7_avx_sseadd_hplus): Ditto.
+ 	(c86_4g_m7_avx_sseadd_hplus_load): Ditto.
+ 	(c86_4g_m7_avx512_sseiadd_madd): Ditto.
+ 	(c86_4g_m7_avx512_sseiadd_madd_mem): Ditto.
+ 	(c86_4g_m7_avx_sseiadd_sadbw): Ditto.
+ 	(c86_4g_m7_avx_sseiadd_sadbw_mem): Ditto.
+ 	(c86_4g_m7_sse_sseiadd_sadbw): Ditto.
+ 	(c86_4g_m7_sse_sseiadd_sadbw_mem): Ditto.
+ 	(c86_4g_m7_sse_sseiadd_madd): Ditto.
+ 	(c86_4g_m7_sse_sseiadd_madd_mem): Ditto.
+ 	(c86_4g_m7_avx512_sseiadd_avg): Ditto.
+ 	(c86_4g_m7_avx512_sseiadd_avg_load): Ditto.
+ 	(c86_4g_m7_avx_sseiadd_hplus): Ditto.
+ 	(c86_4g_m7_avx_sseiadd_hplus_load): Ditto.
+ 	(c86_4g_m7_sse_sseiadd_hplus): Ditto.
+ 	(c86_4g_m7_sse_sseiadd_hplus_load): Ditto.
+ 	(c86_4g_m8_avx512_ssemul): New reservation.
+ 	(c86_4g_m8_avx512_ssemul_load): Ditto.
+ 	(c86_4g_m7_avx512_ssediv_x): Add c86_4g_m8 to CPU attribute.
+ 	(c86_4g_m7_avx512_ssediv_xmem): Ditto.
+ 	(c86_4g_m7_avx512_ssediv_y): Ditto.
+ 	(c86_4g_m7_avx512_ssediv_ymem): Ditto.
+ 	(c86_4g_m7_avx512_ssediv_z): Ditto.
+ 	(c86_4g_m7_avx512_ssediv_zmem): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_z): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_z_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_vp): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_vp_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_vp_z): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_vp_z_load): Ditto.
+ 	(c86_4g_m7_avx_ssecmp_vp): Ditto.
+ 	(c86_4g_m7_avx_ssecmp_vp_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_test): Ditto.
+ 	(c86_4g_m7_avx512_ssecmp_test_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecvt_xy): Ditto.
+ 	(c86_4g_m7_avx512_ssecvt_xy_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecvt_y_z): Ditto.
+ 	(c86_4g_m7_avx512_ssecvt_y_z_load): Ditto.
+ 	(c86_4g_m7_avx512_ssecvt_z): Ditto.
+ 	(c86_4g_m7_avx512_ssecvt_z_load): Ditto.
+ 	(c86_4g_m7_avx_ssecvt): Ditto.
+ 	(c86_4g_m7_avx_ssecvt_load): Ditto.
+ 	(c86_4g_m7_sse_ssecvt_pspi): Ditto.
+ 	(c86_4g_m7_sse_ssecvt_pspi_load): Ditto.
+ 	(c86_4g_m7_sse_ssecvt_pi): Ditto.
+ 	(c86_4g_m7_sse_ssecvt_pi_load): Ditto.
+ 	(c86_4g_m8_avx512_muladd): New reservation.
+ 	(c86_4g_m8_avx512_muladd_load): Ditto.
+ 	(c86_4g_m7_avx512_muladd_madd): Add c86_4g_m8 to CPU attribute.
+ 	(c86_4g_m7_avx512_muladd_madd_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_range): Ditto.
+ 	(c86_4g_m7_avx512_sse_range_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_conflict_x): Ditto.
+ 	(c86_4g_m7_avx512_sse_conflict_x_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_conflict_y): Ditto.
+ 	(c86_4g_m7_avx512_sse_conflict_y_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_conflict_z): Ditto.
+ 	(c86_4g_m7_avx512_sse_conflict_z_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_class): Ditto.
+ 	(c86_4g_m7_avx512_sse_class_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_class_z): Ditto.
+ 	(c86_4g_m7_avx512_sse_class_z_load): Ditto.
+ 	(c86_4g_m7_avx_sse): Ditto.
+ 	(c86_4g_m7_avx_sse_load): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_sf_x): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_sf_xload): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_sf_y): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_sf_yload): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_sf_z): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_sf_zload): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_df_x): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_df_xload): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_df_y): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_df_yload): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_df_z): Ditto.
+ 	(c86_4g_m7_avx512_sse_sqrt_df_zload): Ditto.
+ 	(c86_4g_m7_avx512_msklog): Ditto.
+ 	(c86_4g_m7_avx512_msklog_vector): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_reg_k): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_xy_k): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_z_k): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_k_k): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_k_reg): Ditto.
+ 	(c86_4g_m7_avx512_mskmov_k_m): Ditto.
+ 	* config/i386/driver-i386.cc (host_detect_local_cpu): Detect
+ 	c86-4g-m8.
+ 	* config/i386/i386-c.cc (ix86_target_macros_internal): Define
+ 	c86-4g-m8 arch and tune macros.
+ 	* config/i386/i386-options.cc (m_C86_4G_M8): New macro.
+ 	(m_C86_4G): Include m_C86_4G_M8.
+ 	(processor_cost_table): Add c86_4g_m8_cost.
+ 	* config/i386/i386.cc (ix86_reassociation_width): Handle
+ 	PROCESSOR_C86_4G_M8.
+ 	* config/i386/i386.h (enum processor_type): Add
+ 	PROCESSOR_C86_4G_M8.
+ 	(PTA_C86_4G_M8): New.
+ 	* config/i386/i386.md: Add c86_4g_m8 to cpu attribute.
+ 	* config/i386/x86-tune-costs.h (c86_4g_m8_cost): New.
+ 	* config/i386/x86-tune-sched.cc (ix86_issue_rate): Handle
+ 	PROCESSOR_C86_4G_M8.
+ 	(ix86_adjust_cost): Likewise.
+ 	* config/i386/x86-tune.def (X86_TUNE_USE_SCATTER_2PARTS): Include
+ 	m_C86_4G_M8.
+ 	(X86_TUNE_USE_SCATTER_4PARTS): Likewise.
+ 	(X86_TUNE_USE_SCATTER_8PARTS): Likewise.
+ 	(X86_TUNE_SSE_REDUCTION_PREFER_PSHUF): Likewise.
+ 	(X86_TUNE_AVX512_SPLIT_REGS): Likewise.
+ 	(X86_TUNE_AVX512_AVOID_VEC_PERM): Likewise.
+ 	(X86_TUNE_AVX512_MOVE_BY_PIECES): Likewise.
+ 	(X86_TUNE_AVX512_MASKED_EPILOGUES): Likewise.
+ 	* doc/extend.texi: Document c86-4g-m8 for __builtin_cpu_is.
+ 	* doc/invoke.texi: Document c86-4g-m8.
+ 
+ 2026-06-22  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125697
+ 	* doc/invoke.texi: Clarify -Wrange-loop-construct description.
+ 
+ 2026-06-22  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125923
+ 	* tree-ssa-phiopt.cc (factor_out_conditional_load): Change
+ 	assert of the vuse being the same to rejecting if they are
+ 	different without a virtual phi.
+ 
+ 2026-06-22  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-phiopt.cc (cond_store_replacement): Fix comment
+ 	on no load for nontrapping.
+ 
+ 2026-06-22  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	* tree-ssa-phiopt.cc (cond_store_replacement): Update
+ 	the vuse on the new load and the vuse/vdef on the new
+ 	store.
+ 
+ 2026-06-22  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125917
+ 	* tree-ssa-phiopt.cc (cond_store_replacement): Just call
+ 	gsi_insert_before instead of checking gsi_end_p.
+ 	(cond_if_else_store_replacement_1): Likewise.
+ 
+ 2026-06-22  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* splay-tree-utils.cc: Remove -*- C++ -*- tags for Emacs.
+ 	* rtl-ssa/accesses.cc: Same.
+ 	* rtl-ssa/blocks.cc: Same.
+ 	* rtl-ssa/changes.cc: Same.
+ 	* rtl-ssa/functions.cc: Same.
+ 	* rtl-ssa/insns.cc: Same.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* omp-general.cc (omp_runtime_api_procname): Update for added
+ 	functions and older additions.
+ 	* omp-low.cc (scan_omp_1_stmt): Update for added _dim function.
+ 
+ 2026-06-22  Zhongjie Guo  <guozhongjie@hygon.cn>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): Cost
+ 	comparisons using the comparison operand mode.
+ 
+ 2026-06-22  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr-protos.h (avr_log_t) <insert_attributes>: New field.
+ 	* config/avr/avr-log.cc (avr_log_node): New static function.
+ 	(avr_log_vadump) [%N]: Call it.
+ 	(avr_log_set_avr_log) <insert_attributes>: New SET_DUMP_DETAIL.
+ 	* config/avr/avr.cc (avr_pgm_check_var_decl): Don't call avr_edump.
+ 	(avr_insert_attributes) [avr_log.insert_attributes]: Call avr_edump.
+ 
+ 2026-06-22  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125895
+ 	* config/i386/i386-features.cc (pass_x86_cse::x86_cse): Use
+ 	integer CONST_VECTOR to load FP CONST_VECTOR converted from
+ 	const_int.
+ 
+ 2026-06-22  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match-sat-alu.pd: Add fits check before call to
+ 	tree_to_uhwi.
+ 
+ 2026-06-22  Pan Li  <pan2.li@intel.com>
+ 
+ 	* match-sat-alu.pd: Add pattern for unsigned scalar
+ 	SAT_MUL form 13.
+ 
+ 2026-06-21  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* doc/sourcebuild.texi: Document object file checks.
+ 
+ 2026-06-21  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* config/aarch64/aarch64-builtins.cc
+ 	(aarch64_expand_prefetch_range_builtin): Use LLONG_MAX instead
+ 	of LONG_LONG_MAX.
+ 
+ 2026-06-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125883
+ 	* config/i386/i386-features.cc (ix86_broadcast_inner): Skip JUMP
+ 	from asm goto.
+ 
  2026-06-20  Gerald Pfeifer  <gerald@pfeifer.com>
  
  	* doc/extend.texi (Integer Overflow Builtins): Spell compile time
diff -Nrcpad gcc-17-20260621/gcc/DATESTAMP gcc-17-20260628/gcc/DATESTAMP
*** gcc-17-20260621/gcc/DATESTAMP	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/DATESTAMP	Sun Jun 28 22:32:05 2026
***************
*** 1 ****
! 20260621
--- 1 ----
! 20260628
diff -Nrcpad gcc-17-20260621/gcc/ada/ChangeLog gcc-17-20260628/gcc/ada/ChangeLog
*** gcc-17-20260621/gcc/ada/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/ChangeLog	Sun Jun 28 22:32:05 2026
***************
*** 1,3 ****
--- 1,58 ----
+ 2026-06-22  Javier Miranda  <miranda@adacore.com>
+ 
+ 	* par-ch6.adb (P_Subprogram): Add missing support for direct
+ 	attribute definition in abstract subprogram declarations.
+ 	* sem_attr.adb (Check_Hidden_Abstract_Constructor_Call): New
+ 	local subprogram of Analyze_Attribute.
+ 	(Analyze_Attribute) <Attribute_Make>: Add calls to the new local
+ 	subprogram to detect and report wrong calls to abstract constructors;
+ 	minor code restructure.
+ 	* sem_ch3.adb (Process_Full_View): Propagate Needs_Construction from
+ 	the partial view to the full view.
+ 	* sem_ch4.adb (Extended_Primitive_Ops): Add callable constructors to
+ 	the extended primitive operations when available; otherwise, add
+ 	abstract constructors so that we can diagnose wrong calls to them.
+ 	* sem_ch6.adb (Analyze_Direct_Attribute_Definition) <Name_Constructor>:
+ 	add missing support for abstract constructors. Report an error on
+ 	abstract constructors not declared in the visible part of a package.
+ 	(New_Overloaded_Entity): Add support for a private constructor to
+ 	complete a public abstract constructor and link them with the
+ 	Overridden_Operation attribute.
+ 	* sem_ch7.adb (Inspect_Abstract_Constructors_Completion): New subprogram
+ 	that checks if every abstract constructor in the visible part of the
+ 	package has a matching counterpart constructor in its private part.
+ 	(Analyze_Package_Specification): After analysing private declarations,
+ 	call Inspect_Abstract_Constructors_Completion.
+ 	* sem_util.ads (Collect_Constructors): New subprogram that collects
+ 	all non-hidden constructors into two lists: Callable (non-abstract)
+ 	constructors, and abstract constructors.
+ 	* sem_util.adb (Collect_Constructors): Ditto.
+ 
+ 2026-06-22  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	* accessibility.adb (Accessibility_Level): Deal with the associated
+ 	entity created during expansion for 'Old attribute references.
+ 	* exp_ch4.ads (Tagged_Membership): New declaration from...
+ 	* exp_ch4.adb (Tagged_Membership): ...here.  Retrieve the designated
+ 	types first, if any.  Do not retrieve the root type of a CW type for
+ 	the left operand, instead compute a full type for this operand.  Do
+ 	not generate a tag equality test in the direct case if both left and
+ 	right operands are of specific tagged type.
+ 	(Expand_N_In): In the anonymous access type case, pass the left
+ 	operand directly to the Accessibility_Level routine.
+ 	* exp_ch6.adb: Add clauses for SCIL_LL package.
+ 	(Expand_Simple_Function_Return): Use an indirect membership test to
+ 	implement the tag check for an anonymous access return designating
+ 	a specific tagged type.
+ 	* sem_ch4.adb (Analyze_Membership_Op): Deal specifically with a
+ 	right operand that denotes a tagged type.
+ 	* sem_res.ads (Valid_Tagged_Conversion): New declaration from...
+ 	* sem_res.adb (Valid_Tagged_Conversion): ...here.
+ 	(Resolve_Membership_Op): Deal specifically with a right operand that
+ 	denotes a tagged type and remove obsolete special case.
+ 	(Valid_Conversion): Adjust calls to Valid_Tagged_Conversion.
+ 	* sem_type.adb (Intersect_Types): Minor tweaks.
+ 
  2026-06-19  Eric Botcazou  <ebotcazou@adacore.com>
  
  	* exp_ch4.adb (Expand_N_Expression_With_Actions): Create a temporary
diff -Nrcpad gcc-17-20260621/gcc/ada/accessibility.adb gcc-17-20260628/gcc/ada/accessibility.adb
*** gcc-17-20260621/gcc/ada/accessibility.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/accessibility.adb	Sun Jun 28 22:32:05 2026
*************** package body Accessibility is
*** 593,598 ****
--- 593,605 ----
              then
                 return Make_Level_Literal (Scope_Depth (Standard_Standard));
  
+             --  For 'Old return the level of the associated entity, if any
+ 
+             elsif Attribute_Name (E) = Name_Old
+               and then Is_Entity_Name (Expr)
+             then
+                return Accessibility_Level (Entity (Expr));
+ 
              --  'Access can be taken further against other special attributes,
              --  so handle these cases explicitly.
  
diff -Nrcpad gcc-17-20260621/gcc/ada/exp_ch4.adb gcc-17-20260628/gcc/ada/exp_ch4.adb
*** gcc-17-20260621/gcc/ada/exp_ch4.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/exp_ch4.adb	Sun Jun 28 22:32:05 2026
*************** package body Exp_Ch4 is
*** 274,286 ****
     --  its expression. If N is neither comparison nor a type conversion, the
     --  call has no effect.
  
-    procedure Tagged_Membership
-      (N         : Node_Id;
-       SCIL_Node : out Node_Id;
-       Result    : out Node_Id);
-    --  Construct the expression corresponding to the tagged membership test.
-    --  Deals with a second operand being (or not) a class-wide type.
- 
     function Safe_In_Place_Array_Op
       (Lhs : Node_Id;
        Op1 : Node_Id;
--- 274,279 ----
*************** package body Exp_Ch4 is
*** 7218,7237 ****
                and then Ekind (Ltyp) = E_Anonymous_Access_Type
              then
                 declare
-                   Expr_Entity : Entity_Id := Empty;
                    New_N       : Node_Id;
                    Param_Level : Node_Id;
                    Type_Level  : Node_Id;
  
                 begin
-                   if Is_Entity_Name (Lop) then
-                      Expr_Entity := Param_Entity (Lop);
- 
-                      if No (Expr_Entity) then
-                         Expr_Entity := Entity (Lop);
-                      end if;
-                   end if;
- 
                    --  When restriction No_Dynamic_Accessibility_Checks is in
                    --  effect, expand the membership test to a static value
                    --  since we cannot rely on dynamic levels.
--- 7211,7221 ----
*************** package body Exp_Ch4 is
*** 7262,7269 ****
                    --  objects of an anonymous access type.
  
                    else
!                      Param_Level := Accessibility_Level
!                                       (Expr_Entity, Dynamic_Level);
  
                       Type_Level :=
                         Make_Integer_Literal (Loc, Type_Access_Level (Rtyp));
--- 7246,7252 ----
                    --  objects of an anonymous access type.
  
                    else
!                      Param_Level := Accessibility_Level (Lop, Dynamic_Level);
  
                       Type_Level :=
                         Make_Integer_Literal (Loc, Type_Access_Level (Rtyp));
*************** package body Exp_Ch4 is
*** 15294,15302 ****
     -- Tagged_Membership --
     -----------------------
  
!    --  There are two different cases to consider depending on whether the right
!    --  operand is a class-wide type or not. If not we just compare the actual
!    --  tag of the left expr to the target type tag:
     --
     --     Left_Expr.Tag = Right_Type'Tag;
     --
--- 15277,15288 ----
     -- Tagged_Membership --
     -----------------------
  
!    --  There are two main cases to consider depending on whether the right
!    --  operand is a class-wide type or not. If not, when the left operand
!    --  is also of a specific tagged type, we just return True in the direct
!    --  case because the left operand is statically known to be convertible
!    --  to the type of right operand; otherwise, we compare the actual tag
!    --  of the left operand to the target type tag:
     --
     --     Left_Expr.Tag = Right_Type'Tag;
     --
*************** package body Exp_Ch4 is
*** 15326,15331 ****
--- 15312,15318 ----
        Orig_Right_Type : constant Entity_Id :=
          Base_Type (Available_View (Etype (Right)));
  
+       Full_L_Typ   : Entity_Id;
        Full_R_Typ   : Entity_Id;
        Left_Type    : Entity_Id := Base_Type (Available_View (Etype (Left)));
        Right_Type   : Entity_Id := Orig_Right_Type;
*************** package body Exp_Ch4 is
*** 15334,15352 ****
     begin
        SCIL_Node := Empty;
  
-       --  We have to examine the corresponding record type when dealing with
-       --  protected types instead of the original, unexpanded, type.
- 
-       if Ekind (Right_Type) = E_Protected_Type then
-          Right_Type := Corresponding_Record_Type (Right_Type);
-       end if;
- 
-       if Ekind (Left_Type) = E_Protected_Type then
-          Left_Type := Corresponding_Record_Type (Left_Type);
-       end if;
- 
        --  In the case where the type is an access type, the test is applied
!       --  using the designated types (needed in Ada 2012 for implicit anonymous
        --  access conversions, for AI05-0149).
  
        if Is_Access_Type (Right_Type) then
--- 15321,15328 ----
     begin
        SCIL_Node := Empty;
  
        --  In the case where the type is an access type, the test is applied
!       --  to the designated types (needed in Ada 2012 for implicit anonymous
        --  access conversions, for AI05-0149).
  
        if Is_Access_Type (Right_Type) then
*************** package body Exp_Ch4 is
*** 15354,15361 ****
           Right_Type := Designated_Type (Right_Type);
        end if;
  
        if Is_Class_Wide_Type (Left_Type) then
!          Left_Type := Root_Type (Left_Type);
        end if;
  
        if Is_Class_Wide_Type (Right_Type) then
--- 15330,15350 ----
           Right_Type := Designated_Type (Right_Type);
        end if;
  
+       --  We have to examine the corresponding record type when dealing with
+       --  protected types instead of the original, unexpanded, type.
+ 
+       if Is_Protected_Type (Left_Type) then
+          Left_Type := Corresponding_Record_Type (Left_Type);
+       end if;
+ 
+       if Is_Protected_Type (Right_Type) then
+          Right_Type := Corresponding_Record_Type (Right_Type);
+       end if;
+ 
        if Is_Class_Wide_Type (Left_Type) then
!          Full_L_Typ := Underlying_Type (Root_Type (Left_Type));
!       else
!          Full_L_Typ := Underlying_Type (Left_Type);
        end if;
  
        if Is_Class_Wide_Type (Right_Type) then
*************** package body Exp_Ch4 is
*** 15368,15374 ****
          Make_Selected_Component (Loc,
            Prefix        => Relocate_Node (Left),
            Selector_Name =>
!             New_Occurrence_Of (First_Tag_Component (Left_Type), Loc));
  
        if Is_Class_Wide_Type (Right_Type) then
  
--- 15357,15363 ----
          Make_Selected_Component (Loc,
            Prefix        => Relocate_Node (Left),
            Selector_Name =>
!             New_Occurrence_Of (First_Tag_Component (Full_L_Typ), Loc));
  
        if Is_Class_Wide_Type (Right_Type) then
  
*************** package body Exp_Ch4 is
*** 15476,15481 ****
--- 15465,15481 ----
           if Is_Abstract_Type (Right_Type) then
              Result := New_Occurrence_Of (Standard_False, Loc);
  
+          --  No need to check the tag of the object in the direct case if
+          --  Left_Type is of a specific tagged type.
+ 
+          elsif not Is_Access_Type (Orig_Right_Type)
+            and then not Is_Interface (Left_Type)
+            and then not Is_Class_Wide_Type (Left_Type)
+          then
+             Result := New_Occurrence_Of (Standard_True, Loc);
+ 
+          --  Otherwise generate the tag equality test
+ 
           else
              Result :=
                Make_Op_Eq (Loc,
diff -Nrcpad gcc-17-20260621/gcc/ada/exp_ch4.ads gcc-17-20260628/gcc/ada/exp_ch4.ads
*** gcc-17-20260621/gcc/ada/exp_ch4.ads	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/exp_ch4.ads	Sun Jun 28 22:32:05 2026
*************** package Exp_Ch4 is
*** 130,133 ****
--- 130,140 ----
     --  routine is to find the real type by looking up the tree. We also
     --  determine if the operation must be rounded.
  
+    procedure Tagged_Membership
+      (N         : Node_Id;
+       SCIL_Node : out Node_Id;
+       Result    : out Node_Id);
+    --  Construct the expression corresponding to the tagged membership test.
+    --  Deals with a second operand being (or not) a class-wide type.
+ 
  end Exp_Ch4;
diff -Nrcpad gcc-17-20260621/gcc/ada/exp_ch6.adb gcc-17-20260628/gcc/ada/exp_ch6.adb
*** gcc-17-20260621/gcc/ada/exp_ch6.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/exp_ch6.adb	Sun Jun 28 22:32:05 2026
*************** with Sinfo.Utils;    use Sinfo.Utils;
*** 75,80 ****
--- 75,81 ----
  with Sinput;         use Sinput;
  with Snames;         use Snames;
  with Stand;          use Stand;
+ with SCIL_LL;        use SCIL_LL;
  with Tbuild;         use Tbuild;
  with Uintp;          use Uintp;
  with Validsw;        use Validsw;
*************** package body Exp_Ch6 is
*** 7571,7616 ****
              end;
           end if;
  
!       --  Ada 2012 (AI05-0073): If the result subtype of the function is
        --  defined by an access_definition designating a specific tagged
        --  type T, a check is made that the result value is null or the tag
        --  of the object designated by the result value identifies T.
  
-       --  The return expression is referenced twice in the code below, so it
-       --  must be made free of side effects. Given that different compilers
-       --  may evaluate these parameters in different order, both occurrences
-       --  perform a copy.
- 
        elsif Ekind (R_Type) = E_Anonymous_Access_Type
          and then Is_Tagged_Type (Designated_Type (R_Type))
          and then not Is_Class_Wide_Type (Designated_Type (R_Type))
-         and then Nkind (Original_Node (Exp)) /= N_Null
          and then not Tag_Checks_Suppressed (Designated_Type (R_Type))
        then
!          --  Generate:
!          --    [Constraint_Error
!          --       when Exp /= null
!          --         and then Exp.all not in Designated_Type]
  
!          Insert_Action (N,
!            Make_Raise_Constraint_Error (Loc,
!              Condition =>
!                Make_And_Then (Loc,
!                  Left_Opnd  =>
!                    Make_Op_Ne (Loc,
!                      Left_Opnd  => Duplicate_Subexpr (Exp),
!                      Right_Opnd => Make_Null (Loc)),
  
!                  Right_Opnd =>
!                    Make_Not_In (Loc,
!                      Left_Opnd  =>
!                        Make_Explicit_Dereference (Loc,
!                          Prefix => Duplicate_Subexpr (Exp)),
!                      Right_Opnd =>
!                        New_Occurrence_Of (Designated_Type (R_Type), Loc))),
  
!              Reason    => CE_Tag_Check_Failed),
!              Suppress  => All_Checks);
        end if;
  
        --  Generate a run-time accessibility check if needed
--- 7572,7621 ----
              end;
           end if;
  
!       --  Ada 2005 (AI05-0073): If the result subtype of the function is
        --  defined by an access_definition designating a specific tagged
        --  type T, a check is made that the result value is null or the tag
        --  of the object designated by the result value identifies T.
  
        elsif Ekind (R_Type) = E_Anonymous_Access_Type
          and then Is_Tagged_Type (Designated_Type (R_Type))
          and then not Is_Class_Wide_Type (Designated_Type (R_Type))
          and then not Tag_Checks_Suppressed (Designated_Type (R_Type))
+         and then Present (Underlying_Type (Designated_Type (R_Type)))
+         and then Nkind (Original_Node (Exp)) /= N_Null
        then
!          declare
!             --  Generate:
!             --    [Constraint_Error when not (Exp in R_Type)]
  
!             In_Test : constant Node_Id :=
!               Make_Not_In
!                 (Loc,
!                  Duplicate_Subexpr (Exp),
!                  New_Occurrence_Of (R_Type, Loc));
  
!             Result    : Node_Id;
!             SCIL_Node : Node_Id;
  
!          begin
!             --  We need to invoke Tagged_Membership directly because it is
!             --  invoked only in Ada 2012 for anonymous access types.
! 
!             Tagged_Membership (In_Test, SCIL_Node, Result);
! 
!             Insert_Action (N,
!               Make_Raise_Constraint_Error (Loc,
!                 Condition => Make_Op_Not (Loc, Right_Opnd => Result),
!                 Reason    => CE_Tag_Check_Failed),
!                 Suppress  => All_Checks);
! 
!             --  Update decoration of relocated node referenced by the
!             --  SCIL node.
! 
!             if Generate_SCIL and then Present (SCIL_Node) then
!                Set_SCIL_Node (Result, SCIL_Node);
!             end if;
!          end;
        end if;
  
        --  Generate a run-time accessibility check if needed
diff -Nrcpad gcc-17-20260621/gcc/ada/par-ch6.adb gcc-17-20260628/gcc/ada/par-ch6.adb
*** gcc-17-20260621/gcc/ada/par-ch6.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/par-ch6.adb	Sun Jun 28 22:32:06 2026
*************** package body Ch6 is
*** 644,649 ****
--- 644,652 ----
                 Absdec_Node :=
                   New_Node (N_Abstract_Subprogram_Declaration, Token_Ptr);
                 Set_Specification (Absdec_Node, Specification_Node);
+                Rewrite_Entity_If_Direct_Attribute_Def
+                  (Name_Node, Specification_Node);
+ 
                 Pop_Scope_Stack; -- discard unneeded entry
                 Scan; -- past ABSTRACT
                 P_Aspect_Specifications (Absdec_Node, Semicolon => True);
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_attr.adb gcc-17-20260628/gcc/ada/sem_attr.adb
*** gcc-17-20260621/gcc/ada/sem_attr.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_attr.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Attr is
*** 383,388 ****
--- 383,393 ----
        --  Verify that prefix of attribute N is a float type and that
        --  two attribute expressions are present.
  
+       procedure Check_Hidden_Abstract_Constructor_Call (Ctor_Call : Node_Id);
+       --  If Ctor_Call is a call to a hidden constructor then search in the
+       --  homonym chain for the counterpart abstract entity to report it as
+       --  non-callable (if found).
+ 
        procedure Check_Integer_Type;
        --  Verify that prefix of attribute N is an integer type
  
*************** package body Sem_Attr is
*** 2367,2372 ****
--- 2372,2456 ----
           Check_E2;
        end Check_Floating_Point_Type_2;
  
+       --------------------------------------------
+       -- Check_Hidden_Abstract_Constructor_Call --
+       --------------------------------------------
+ 
+       procedure Check_Hidden_Abstract_Constructor_Call (Ctor_Call : Node_Id) is
+          Is_Copy_Ctor_Call : constant Boolean :=
+                                Is_Copy_Constructor_Call (Ctor_Call);
+ 
+          function Find_Copy_Ctor is
+            new Find_Matching_Constructor (Is_Copy_Constructor);
+          --  Search for the copy constructor
+ 
+          function Find_Parameterless_Ctor is
+            new Find_Matching_Constructor (Is_Parameterless_Constructor);
+          --  Search for the default constructor
+ 
+          function Is_Target_Constructor (E : Entity_Id) return Boolean;
+          --  Relying on the value of Is_Copy_Ctor_Call, determine if E is
+          --  the target constructor of Ctor_Call.
+ 
+          ---------------------------
+          -- Is_Target_Constructor --
+          ---------------------------
+ 
+          function Is_Target_Constructor (E : Entity_Id) return Boolean is
+          begin
+             if Is_Copy_Ctor_Call then
+                return Is_Copy_Constructor (E);
+             else
+                return Is_Parameterless_Constructor (E);
+             end if;
+          end Is_Target_Constructor;
+ 
+          --  Local variables
+ 
+          Ctor : Entity_Id;
+          Hom  : Entity_Id;
+          Pref : constant Node_Id := Prefix (Ctor_Call);
+ 
+       --  Start of processing for Check_Hidden_Abstract_Constructor_Call
+ 
+       begin
+          --  Search for a target candidate skipping abstract constructors
+ 
+          if Is_Copy_Ctor_Call then
+             Ctor := Find_Copy_Ctor (Entity (Pref),
+                       Allow_Removed => False);
+          else
+             Ctor := Find_Parameterless_Ctor (Entity (Pref),
+                       Allow_Removed => False);
+          end if;
+ 
+          --  If the target candidate is hidden then traverse the homonym
+          --  chain searching for the counterpart abstract entity (if
+          --  previously defined) to report it as non-callable.
+ 
+          if Present (Ctor) and then Is_Hidden (Ctor) then
+             Hom := Homonym (Ctor);
+ 
+             while Present (Hom)
+               and then Scope (Hom) = Scope (Ctor)
+             loop
+                if Is_Constructor (Hom)
+                  and then Is_Abstract_Subprogram (Hom)
+                  and then Is_Target_Constructor (Hom)
+                then
+                   Error_Msg_Sloc := Sloc (Hom);
+                   Error_Msg_NE
+                     ("cannot call abstract constructor& declared#",
+                      Ctor_Call, Hom);
+                   Set_Etype (Ctor_Call, Any_Type);
+                   exit;
+                end if;
+ 
+                Hom := Homonym (Hom);
+             end loop;
+          end if;
+       end Check_Hidden_Abstract_Constructor_Call;
+ 
        ------------------------
        -- Check_Integer_Type --
        ------------------------
*************** package body Sem_Attr is
*** 5408,5415 ****
--- 5492,5501 ----
  
        when Attribute_Make => declare
           Expr : Entity_Id;
+ 
        begin
           if not All_Extensions_Allowed then
+             Error_Msg_Name_1 := Aname;
              Error_Msg_GNAT_Extension ("attribute %", Loc);
              return;
           end if;
*************** package body Sem_Attr is
*** 5417,5423 ****
           Check_Type;
           Set_Etype (N, Etype (P));
  
!          if Present (Exprs) then
              Expr := First (Exprs);
              while Present (Expr) loop
                 if Nkind (Expr) = N_Parameter_Association then
--- 5503,5523 ----
           Check_Type;
           Set_Etype (N, Etype (P));
  
!          --  Default parameterless constructor call
! 
!          if No (Exprs) then
!             if not Needs_Construction (Entity (P))
!               or else not Has_Parameterless_Constructor (Entity (P))
!             then
!                Error_Msg_NE
!                  ("no parameterless constructor for&", N, Entity (P));
!             else
!                Check_Hidden_Abstract_Constructor_Call (N);
!             end if;
! 
!          --  Constructor call with params
! 
!          else
              Expr := First (Exprs);
              while Present (Expr) loop
                 if Nkind (Expr) = N_Parameter_Association then
*************** package body Sem_Attr is
*** 5432,5444 ****
              if not Needs_Construction (Entity (P)) then
                 Error_Msg_NE ("no available constructor for&", N, Entity (P));
  
              --  Verify that the provided arguments are compatible with at least
              --  one constructor (checked by parameters count). Mismatched
              --  actuals will be caught later during resolution.
  
!             elsif not Is_Copy_Constructor_Call (N)
!               and then Comes_From_Source (N)
!             then
                 declare
                    Num_Args : constant Nat := List_Length (Exprs);
  
--- 5532,5545 ----
              if not Needs_Construction (Entity (P)) then
                 Error_Msg_NE ("no available constructor for&", N, Entity (P));
  
+             elsif Is_Copy_Constructor_Call (N) then
+                Check_Hidden_Abstract_Constructor_Call (N);
+ 
              --  Verify that the provided arguments are compatible with at least
              --  one constructor (checked by parameters count). Mismatched
              --  actuals will be caught later during resolution.
  
!             elsif Comes_From_Source (N) then
                 declare
                    Num_Args : constant Nat := List_Length (Exprs);
  
*************** package body Sem_Attr is
*** 5488,5518 ****
                    end if;
                 end;
              end if;
- 
-          elsif not Needs_Construction (Entity (P))
-            or else not Has_Parameterless_Constructor (Entity (P))
-          then
-             Error_Msg_NE ("no parameterless constructor for&", N, Entity (P));
- 
-             --  In case the parameterless constructor was explicitly removed, a
-             --  more specific error message is provided.
- 
-             if Has_Parameterless_Constructor (Entity (P),
-                                               Allow_Removed => True)
-             then
-                declare
-                   function Find_Parameterless_Constructor
-                   is new Find_Matching_Constructor
-                            (Is_Parameterless_Constructor);
- 
-                   Removed_Parameterless : constant Entity_Id :=
-                     Find_Parameterless_Constructor (Entity (P),
-                                                     Allow_Removed => True);
-                begin
-                   Error_Msg_NE ("//explicitly removed at#",
-                                 N, Removed_Parameterless);
-                end;
-             end if;
           end if;
        end;
  
--- 5589,5594 ----
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_ch3.adb gcc-17-20260628/gcc/ada/sem_ch3.adb
*** gcc-17-20260621/gcc/ada/sem_ch3.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_ch3.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Ch3 is
*** 10480,10487 ****
           --  Propagate information about constructor dependence from parent
  
           Set_Needs_Construction
!            (Derived_Type,
!             Needs_Construction (Parent_Type));
        end if;
  
        --  If the parent has primitive routines and may have not-seen-yet aspect
--- 10480,10486 ----
           --  Propagate information about constructor dependence from parent
  
           Set_Needs_Construction
!            (Derived_Type, Needs_Construction (Parent_Type));
        end if;
  
        --  If the parent has primitive routines and may have not-seen-yet aspect
*************** package body Sem_Ch3 is
*** 19007,19013 ****
              --  Preserve aspect and iterator flags that may have been set on
              --  the partial view.
  
!             Set_Has_Delayed_Aspects (Prev, Has_Delayed_Aspects (Id));
              Set_Has_Implicit_Dereference (Prev, Has_Implicit_Dereference (Id));
  
              --  If no error, propagate freeze_node from private to full view.
--- 19006,19012 ----
              --  Preserve aspect and iterator flags that may have been set on
              --  the partial view.
  
!             Set_Has_Delayed_Aspects      (Prev, Has_Delayed_Aspects      (Id));
              Set_Has_Implicit_Dereference (Prev, Has_Implicit_Dereference (Id));
  
              --  If no error, propagate freeze_node from private to full view.
*************** package body Sem_Ch3 is
*** 22498,22503 ****
--- 22497,22506 ----
           Set_Has_First_Controlling_Parameter_Aspect (Full_T);
        end if;
  
+       --  Propagate the constructor flag to the full view
+ 
+       Set_Needs_Construction (Full_T, Needs_Construction (Priv_T));
+ 
        --  Propagate predicates to full type, and predicate function if already
        --  defined. It is not clear that this can actually happen? the partial
        --  view cannot be frozen yet, and the predicate function has not been
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_ch4.adb gcc-17-20260628/gcc/ada/sem_ch4.adb
*** gcc-17-20260621/gcc/ada/sem_ch4.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_ch4.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Ch4 is
*** 3501,3506 ****
--- 3501,3518 ----
           if Nkind (R) = N_Error then
              Found := False;
  
+          elsif Is_Entity_Name (R) and then Is_Type (Entity (R)) then
+             --  If the tested type is tagged, then the tested expression
+             --  shall resolve to be of a type that is convertible to the
+             --  tested type; if untagged, the expected type of the tested
+             --  expression is the tested type (RM 4.5.2(3.1)).
+ 
+             if Is_Tagged_Type (Entity (R)) then
+                Found := Valid_Tagged_Conversion (N, Entity (R), T, False);
+             else
+                Found := Covers (Entity (R), T);
+             end if;
+ 
           --  Loop through the interpretations of the right operand
  
           elsif not Is_Overloaded (R) then
*************** package body Sem_Ch4 is
*** 3564,3569 ****
--- 3576,3583 ----
     begin
        Analyze_Expression (L);
  
+       --  If there is no right operand, then a set of alternatives is present
+ 
        if No (R) then
           pragma Assert (Ada_Version >= Ada_2012);
  
*************** package body Sem_Ch4 is
*** 3589,3610 ****
              end loop;
           end;
  
!       elsif Nkind (R) = N_Range
!         or else (Nkind (R) = N_Attribute_Reference
!                   and then Attribute_Name (R) = Name_Range)
!       then
!          Analyze_Expression (R);
! 
!          Dummy := Find_Interp;
! 
!       --  If not a range, it can be a subtype mark, or else it is a degenerate
!       --  membership test with a singleton value, i.e. a test for equality,
!       --  if the types are compatible.
  
        else
           Analyze_Expression (R);
  
!          if Is_Entity_Name (R) and then Is_Type (Entity (R)) then
              Find_Type (R);
              Check_Fully_Declared (Entity (R), R);
  
--- 3603,3624 ----
              end loop;
           end;
  
!       --  Either a range, or a subtype mark, or else a degenerate membership
!       --  test with a singleton value, i.e. a test for equality.
  
        else
           Analyze_Expression (R);
  
!          if Nkind (R) = N_Range
!            or else (Nkind (R) = N_Attribute_Reference
!                      and then Attribute_Name (R) = Name_Range)
!          then
!             --  The error will be given during resolution if no valid
!             --  interpretation of the operands is found.
! 
!             Dummy := Find_Interp;
! 
!          elsif Is_Entity_Name (R) and then Is_Type (Entity (R)) then
              Find_Type (R);
              Check_Fully_Declared (Entity (R), R);
  
*************** package body Sem_Ch4 is
*** 3613,3618 ****
--- 3627,3653 ----
                   ("subtype& has ghost predicate, "
                    & "not allowed in membership test",
                    R, Entity (R));
+ 
+             --  If no valid interpretation of the left operand is found, then
+             --  give an error message when the type is tagged; when it is not,
+             --  the error will be given during resolution instead.
+ 
+             elsif not Find_Interp
+               and then Is_Tagged_Type (Entity (R))
+             then
+                if Is_Class_Wide_Type (Etype (R))
+                  and then Is_Interface (Etype (R))
+                then
+                   Error_Msg_NE ("(Ada 2005) does not implement interface }",
+                                 L, Root_Type (Entity (R)));
+ 
+                elsif From_Limited_With (Entity (R)) then
+                   Error_Msg_NE ("limited view of& not compatible with context",
+                                 R, Entity (R));
+ 
+                else
+                   Error_Msg_N ("incompatible types", N);
+                end if;
              end if;
  
           elsif Ada_Version >= Ada_2012 and then Find_Interp then
*************** package body Sem_Ch4 is
*** 10700,10726 ****
           function Extended_Primitive_Ops (T : Entity_Id) return Elist_Id is
              Type_Scope : constant Entity_Id := Scope (T);
              Op_List    : Elist_Id := Primitive_Operations (T);
!             Op_Found   : Boolean := False;
           begin
              if Needs_Construction (T) then
-                --  to include all constructors iterate over T's entities
- 
                 declare
!                   Cursor : Entity_Id := Next_Entity (T);
                 begin
!                   while Present (Cursor) loop
!                      if Is_Constructor (Cursor) then
!                         if not Op_Found then
!                            --  Copy list of primitives so it is not affected
!                            --  for other uses.
  
!                            Op_List := New_Copy_Elist (Op_List);
!                            Op_Found := True;
!                         end if;
!                         Append_Elmt (Cursor, Op_List);
                       end if;
!                      Next_Entity (Cursor);
!                   end loop;
                 end;
              end if;
  
--- 10735,10782 ----
           function Extended_Primitive_Ops (T : Entity_Id) return Elist_Id is
              Type_Scope : constant Entity_Id := Scope (T);
              Op_List    : Elist_Id := Primitive_Operations (T);
!             Op_Found   : Boolean  := False;
! 
           begin
              if Needs_Construction (T) then
                 declare
!                   Callable_Ctors : Elist_Id;
!                   Abstract_Ctors : Elist_Id;
!                   Elmt           : Elmt_Id;
! 
                 begin
!                   Collect_Constructors (T, Callable_Ctors, Abstract_Ctors);
  
!                   --  Add callable constructors (suppressing abstract
!                   --  constructors to avoid reporting spurious ambiguity);
!                   --  if no callable constructor is available then add
!                   --  abstract constructors; required to allow subprogram
!                   --  Check_Hidden_Abstract_Constructor_Call to detect
!                   --  and report calls to them from outside their enclosing
!                   --  package.
! 
!                   declare
!                      Ctors_To_Add : constant Elist_Id :=
!                        (if not Is_Empty_Elmt_List (Callable_Ctors)
!                         then Callable_Ctors
!                         else Abstract_Ctors);
! 
!                   begin
!                      Elmt := First_Elmt (Ctors_To_Add);
! 
!                      if Present (Elmt) then
!                         --  Copy list of primitives so it is not
!                         --  affected for other uses.
! 
!                         Op_List  := New_Copy_Elist (Op_List);
!                         Op_Found := True;
! 
!                         while Present (Elmt) loop
!                            Append_Elmt (Node (Elmt), Op_List);
!                            Next_Elmt (Elmt);
!                         end loop;
                       end if;
!                   end;
                 end;
              end if;
  
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_ch6.adb gcc-17-20260628/gcc/ada/sem_ch6.adb
*** gcc-17-20260621/gcc/ada/sem_ch6.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_ch6.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Ch6 is
*** 5306,5312 ****
                 --  If missing, add a default initialization aspect for this
                 --  constructor's body stub: Initialize => (others => <>).
  
!                if Parent_Kind (N) not in N_Subprogram_Declaration then
                    if not Has_Aspect (Designator, Aspect_Initialize) then
                       Add_Default_Initialize_Aspect;
                    end if;
--- 5306,5314 ----
                 --  If missing, add a default initialization aspect for this
                 --  constructor's body stub: Initialize => (others => <>).
  
!                if Parent_Kind (N) not in N_Subprogram_Declaration
!                                        | N_Abstract_Subprogram_Declaration
!                then
                    if not Has_Aspect (Designator, Aspect_Initialize) then
                       Add_Default_Initialize_Aspect;
                    end if;
*************** package body Sem_Ch6 is
*** 5347,5352 ****
--- 5349,5365 ----
                    Error_Msg_N
                      ("& must be defined before freezing#", Designator);
  
+                elsif Parent_Kind (N) = N_Abstract_Subprogram_Declaration
+                  and then
+                    (In_Private_Part (Current_Scope)
+                       or else
+                     Parent_Kind (Enclosing_Package_Or_Subprogram (Designator))
+                       /= N_Package_Specification)
+                then
+                   Error_Msg_N
+                     ("abstract constructor must be defined in "
+                      & "the public part of a package", Designator);
+ 
                 elsif Parent_Kind (Enclosing_Package_Or_Subprogram (Designator))
                   /= N_Package_Specification
                 then
*************** package body Sem_Ch6 is
*** 12932,12937 ****
--- 12945,12968 ----
                 then
                    null;
  
+                --  An abstract constructor declared in the visible part of a
+                --  package may be given its non-abstract declaration in the
+                --  private part of the package. Accept it without conflict.
+ 
+                elsif Is_Abstract_Subprogram (E)
+                  and then Is_Constructor (E)
+                  and then Is_Constructor (S)
+                  and then Scope (S) = Scope (E)
+                  and then Is_Private_Declaration (S)
+                then
+                   Enter_Overloaded_Entity (S);
+                   Set_Overridden_Operation (S, E);
+ 
+                   --  There is no need to check if it is a primitive because
+                   --  constructors are not primitive subprograms.
+ 
+                   goto Check_Inequality;
+ 
                 --  Here we have a real error (identical profile)
  
                 else
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_ch7.adb gcc-17-20260628/gcc/ada/sem_ch7.adb
*** gcc-17-20260621/gcc/ada/sem_ch7.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_ch7.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Ch7 is
*** 1337,1342 ****
--- 1337,1347 ----
        --  primitive equality operator and, if so, make it so that it will be
        --  used as the predefined operator of the private view of the record.
  
+       procedure Inspect_Abstract_Constructors_Completion (Id : Entity_Id);
+       --  For each abstract constructor in the visible part of package Id,
+       --  verify that a non-abstract counterpart exists in the private part
+       --  of the package, and emit an error for each that lacks one.
+ 
        procedure Install_Parent_Private_Declarations (Inst_Id : Entity_Id);
        --  Given the package entity of a generic package instantiation or
        --  formal package whose corresponding generic is a child unit, installs
*************** package body Sem_Ch7 is
*** 1449,1454 ****
--- 1454,1503 ----
           end if;
        end Is_Public_Child;
  
+       ----------------------------------------------
+       -- Inspect_Abstract_Constructors_Completion --
+       ----------------------------------------------
+ 
+       procedure Inspect_Abstract_Constructors_Completion (Id : Entity_Id) is
+          First_Priv : constant Entity_Id := First_Private_Entity (Id);
+          Vis_E      : Entity_Id          := First_Entity (Id);
+ 
+       begin
+          while Present (Vis_E) and then Vis_E /= First_Priv loop
+             if Is_Constructor (Vis_E)
+               and then Is_Abstract_Subprogram (Vis_E)
+             then
+                declare
+                   Hom   : Entity_Id := Get_Name_Entity_Id (Chars (Vis_E));
+                   Found : Boolean   := False;
+ 
+                begin
+                   while Present (Hom)
+                     and then Scope (Hom) = Scope (Vis_E)
+                   loop
+                      if not Is_Abstract_Subprogram (Hom)
+                        and then Is_Constructor (Hom)
+                        and then Overridden_Operation (Hom) = Vis_E
+                      then
+                         Found := True;
+                         exit;
+                      end if;
+ 
+                      Hom := Homonym (Hom);
+                   end loop;
+ 
+                   if not Found then
+                      Error_Msg_N
+                        ("abstract constructor has no declaration in "
+                         & "the private part", Vis_E);
+                   end if;
+                end;
+             end if;
+ 
+             Next_Entity (Vis_E);
+          end loop;
+       end Inspect_Abstract_Constructors_Completion;
+ 
        ----------------------------------------
        -- Inspect_Unchecked_Union_Completion --
        ----------------------------------------
*************** package body Sem_Ch7 is
*** 1891,1896 ****
--- 1940,1952 ----
           Set_First_Private_Entity (Id, Next_Entity (L));
        end if;
  
+       --  An abstract constructor declared in the visible part requires a
+       --  matching concrete constructor in the private part.
+ 
+       if Core_Extensions_Allowed then
+          Inspect_Abstract_Constructors_Completion (Id);
+       end if;
+ 
        E := First_Entity (Id);
        while Present (E) loop
  
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_res.adb gcc-17-20260628/gcc/ada/sem_res.adb
*** gcc-17-20260621/gcc/ada/sem_res.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_res.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Res is
*** 10253,10259 ****
  
        L : constant Node_Id := Left_Opnd  (N);
        R : constant Node_Id := Right_Opnd (N);
-       T : Entity_Id;
  
        procedure Resolve_Set_Membership;
        --  Analysis has determined a unique type for the left operand. Use it as
--- 10253,10258 ----
*************** package body Sem_Res is
*** 10265,10270 ****
--- 10264,10270 ----
  
        procedure Resolve_Set_Membership is
           Alt : Node_Id;
+          T   : Entity_Id;
  
        begin
           --  If the left operand is overloaded, find type compatible with not
*************** package body Sem_Res is
*** 10365,10370 ****
--- 10365,10374 ----
           end if;
        end Resolve_Set_Membership;
  
+       --  Local variables
+ 
+       T : Entity_Id;
+ 
     --  Start of processing for Resolve_Membership_Op
  
     begin
*************** package body Sem_Res is
*** 10436,10460 ****
              Analyze (R);
           end if;
  
!       --  Ada 2005 (AI-251): Support the following case:
! 
!       --      type I is interface;
!       --      type T is tagged ...
! 
!       --      function Test (O : I'Class) is
!       --      begin
!       --         return O in T'Class.
!       --      end Test;
! 
!       --  In this case we have nothing else to do. The membership test will be
!       --  done at run time.
  
!       elsif Ada_Version >= Ada_2005
!         and then Is_Class_Wide_Type (Etype (L))
!         and then Is_Interface (Etype (L))
!         and then not Is_Interface (Etype (R))
        then
!          return;
  
        else
           T := Intersect_Types (L, R);
--- 10440,10453 ----
              Analyze (R);
           end if;
  
!       --  If the right operand is a tagged type, the type of the left operand
!       --  needs to be convertible to it, which was checked during analysis.
  
!       elsif Is_Entity_Name (R)
!         and then Is_Type (Entity (R))
!         and then Is_Tagged_Type (Entity (R))
        then
!          T := Etype (L);
  
        else
           T := Intersect_Types (L, R);
*************** package body Sem_Res is
*** 13746,13756 ****
        --  discriminant selected from a dereference of another such "bad"
        --  conversion argument.
  
-       function Valid_Tagged_Conversion
-         (Target_Type : Entity_Id;
-          Opnd_Type   : Entity_Id) return Boolean;
-       --  Specifically test for validity of tagged conversions
- 
        function Valid_Array_Conversion return Boolean;
        --  Check index and component conformance, and accessibility levels if
        --  the component types are anonymous access types (Ada 2005).
--- 13739,13744 ----
*************** package body Sem_Res is
*** 14023,14187 ****
           return True;
        end Valid_Array_Conversion;
  
-       -----------------------------
-       -- Valid_Tagged_Conversion --
-       -----------------------------
- 
-       function Valid_Tagged_Conversion
-         (Target_Type : Entity_Id;
-          Opnd_Type   : Entity_Id) return Boolean
-       is
-       begin
-          --  Upward conversions are allowed (RM 4.6(22))
- 
-          if Covers (Target_Type, Opnd_Type)
-            or else Is_Ancestor (Target_Type, Opnd_Type)
-          then
-             return True;
- 
-          --  Downward conversion are allowed if the operand is class-wide
-          --  (RM 4.6(23)).
- 
-          elsif Is_Class_Wide_Type (Opnd_Type)
-            and then Covers (Opnd_Type, Target_Type)
-          then
-             return True;
- 
-          elsif Covers (Opnd_Type, Target_Type)
-            or else Is_Ancestor (Opnd_Type, Target_Type)
-          then
-             --  Deal with non-extension derivation involving an
-             --  untagged view of a tagged type.
- 
-             if not Is_Tagged_Type (Target_Type) then
-                return True;
-             end if;
- 
-             return
-               Conversion_Check (False,
-                 "downward conversion of tagged objects not allowed");
- 
-          --  Ada 2005 (AI-251): A conversion is valid if the operand and target
-          --  types are both class-wide types and the specific type associated
-          --  with at least one of them is an interface type (RM 4.6 (23.1/2));
-          --  at run-time a check will verify the validity of this interface
-          --  type conversion.
- 
-          elsif Is_Class_Wide_Type (Target_Type)
-             and then Is_Class_Wide_Type (Opnd_Type)
-             and then (Is_Interface (Target_Type)
-                         or else Is_Interface (Opnd_Type))
-          then
-             return True;
- 
-          --  Report errors
- 
-          elsif Is_Class_Wide_Type (Target_Type)
-            and then Is_Interface (Target_Type)
-            and then not Is_Interface (Opnd_Type)
-            and then not Interface_Present_In_Ancestor
-                           (Typ   => Opnd_Type,
-                            Iface => Target_Type)
-          then
-             Error_Msg_Name_1 := Chars (Etype (Target_Type));
-             Error_Msg_Name_2 := Chars (Opnd_Type);
-             Report_Error_N
-               ("wrong interface conversion (% is not a progenitor "
-                & "of %)", N, Report_Errs);
-             return False;
- 
-          elsif Is_Class_Wide_Type (Opnd_Type)
-            and then Is_Interface (Opnd_Type)
-            and then not Is_Interface (Target_Type)
-            and then not Interface_Present_In_Ancestor
-                           (Typ   => Target_Type,
-                            Iface => Opnd_Type)
-          then
-             Error_Msg_Name_1 := Chars (Etype (Opnd_Type));
-             Error_Msg_Name_2 := Chars (Target_Type);
-             Report_Error_N
-               ("wrong interface conversion (% is not a progenitor "
-                & "of %)", N, Report_Errs);
- 
-             --  Search for interface types shared between the target type and
-             --  the operand interface type to complete the text of the error
-             --  since the source of this error is a missing type conversion
-             --  to such interface type.
- 
-             if Has_Interfaces (Target_Type) then
-                declare
-                   Operand_Ifaces_List : Elist_Id;
-                   Operand_Iface_Elmt  : Elmt_Id;
-                   Target_Ifaces_List  : Elist_Id;
-                   Target_Iface_Elmt   : Elmt_Id;
-                   First_Candidate     : Boolean := True;
- 
-                begin
-                   Collect_Interfaces (Base_Type (Target_Type),
-                     Target_Ifaces_List);
-                   Collect_Interfaces (Root_Type (Base_Type (Opnd_Type)),
-                     Operand_Ifaces_List);
- 
-                   Operand_Iface_Elmt := First_Elmt (Operand_Ifaces_List);
-                   while Present (Operand_Iface_Elmt) loop
-                      Target_Iface_Elmt := First_Elmt (Target_Ifaces_List);
-                      while Present (Target_Iface_Elmt) loop
-                         if Node (Operand_Iface_Elmt)
-                           = Node (Target_Iface_Elmt)
-                         then
-                            Error_Msg_Name_1 :=
-                              Chars (Node (Target_Iface_Elmt));
- 
-                            if First_Candidate then
-                               First_Candidate := False;
-                               Report_Error_N
-                                 ("\must convert to `%''Class` before downward "
-                                  & "conversion", Operand, Report_Errs);
-                            else
-                               Report_Error_N
-                                 ("\or must convert to `%''Class` before "
-                                  & "downward conversion",
-                                  Operand, Report_Errs);
-                            end if;
-                         end if;
- 
-                         Next_Elmt (Target_Iface_Elmt);
-                      end loop;
- 
-                      Next_Elmt (Operand_Iface_Elmt);
-                   end loop;
-                end;
-             end if;
- 
-             return False;
- 
-          elsif not Is_Class_Wide_Type (Target_Type)
-            and then Is_Interface (Target_Type)
-          then
-             Report_Error_N
-               ("wrong use of interface type in tagged conversion",
-                N, Report_Errs);
-             Report_Error_N
-               ("\add ''Class to the target interface type",
-                N, Report_Errs);
-             return False;
- 
-          elsif not Is_Class_Wide_Type (Opnd_Type)
-            and then Is_Interface (Opnd_Type)
-          then
-             Report_Error_N
-               ("must convert to class-wide interface type before downward "
-                & "conversion", Operand, Report_Errs);
-             return False;
- 
-          else
-             Report_Error_NE
-               ("invalid tagged conversion, not compatible with}",
-                N, First_Subtype (Opnd_Type), Report_Errs);
-             return False;
-          end if;
-       end Valid_Tagged_Conversion;
- 
     --  Start of processing for Valid_Conversion
  
     begin
--- 14011,14016 ----
*************** package body Sem_Res is
*** 14602,14608 ****
  
           begin
              if Is_Tagged_Type (Target) then
!                return Valid_Tagged_Conversion (Target, Opnd);
  
              else
                 if not Same_Base then
--- 14431,14437 ----
  
           begin
              if Is_Tagged_Type (Target) then
!                return Valid_Tagged_Conversion (N, Target, Opnd, Report_Errs);
  
              else
                 if not Same_Base then
*************** package body Sem_Res is
*** 14797,14803 ****
                    and then
                      Is_Tagged_Type (Implementation_Base_Type (Opnd_Type)))
        then
!          return Valid_Tagged_Conversion (Target_Type, Opnd_Type);
  
        --  Types derived from the same root type are convertible
  
--- 14626,14633 ----
                    and then
                      Is_Tagged_Type (Implementation_Base_Type (Opnd_Type)))
        then
!          return
!            Valid_Tagged_Conversion (N, Target_Type, Opnd_Type, Report_Errs);
  
        --  Types derived from the same root type are convertible
  
*************** package body Sem_Res is
*** 14861,14864 ****
--- 14691,14854 ----
        end if;
     end Valid_Conversion;
  
+    -----------------------------
+    -- Valid_Tagged_Conversion --
+    -----------------------------
+ 
+    function Valid_Tagged_Conversion
+      (N           : Node_Id;
+       Target_Type : Entity_Id;
+       Opnd_Type   : Entity_Id;
+       Report_Errs : Boolean := True) return Boolean
+    is
+    begin
+       --  Upward conversions are allowed (RM 4.6(22))
+ 
+       if Covers (Target_Type, Opnd_Type)
+         or else Is_Ancestor (Target_Type, Opnd_Type)
+       then
+          return True;
+ 
+       --  Downward conversion are allowed if the operand is class-wide
+       --  (RM 4.6(23)).
+ 
+       elsif Is_Class_Wide_Type (Opnd_Type)
+         and then Covers (Opnd_Type, Target_Type)
+       then
+          return True;
+ 
+       elsif Covers (Opnd_Type, Target_Type)
+         or else Is_Ancestor (Opnd_Type, Target_Type)
+       then
+          --  Deal with non-extension derivation involving an
+          --  untagged view of a tagged type.
+ 
+          if Is_Tagged_Type (Target_Type) then
+             Report_Error_N
+               ("downward conversion of tagged objects not allowed",
+                N, Report_Errs);
+             return False;
+          else
+             return True;
+          end if;
+ 
+       --  Ada 2005 (AI-251): A conversion is valid if the operand and target
+       --  types are both class-wide types and the specific type associated
+       --  with at least one of them is an interface type (RM 4.6 (23.1/2));
+       --  at run-time a check will verify the validity of this interface
+       --  type conversion.
+ 
+       elsif Is_Class_Wide_Type (Target_Type)
+          and then Is_Class_Wide_Type (Opnd_Type)
+          and then (Is_Interface (Target_Type)
+                      or else Is_Interface (Opnd_Type))
+       then
+          return True;
+ 
+       --  Report errors
+ 
+       elsif Is_Class_Wide_Type (Target_Type)
+         and then Is_Interface (Target_Type)
+         and then not Is_Interface (Opnd_Type)
+         and then not Interface_Present_In_Ancestor
+                        (Typ   => Opnd_Type,
+                         Iface => Target_Type)
+       then
+          Error_Msg_Name_1 := Chars (Etype (Target_Type));
+          Error_Msg_Name_2 := Chars (Opnd_Type);
+          Report_Error_N
+            ("wrong interface conversion (% is not a progenitor "
+             & "of %)", N, Report_Errs);
+          return False;
+ 
+       elsif Is_Class_Wide_Type (Opnd_Type)
+         and then Is_Interface (Opnd_Type)
+         and then not Is_Interface (Target_Type)
+         and then not Interface_Present_In_Ancestor
+                        (Typ   => Target_Type,
+                         Iface => Opnd_Type)
+       then
+          Error_Msg_Name_1 := Chars (Etype (Opnd_Type));
+          Error_Msg_Name_2 := Chars (Target_Type);
+          Report_Error_N
+            ("wrong interface conversion (% is not a progenitor "
+             & "of %)", N, Report_Errs);
+ 
+          --  Search for interface types shared between the target type and
+          --  the operand interface type to complete the text of the error
+          --  since the source of this error is a missing type conversion
+          --  to such interface type.
+ 
+          if Has_Interfaces (Target_Type) then
+             declare
+                Operand_Ifaces_List : Elist_Id;
+                Operand_Iface_Elmt  : Elmt_Id;
+                Target_Ifaces_List  : Elist_Id;
+                Target_Iface_Elmt   : Elmt_Id;
+                First_Candidate     : Boolean := True;
+ 
+             begin
+                Collect_Interfaces (Base_Type (Target_Type),
+                  Target_Ifaces_List);
+                Collect_Interfaces (Root_Type (Base_Type (Opnd_Type)),
+                  Operand_Ifaces_List);
+ 
+                Operand_Iface_Elmt := First_Elmt (Operand_Ifaces_List);
+                while Present (Operand_Iface_Elmt) loop
+                   Target_Iface_Elmt := First_Elmt (Target_Ifaces_List);
+                   while Present (Target_Iface_Elmt) loop
+                      if Node (Operand_Iface_Elmt) = Node (Target_Iface_Elmt)
+                      then
+                         Error_Msg_Name_1 :=
+                           Chars (Node (Target_Iface_Elmt));
+ 
+                         if First_Candidate then
+                            First_Candidate := False;
+                            Report_Error_N
+                              ("\must convert to `%''Class` before downward "
+                               & "conversion", N, Report_Errs);
+                         else
+                            Report_Error_N
+                              ("\or must convert to `%''Class` before "
+                               & "downward conversion", N, Report_Errs);
+                         end if;
+                      end if;
+ 
+                      Next_Elmt (Target_Iface_Elmt);
+                   end loop;
+ 
+                   Next_Elmt (Operand_Iface_Elmt);
+                end loop;
+             end;
+          end if;
+ 
+          return False;
+ 
+       elsif not Is_Class_Wide_Type (Target_Type)
+         and then Is_Interface (Target_Type)
+       then
+          Report_Error_N
+            ("wrong use of interface type in tagged conversion",
+             N, Report_Errs);
+          Report_Error_N
+            ("\add ''Class to the target interface type",
+             N, Report_Errs);
+          return False;
+ 
+       elsif not Is_Class_Wide_Type (Opnd_Type)
+         and then Is_Interface (Opnd_Type)
+       then
+          Report_Error_N
+            ("must convert to class-wide interface type before downward "
+             & "conversion", N, Report_Errs);
+          return False;
+ 
+       else
+          Report_Error_NE
+            ("invalid tagged conversion, not compatible with}",
+             N, First_Subtype (Opnd_Type), Report_Errs);
+          return False;
+       end if;
+    end Valid_Tagged_Conversion;
+ 
  end Sem_Res;
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_res.ads gcc-17-20260628/gcc/ada/sem_res.ads
*** gcc-17-20260621/gcc/ada/sem_res.ads	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_res.ads	Sun Jun 28 22:32:06 2026
*************** package Sem_Res is
*** 154,159 ****
--- 154,166 ----
     --  whether the conversion is legal. Reports errors in the case of illegal
     --  conversions, unless Report_Errs is False.
  
+    function Valid_Tagged_Conversion
+      (N           : Node_Id;
+       Target_Type : Entity_Id;
+       Opnd_Type   : Entity_Id;
+       Report_Errs : Boolean := True) return Boolean;
+    --  Specific version of Valid_Conversion for when Target_Type is tagged
+ 
  private
     procedure Resolve_Implicit_Type (N : Node_Id) renames Resolve;
     pragma Inline (Resolve_Implicit_Type);
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_type.adb gcc-17-20260628/gcc/ada/sem_type.adb
*** gcc-17-20260621/gcc/ada/sem_type.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_type.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Type is
*** 2849,2858 ****
           --  Ada 2005 (AI-251): Complete the error notification
  
           elsif Is_Class_Wide_Type (Etype (R))
!            and then Is_Interface (Etype (Class_Wide_Type (Etype (R))))
           then
              Error_Msg_NE ("(Ada 2005) does not implement interface }",
!                           L, Etype (Class_Wide_Type (Etype (R))));
  
           --  Specialize message if one operand is a limited view, a priori
           --  unrelated to all other types.
--- 2849,2858 ----
           --  Ada 2005 (AI-251): Complete the error notification
  
           elsif Is_Class_Wide_Type (Etype (R))
!            and then Is_Interface (Etype (R))
           then
              Error_Msg_NE ("(Ada 2005) does not implement interface }",
!                           L, Root_Type (Etype (R)));
  
           --  Specialize message if one operand is a limited view, a priori
           --  unrelated to all other types.
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_util.adb gcc-17-20260628/gcc/ada/sem_util.adb
*** gcc-17-20260621/gcc/ada/sem_util.adb	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_util.adb	Sun Jun 28 22:32:06 2026
*************** package body Sem_Util is
*** 5425,5430 ****
--- 5425,5482 ----
        return States;
     end Collect_Body_States;
  
+    --------------------------
+    -- Collect_Constructors --
+    --------------------------
+ 
+    procedure Collect_Constructors
+      (Typ            : Entity_Id;
+       Callable_Ctors : out Elist_Id;
+       Abstract_Ctors : out Elist_Id)
+    is
+       Typ_Scope : constant Entity_Id := Scope (Typ);
+       Boundary  : constant Entity_Id := First_Private_Entity (Typ_Scope);
+       Cursor    : Entity_Id;
+ 
+    begin
+       Callable_Ctors := New_Elmt_List;
+       Abstract_Ctors := New_Elmt_List;
+ 
+       --  Visible part: classify non-hidden constructors of Typ as
+       --  callable or abstract.
+ 
+       Cursor := First_Entity (Typ_Scope);
+       while Present (Cursor) and then Cursor /= Boundary loop
+          if Is_Constructor (Cursor)
+            and then Etype (First_Formal (Cursor)) = Typ
+            and then not Is_Hidden (Cursor)
+          then
+             if Is_Abstract_Subprogram (Cursor) then
+                Append_Elmt (Cursor, Abstract_Ctors);
+             else
+                Append_Elmt (Cursor, Callable_Ctors);
+             end if;
+          end if;
+ 
+          Next_Entity (Cursor);
+       end loop;
+ 
+       --  Private part: abstract constructors cannot appear here;
+       --  all non-hidden constructors here are callable.
+ 
+       Cursor := Boundary;
+       while Present (Cursor) loop
+          if Is_Constructor (Cursor)
+            and then Etype (First_Formal (Cursor)) = Typ
+            and then not Is_Hidden (Cursor)
+          then
+             Append_Elmt (Cursor, Callable_Ctors);
+          end if;
+ 
+          Next_Entity (Cursor);
+       end loop;
+    end Collect_Constructors;
+ 
     ------------------------
     -- Collect_Interfaces --
     ------------------------
*************** package body Sem_Util is
*** 11911,11917 ****
       (Typ : Entity_Id; Allow_Removed : Boolean := False) return Boolean
     is
        function Find_Copy_Constructor
!       is new Find_Matching_Constructor (Is_Copy_Constructor);
     begin
        return Present (Find_Copy_Constructor (Typ, Allow_Removed));
     end Has_Copy_Constructor;
--- 11963,11969 ----
       (Typ : Entity_Id; Allow_Removed : Boolean := False) return Boolean
     is
        function Find_Copy_Constructor
!         is new Find_Matching_Constructor (Is_Copy_Constructor);
     begin
        return Present (Find_Copy_Constructor (Typ, Allow_Removed));
     end Has_Copy_Constructor;
*************** package body Sem_Util is
*** 12866,12881 ****
--- 12918,12937 ----
           declare
              Formal : Entity_Id :=
                Next_Formal (Next_Formal (First_Formal (Spec_Id)));
+ 
           begin
              while Present (Formal) loop
                 if No (Default_Value (Formal)) then
                    return False;
                 end if;
+ 
                 Next_Formal (Formal);
              end loop;
           end;
+ 
           return True;
        end if;
+ 
        return False;
     end Is_Copy_Constructor;
  
*************** package body Sem_Util is
*** 12980,12986 ****
       (Typ : Entity_Id; Allow_Removed : Boolean := False) return Boolean
     is
        function Find_Default_Constructor
!       is new Find_Matching_Constructor (Is_Parameterless_Constructor);
     begin
        return Present (Find_Default_Constructor (Typ, Allow_Removed));
     end Has_Parameterless_Constructor;
--- 13036,13042 ----
       (Typ : Entity_Id; Allow_Removed : Boolean := False) return Boolean
     is
        function Find_Default_Constructor
!         is new Find_Matching_Constructor (Is_Parameterless_Constructor);
     begin
        return Present (Find_Default_Constructor (Typ, Allow_Removed));
     end Has_Parameterless_Constructor;
*************** package body Sem_Util is
*** 13281,13291 ****
--- 13337,13350 ----
                 if No (Default_Value (Formal)) then
                    return False;
                 end if;
+ 
                 Next_Formal (Formal);
              end loop;
           end;
+ 
           return True;
        end if;
+ 
        return False;
     end Is_Parameterless_Constructor;
  
diff -Nrcpad gcc-17-20260621/gcc/ada/sem_util.ads gcc-17-20260628/gcc/ada/sem_util.ads
*** gcc-17-20260621/gcc/ada/sem_util.ads	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/ada/sem_util.ads	Sun Jun 28 22:32:06 2026
*************** package Sem_Util is
*** 491,496 ****
--- 491,503 ----
     --  Gather the entities of all abstract states and objects declared in the
     --  body state space of package body Body_Id.
  
+    procedure Collect_Constructors
+      (Typ            : Entity_Id;
+       Callable_Ctors : out Elist_Id;
+       Abstract_Ctors : out Elist_Id);
+    --  Collect in a single pass all non-hidden constructors of Typ in two
+    --  lists: Callable_Ctors (non-abstract) and Abstract_Ctors.
+ 
     procedure Collect_Interfaces
       (T               : Entity_Id;
        Ifaces_List     : out Elist_Id;
diff -Nrcpad gcc-17-20260621/gcc/algol68/ChangeLog gcc-17-20260628/gcc/algol68/ChangeLog
*** gcc-17-20260621/gcc/algol68/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/algol68/ChangeLog	Sun Jun 28 22:32:06 2026
***************
*** 1,3 ****
--- 1,18 ----
+ 2026-06-24  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-moids-sorting.cc (packs_ordering): Do not rely on pointer
+ 	comparison when comparing pack element names.
+ 
+ 2026-06-24  Jose E. Marchesi  <jemarch@gnu.org>
+ 
+ 	* a68-imports.cc (complete_encoded_mode): Fix comment on ordering
+ 	of union packs entries.
+ 
+ 2026-06-22  Kanishka Solanki  <kanishkasolanki456s@gmail.com>
+ 
+ 	* a68-lang.cc (a68_get_alias_set): New function.
+ 	(LANG_HOOKS_GET_ALIAS_SET): Define to a68_get_alias_set.
+ 
  2026-06-19  Kanishka Solanki  <kanishkasolanki456s@gmail.com>
  
  	* a68-low-clauses.cc (a68_lower_collateral_clause): Do not check
diff -Nrcpad gcc-17-20260621/gcc/algol68/a68-imports.cc gcc-17-20260628/gcc/algol68/a68-imports.cc
*** gcc-17-20260621/gcc/algol68/a68-imports.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/algol68/a68-imports.cc	Sun Jun 28 22:32:06 2026
*************** complete_encoded_mode (encoded_modes_map
*** 846,853 ****
        pack = NO_PACK;
        for (uint8_t i = 0; i < em->data.union_.nmodes; i++)
  	{
! 	  /* Union alternatives are internally stored in reverse order in the
! 	     pack.  */
  	  uint16_t index = i;
  	  MOID_T *united_moid = complete_encoded_mode (encoded_modes,
  						       em->data.union_.modes[index]);
--- 846,852 ----
        pack = NO_PACK;
        for (uint8_t i = 0; i < em->data.union_.nmodes; i++)
  	{
! 	  /* The order of union alternatives is irrelevant.  */
  	  uint16_t index = i;
  	  MOID_T *united_moid = complete_encoded_mode (encoded_modes,
  						       em->data.union_.modes[index]);
diff -Nrcpad gcc-17-20260621/gcc/algol68/a68-lang.cc gcc-17-20260628/gcc/algol68/a68-lang.cc
*** gcc-17-20260621/gcc/algol68/a68-lang.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/algol68/a68-lang.cc	Sun Jun 28 22:32:06 2026
*************** a68_types_compatible_p (tree x, tree y)
*** 786,791 ****
--- 786,804 ----
  #undef LANG_HOOKS_TYPES_COMPATIBLE_P
  #define LANG_HOOKS_TYPES_COMPATIBLE_P a68_types_compatible_p
  
+ /* Implements the lang_hooks.get_alias_set routine for Algol 68.  */
+ 
+ static alias_set_type
+ a68_get_alias_set (tree)
+ {
+   /* For now in Algol 68, assume everything aliases everything else,
+      until aliasing rules are defined more precisely.  */
+   return 0;
+ }
+ 
+ #undef LANG_HOOKS_GET_ALIAS_SET
+ #define LANG_HOOKS_GET_ALIAS_SET a68_get_alias_set
+ 
  /* Get a value for the SARIF v2.1.0 "artifact.sourceLanguage" property.  Algol
     68 is not yet listed in SARIF v2.1.0 Appendix J, but if/when it does, it
     will likely use this string.  */
diff -Nrcpad gcc-17-20260621/gcc/algol68/a68-moids-sorting.cc gcc-17-20260628/gcc/algol68/a68-moids-sorting.cc
*** gcc-17-20260621/gcc/algol68/a68-moids-sorting.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/algol68/a68-moids-sorting.cc	Sun Jun 28 22:32:06 2026
*************** packs_ordering (PACK_T *a, PACK_T *b, bo
*** 52,58 ****
  		return 1;
  	      if (TEXT (b) == NO_TEXT)
  		return -1;
! 	      return -strcmp (TEXT (a), TEXT (b));
  	    }
  	}
      }
--- 52,61 ----
  		return 1;
  	      if (TEXT (b) == NO_TEXT)
  		return -1;
! 
! 	      int cmp = strcmp (TEXT (a), TEXT (b));
! 	      if (cmp != 0)
! 		return -cmp;
  	    }
  	}
      }
diff -Nrcpad gcc-17-20260621/gcc/builtin-types.def gcc-17-20260628/gcc/builtin-types.def
*** gcc-17-20260621/gcc/builtin-types.def	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/builtin-types.def	Sun Jun 28 22:32:06 2026
*************** DEF_PRIMITIVE_TYPE (BT_VOID, void_type_n
*** 61,66 ****
--- 61,67 ----
  DEF_PRIMITIVE_TYPE (BT_BOOL, boolean_type_node)
  DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node)
+ DEF_PRIMITIVE_TYPE (BT_COMPLEX_INT, complex_integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_ULONG, long_unsigned_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
*************** DEF_FUNCTION_TYPE_0 (BT_FN_CONST_STRING,
*** 235,241 ****
--- 236,244 ----
  DEF_FUNCTION_TYPE_0 (BT_FN_PID, BT_PID)
  DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
  DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
+ DEF_FUNCTION_TYPE_0 (BT_FN_COMPLEX_INT, BT_COMPLEX_INT)
  DEF_FUNCTION_TYPE_0 (BT_FN_ULONG, BT_ULONG)
+ DEF_FUNCTION_TYPE_0 (BT_FN_ULONGLONG, BT_ULONGLONG)
  DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
  DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
  /* For "long double" we use LONGDOUBLE (not LONG_DOUBLE) to
diff -Nrcpad gcc-17-20260621/gcc/builtins.cc gcc-17-20260628/gcc/builtins.cc
*** gcc-17-20260621/gcc/builtins.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/builtins.cc	Sun Jun 28 22:32:06 2026
*************** builtin_memcpy_read_str (void *data, voi
*** 3589,3595 ****
     set it into PROBABLE_MAX_SIZE.  */
  
  static void
! determine_block_size (tree len, rtx len_rtx,
  		      unsigned HOST_WIDE_INT *min_size,
  		      unsigned HOST_WIDE_INT *max_size,
  		      unsigned HOST_WIDE_INT *probable_max_size)
--- 3589,3595 ----
     set it into PROBABLE_MAX_SIZE.  */
  
  static void
! determine_block_size (tree len, rtx &len_rtx,
  		      unsigned HOST_WIDE_INT *min_size,
  		      unsigned HOST_WIDE_INT *max_size,
  		      unsigned HOST_WIDE_INT *probable_max_size)
*************** determine_block_size (tree len, rtx len_
*** 3650,3658 ****
  	    *probable_max_size = min.to_uhwi () - 1;
  	}
      }
!   gcc_checking_assert (*max_size <=
! 		       (unsigned HOST_WIDE_INT)
! 			  GET_MODE_MASK (GET_MODE (len_rtx)));
  }
  
  /* Expand a call EXP to the memcpy builtin.
--- 3650,3662 ----
  	    *probable_max_size = min.to_uhwi () - 1;
  	}
      }
! 
!   if (*min_size == *max_size)
!     len_rtx = GEN_INT (*min_size);
!   else
!     gcc_checking_assert (*max_size <=
! 			 (unsigned HOST_WIDE_INT)
! 			 GET_MODE_MASK (GET_MODE (len_rtx)));
  }
  
  /* Expand a call EXP to the memcpy builtin.
*************** expand_builtin (tree exp, rtx target, rt
*** 8092,8097 ****
--- 8096,8113 ----
  	expand_builtin_return (expand_normal (CALL_EXPR_ARG (exp, 0)));
        return const0_rtx;
  
+     case BUILT_IN_CALL_CODE_ADDRESS:
+       /* All valid uses of __builtin_call_code_address () are removed in
+ 	 in tree-nested.cc or gimple-fold.cc.  */
+       error ("argument to %<__builtin_call_code_address%> must be a function");
+       return const0_rtx;
+ 
+     case BUILT_IN_CALL_STATIC_CHAIN:
+        /* All valid uses of __builtin_call_static_chain () are removed in
+ 	  in tree-nested.cc or gimple-fold.cc.  */
+       error ("argument to %<__builtin_call_static_chain%> must be a function");
+       return const0_rtx;
+ 
      case BUILT_IN_SAVEREGS:
        return expand_builtin_saveregs ();
  
*************** is_simple_builtin (tree decl)
*** 12368,12373 ****
--- 12384,12391 ----
        case BUILT_IN_STACK_SAVE:
        case BUILT_IN_STACK_RESTORE:
        case BUILT_IN_DWARF_CFA:
+       case BUILT_IN_CALL_CODE_ADDRESS:
+       case BUILT_IN_CALL_STATIC_CHAIN:
  	/* Exception state returns or moves registers around.  */
        case BUILT_IN_EH_FILTER:
        case BUILT_IN_EH_POINTER:
diff -Nrcpad gcc-17-20260621/gcc/builtins.def gcc-17-20260628/gcc/builtins.def
*** gcc-17-20260621/gcc/builtins.def	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/builtins.def	Sun Jun 28 22:32:06 2026
*************** DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO
*** 1170,1175 ****
--- 1170,1179 ----
  DEF_EXT_LIB_BUILTIN (BUILT_IN_GCC_NESTED_PTR_CREATED, "__gcc_nested_func_ptr_created", BT_FN_VOID_PTR_PTR_PTR, ATTR_NOTHROW_LIST)
  DEF_EXT_LIB_BUILTIN (BUILT_IN_GCC_NESTED_PTR_DELETED, "__gcc_nested_func_ptr_deleted", BT_FN_VOID, ATTR_NOTHROW_LIST)
  
+ /* Information needed to call (nested) functions.  */
+ DEF_GCC_BUILTIN (BUILT_IN_CALL_CODE_ADDRESS, "call_code_address", BT_FN_PTR_PTR, ATTR_NULL)
+ DEF_GCC_BUILTIN (BUILT_IN_CALL_STATIC_CHAIN, "call_static_chain", BT_FN_PTR_PTR, ATTR_NULL)
+ 
  /* Implementing __builtin_setjmp.  */
  DEF_BUILTIN_STUB (BUILT_IN_SETJMP_SETUP, "__builtin_setjmp_setup")
  DEF_BUILTIN_STUB (BUILT_IN_SETJMP_RECEIVER, "__builtin_setjmp_receiver")
diff -Nrcpad gcc-17-20260621/gcc/c/ChangeLog gcc-17-20260628/gcc/c/ChangeLog
*** gcc-17-20260621/gcc/c/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/c/ChangeLog	Sun Jun 28 22:32:06 2026
***************
*** 1,3 ****
--- 1,14 ----
+ 2026-06-23  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 	    Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* c-parser.cc (c_parser_omp_iterators): Use iterator constructors
+ 	and macros for accessing iterator elements.
+ 	(c_parser_omp_clause_affinity): Likewise.
+ 	(c_parser_omp_clause_depend): Likewise.
+ 	(c_parser_omp_clause_map): Likewise.
+ 	(c_parser_omp_clause_from_to): Likewise.
+ 	* c-typeck.cc (c_omp_finish_iterators): Likewise.
+ 
  2026-06-19  Kees Cook  <kees@kernel.org>
  
  	PR c/125604
diff -Nrcpad gcc-17-20260621/gcc/c/c-decl.cc gcc-17-20260628/gcc/c/c-decl.cc
*** gcc-17-20260621/gcc/c/c-decl.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/c/c-decl.cc	Sun Jun 28 22:32:06 2026
*************** struct GTY((chain_next ("%h.prev"))) c_b
*** 221,230 ****
    struct c_binding *prev;	/* the previous decl in this scope */
    struct c_binding *shadowed;	/* the innermost decl shadowed by this one */
    unsigned int depth : 28;      /* depth of this scope */
!   BOOL_BITFIELD invisible : 1;  /* normal lookup should ignore this binding */
!   BOOL_BITFIELD nested : 1;     /* do not set DECL_CONTEXT when popping */
!   BOOL_BITFIELD inner_comp : 1; /* incomplete array completed in inner scope */
!   BOOL_BITFIELD in_struct : 1;	/* currently defined as struct field */
    location_t locus;		/* location for nested bindings */
  };
  #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
--- 221,230 ----
    struct c_binding *prev;	/* the previous decl in this scope */
    struct c_binding *shadowed;	/* the innermost decl shadowed by this one */
    unsigned int depth : 28;      /* depth of this scope */
!   bool invisible : 1;  /* normal lookup should ignore this binding */
!   bool nested : 1;     /* do not set DECL_CONTEXT when popping */
!   bool inner_comp : 1; /* incomplete array completed in inner scope */
!   bool in_struct : 1;	/* currently defined as struct field */
    location_t locus;		/* location for nested bindings */
  };
  #define B_IN_SCOPE(b1, b2) ((b1)->depth == (b2)->depth)
*************** struct GTY((chain_next ("%h.outer"))) c_
*** 502,539 ****
  
    /* True if we are currently filling this scope with parameter
       declarations.  */
!   BOOL_BITFIELD parm_flag : 1;
  
    /* True if we saw [*] in this scope.  Used to give an error messages
       if these appears in a function definition.  */
!   BOOL_BITFIELD had_vla_unspec : 1;
  
    /* True if we parsed a list of forward parameter decls in this scope.  */
!   BOOL_BITFIELD had_forward_parm_decls : 1;
  
    /* True if this is the outermost block scope of a function body.
       This scope contains the parameters, the local variables declared
       in the outermost block, and all the labels (except those in
       nested functions, or declared at block scope with __label__).  */
!   BOOL_BITFIELD function_body : 1;
  
    /* True means make a BLOCK for this scope no matter what.  */
!   BOOL_BITFIELD keep : 1;
  
    /* True means that an unsuffixed float constant is _Decimal64.  */
!   BOOL_BITFIELD float_const_decimal64 : 1;
  
    /* True if this scope has any label bindings.  This is used to speed
       up searching for labels when popping scopes, particularly since
       labels are normally only found at function scope.  */
!   BOOL_BITFIELD has_label_bindings : 1;
  
    /* True if we should issue a warning if a goto statement crosses any
       of the bindings.  We still need to check the list of bindings to
       find the specific ones we need to warn about.  This is true if
       decl_jump_unsafe would return true for any of the bindings.  This
       is used to avoid looping over all the bindings unnecessarily.  */
!   BOOL_BITFIELD has_jump_unsafe_decl : 1;
  };
  
  /* The scope currently in effect.  */
--- 502,539 ----
  
    /* True if we are currently filling this scope with parameter
       declarations.  */
!   bool parm_flag : 1;
  
    /* True if we saw [*] in this scope.  Used to give an error messages
       if these appears in a function definition.  */
!   bool had_vla_unspec : 1;
  
    /* True if we parsed a list of forward parameter decls in this scope.  */
!   bool had_forward_parm_decls : 1;
  
    /* True if this is the outermost block scope of a function body.
       This scope contains the parameters, the local variables declared
       in the outermost block, and all the labels (except those in
       nested functions, or declared at block scope with __label__).  */
!   bool function_body : 1;
  
    /* True means make a BLOCK for this scope no matter what.  */
!   bool keep : 1;
  
    /* True means that an unsuffixed float constant is _Decimal64.  */
!   bool float_const_decimal64 : 1;
  
    /* True if this scope has any label bindings.  This is used to speed
       up searching for labels when popping scopes, particularly since
       labels are normally only found at function scope.  */
!   bool has_label_bindings : 1;
  
    /* True if we should issue a warning if a goto statement crosses any
       of the bindings.  We still need to check the list of bindings to
       find the specific ones we need to warn about.  This is true if
       decl_jump_unsafe would return true for any of the bindings.  This
       is used to avoid looping over all the bindings unnecessarily.  */
!   bool has_jump_unsafe_decl : 1;
  };
  
  /* The scope currently in effect.  */
diff -Nrcpad gcc-17-20260621/gcc/c/c-parser.cc gcc-17-20260628/gcc/c/c-parser.cc
*** gcc-17-20260621/gcc/c/c-parser.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/c/c-parser.cc	Sun Jun 28 22:32:06 2026
*************** struct GTY(()) c_parser {
*** 205,258 ****
    /* True if a syntax error is being recovered from; false otherwise.
       c_parser_error sets this flag.  It should clear this flag when
       enough tokens have been consumed to recover from the error.  */
!   BOOL_BITFIELD error : 1;
    /* True if we're processing a pragma, and shouldn't automatically
       consume CPP_PRAGMA_EOL.  */
!   BOOL_BITFIELD in_pragma : 1;
    /* True if we're parsing the outermost block of an if statement.  */
!   BOOL_BITFIELD in_if_block : 1;
    /* True if we want to lex a translated, joined string (for an
       initial #pragma pch_preprocess).  Otherwise the parser is
       responsible for concatenating strings and translating to the
       execution character set as needed.  */
!   BOOL_BITFIELD lex_joined_string : 1;
    /* True if, when the parser is concatenating string literals, it
       should translate them to the execution character set (false
       inside attributes).  */
!   BOOL_BITFIELD translate_strings_p : 1;
  
    /* Objective-C specific parser/lexer information.  */
  
    /* True if we are in a context where the Objective-C "PQ" keywords
       are considered keywords.  */
!   BOOL_BITFIELD objc_pq_context : 1;
    /* True if we are parsing a (potential) Objective-C foreach
       statement.  This is set to true after we parsed 'for (' and while
       we wait for 'in' or ';' to decide if it's a standard C for loop or an
       Objective-C foreach loop.  */
!   BOOL_BITFIELD objc_could_be_foreach_context : 1;
    /* The following flag is needed to contextualize Objective-C lexical
       analysis.  In some cases (e.g., 'int NSObject;'), it is
       undesirable to bind an identifier to an Objective-C class, even
       if a class with that name exists.  */
!   BOOL_BITFIELD objc_need_raw_identifier : 1;
    /* Nonzero if we're processing a __transaction statement.  The value
       is 1 | TM_STMT_ATTR_*.  */
    unsigned int in_transaction : 4;
    /* True if we are in a context where the Objective-C "Property attribute"
       keywords are valid.  */
!   BOOL_BITFIELD objc_property_attr_context : 1;
  
    /* Whether we have just seen/constructed a string-literal.  Set when
       returning a string-literal from c_parser_string_literal.  Reset
       in consume_token.  Useful when we get a parse error and see an
       unknown token, which could have been a string-literal constant
       macro.  */
!   BOOL_BITFIELD seen_string_literal : 1;
  
    /* TRUE if omp::directive, omp::decl or omp::sequence attributes may not
       appear.  */
!   BOOL_BITFIELD omp_attrs_forbidden_p : 1;
  
    /* Location of the last consumed token.  */
    location_t last_token_location;
--- 205,258 ----
    /* True if a syntax error is being recovered from; false otherwise.
       c_parser_error sets this flag.  It should clear this flag when
       enough tokens have been consumed to recover from the error.  */
!   bool error : 1;
    /* True if we're processing a pragma, and shouldn't automatically
       consume CPP_PRAGMA_EOL.  */
!   bool in_pragma : 1;
    /* True if we're parsing the outermost block of an if statement.  */
!   bool in_if_block : 1;
    /* True if we want to lex a translated, joined string (for an
       initial #pragma pch_preprocess).  Otherwise the parser is
       responsible for concatenating strings and translating to the
       execution character set as needed.  */
!   bool lex_joined_string : 1;
    /* True if, when the parser is concatenating string literals, it
       should translate them to the execution character set (false
       inside attributes).  */
!   bool translate_strings_p : 1;
  
    /* Objective-C specific parser/lexer information.  */
  
    /* True if we are in a context where the Objective-C "PQ" keywords
       are considered keywords.  */
!   bool objc_pq_context : 1;
    /* True if we are parsing a (potential) Objective-C foreach
       statement.  This is set to true after we parsed 'for (' and while
       we wait for 'in' or ';' to decide if it's a standard C for loop or an
       Objective-C foreach loop.  */
!   bool objc_could_be_foreach_context : 1;
    /* The following flag is needed to contextualize Objective-C lexical
       analysis.  In some cases (e.g., 'int NSObject;'), it is
       undesirable to bind an identifier to an Objective-C class, even
       if a class with that name exists.  */
!   bool objc_need_raw_identifier : 1;
    /* Nonzero if we're processing a __transaction statement.  The value
       is 1 | TM_STMT_ATTR_*.  */
    unsigned int in_transaction : 4;
    /* True if we are in a context where the Objective-C "Property attribute"
       keywords are valid.  */
!   bool objc_property_attr_context : 1;
  
    /* Whether we have just seen/constructed a string-literal.  Set when
       returning a string-literal from c_parser_string_literal.  Reset
       in consume_token.  Useful when we get a parse error and see an
       unknown token, which could have been a string-literal constant
       macro.  */
!   bool seen_string_literal : 1;
  
    /* TRUE if omp::directive, omp::decl or omp::sequence attributes may not
       appear.  */
!   bool omp_attrs_forbidden_p : 1;
  
    /* Location of the last consumed token.  */
    location_t last_token_location;
*************** c_parser_omp_iterators (c_parser *parser
*** 20397,20407 ****
        DECL_CONTEXT (iter_var) = current_function_decl;
        pushdecl (iter_var);
  
!       *last = make_tree_vec (6);
!       TREE_VEC_ELT (*last, 0) = iter_var;
!       TREE_VEC_ELT (*last, 1) = begin;
!       TREE_VEC_ELT (*last, 2) = end;
!       TREE_VEC_ELT (*last, 3) = step;
        last = &TREE_CHAIN (*last);
  
        if (c_parser_next_token_is (parser, CPP_COMMA))
--- 20397,20407 ----
        DECL_CONTEXT (iter_var) = current_function_decl;
        pushdecl (iter_var);
  
!       *last = make_omp_iterator ();
!       OMP_ITERATOR_VAR (*last) = iter_var;
!       OMP_ITERATOR_BEGIN (*last) = begin;
!       OMP_ITERATOR_END (*last) = end;
!       OMP_ITERATOR_STEP (*last) = step;
        last = &TREE_CHAIN (*last);
  
        if (c_parser_next_token_is (parser, CPP_COMMA))
*************** c_parser_omp_clause_affinity (c_parser *
*** 20466,20472 ****
        tree block = pop_scope ();
        if (iterators != error_mark_node)
  	{
! 	  TREE_VEC_ELT (iterators, 5) = block;
  	  for (tree c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
  	    OMP_CLAUSE_DECL (c) = build_tree_list (iterators,
  						   OMP_CLAUSE_DECL (c));
--- 20466,20472 ----
        tree block = pop_scope ();
        if (iterators != error_mark_node)
  	{
! 	  OMP_ITERATOR_BLOCK (iterators) = block;
  	  for (tree c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
  	    OMP_CLAUSE_DECL (c) = build_tree_list (iterators,
  						   OMP_CLAUSE_DECL (c));
*************** c_parser_omp_clause_depend (c_parser *pa
*** 20597,20603 ****
  	  if (iterators == error_mark_node)
  	    iterators = NULL_TREE;
  	  else
! 	    TREE_VEC_ELT (iterators, 5) = block;
  	}
  
        for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
--- 20597,20603 ----
  	  if (iterators == error_mark_node)
  	    iterators = NULL_TREE;
  	  else
! 	    OMP_ITERATOR_BLOCK (iterators) = block;
  	}
  
        for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
*************** c_parser_omp_clause_map (c_parser *parse
*** 21041,21047 ****
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	TREE_VEC_ELT (iterators, 5) = block;
      }
  
    for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
--- 21041,21047 ----
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	OMP_ITERATOR_BLOCK (iterators) = block;
      }
  
    for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
*************** c_parser_omp_clause_from_to (c_parser *p
*** 21470,21476 ****
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	TREE_VEC_ELT (iterators, 5) = block;
      }
  
    if (iterators)
--- 21470,21476 ----
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	OMP_ITERATOR_BLOCK (iterators) = block;
      }
  
    if (iterators)
diff -Nrcpad gcc-17-20260621/gcc/c/c-tree.h gcc-17-20260628/gcc/c/c-tree.h
*** gcc-17-20260621/gcc/c/c-tree.h	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/c/c-tree.h	Sun Jun 28 22:32:06 2026
*************** struct c_declspecs {
*** 418,495 ****
    ENUM_BITFIELD (c_declspec_il) declspec_il : 3;
    /* Whether any expressions in typeof specifiers may appear in
       constant expressions.  */
!   BOOL_BITFIELD expr_const_operands : 1;
    /* Whether any declaration specifiers have been seen at all.  */
!   BOOL_BITFIELD declspecs_seen_p : 1;
    /* Whether any declaration specifiers other than standard attributes
       have been seen at all.  If only standard attributes have been
       seen, this is an attribute-declaration.  */
!   BOOL_BITFIELD non_std_attrs_seen_p : 1;
    /* Whether something other than a storage class specifier or
       attribute has been seen.  This is used to warn for the
       obsolescent usage of storage class specifiers other than at the
       start of the list.  (Doing this properly would require function
       specifiers to be handled separately from storage class
       specifiers.)  */
!   BOOL_BITFIELD non_sc_seen_p : 1;
    /* Whether the type is specified by a typedef or typeof name.  */
!   BOOL_BITFIELD typedef_p : 1;
    /* Whether the type is explicitly "signed" or specified by a typedef
       whose type is explicitly "signed".  */
!   BOOL_BITFIELD explicit_signed_p : 1;
    /* Whether the specifiers include a deprecated typedef.  */
!   BOOL_BITFIELD deprecated_p : 1;
    /* Whether the specifiers include an unavailable typedef.  */
!   BOOL_BITFIELD unavailable_p : 1;
    /* Whether the type defaulted to "int" because there were no type
       specifiers.  */
!   BOOL_BITFIELD default_int_p : 1;
    /* Whether "long" was specified.  */
!   BOOL_BITFIELD long_p : 1;
    /* Whether "long" was specified more than once.  */
!   BOOL_BITFIELD long_long_p : 1;
    /* Whether "short" was specified.  */
!   BOOL_BITFIELD short_p : 1;
    /* Whether "signed" was specified.  */
!   BOOL_BITFIELD signed_p : 1;
    /* Whether "unsigned" was specified.  */
!   BOOL_BITFIELD unsigned_p : 1;
    /* Whether "complex" was specified.  */
!   BOOL_BITFIELD complex_p : 1;
    /* Whether "inline" was specified.  */
!   BOOL_BITFIELD inline_p : 1;
    /* Whether "_Noreturn" was specified.  */
!   BOOL_BITFIELD noreturn_p : 1;
    /* Whether "__thread" or "_Thread_local" was specified.  */
!   BOOL_BITFIELD thread_p : 1;
    /* Whether "__thread" rather than "_Thread_local" was specified.  */
!   BOOL_BITFIELD thread_gnu_p : 1;
    /* Whether "const" was specified.  */
!   BOOL_BITFIELD const_p : 1;
    /* Whether "volatile" was specified.  */
!   BOOL_BITFIELD volatile_p : 1;
    /* Whether "restrict" was specified.  */
!   BOOL_BITFIELD restrict_p : 1;
    /* Whether "_Atomic" was specified.  */
!   BOOL_BITFIELD atomic_p : 1;
    /* Whether "_Sat" was specified.  */
!   BOOL_BITFIELD saturating_p : 1;
    /* Whether any alignment specifier (even with zero alignment) was
       specified.  */
!   BOOL_BITFIELD alignas_p : 1;
    /* Whether an enum type specifier (": specifier-qualifier-list") was
       specified other than in a definition of that enum (if so, this is
       invalid unless it is an empty declaration "enum identifier
       enum-type-specifier;", but such an empty declaration is valid in
       C23 when "enum identifier;" would not be).  */
!   BOOL_BITFIELD enum_type_specifier_ref_p : 1;
    /* Whether "auto" was specified in C23 (or later) mode and means the
       type is to be deduced from an initializer, or would mean that if
       no type specifier appears later in these declaration
       specifiers.  */
!   BOOL_BITFIELD c23_auto_p : 1;
    /* Whether "constexpr" was specified.  */
!   BOOL_BITFIELD constexpr_p : 1;
    /* The address space that the declaration belongs to.  */
    addr_space_t address_space;
  };
--- 418,495 ----
    ENUM_BITFIELD (c_declspec_il) declspec_il : 3;
    /* Whether any expressions in typeof specifiers may appear in
       constant expressions.  */
!   bool expr_const_operands : 1;
    /* Whether any declaration specifiers have been seen at all.  */
!   bool declspecs_seen_p : 1;
    /* Whether any declaration specifiers other than standard attributes
       have been seen at all.  If only standard attributes have been
       seen, this is an attribute-declaration.  */
!   bool non_std_attrs_seen_p : 1;
    /* Whether something other than a storage class specifier or
       attribute has been seen.  This is used to warn for the
       obsolescent usage of storage class specifiers other than at the
       start of the list.  (Doing this properly would require function
       specifiers to be handled separately from storage class
       specifiers.)  */
!   bool non_sc_seen_p : 1;
    /* Whether the type is specified by a typedef or typeof name.  */
!   bool typedef_p : 1;
    /* Whether the type is explicitly "signed" or specified by a typedef
       whose type is explicitly "signed".  */
!   bool explicit_signed_p : 1;
    /* Whether the specifiers include a deprecated typedef.  */
!   bool deprecated_p : 1;
    /* Whether the specifiers include an unavailable typedef.  */
!   bool unavailable_p : 1;
    /* Whether the type defaulted to "int" because there were no type
       specifiers.  */
!   bool default_int_p : 1;
    /* Whether "long" was specified.  */
!   bool long_p : 1;
    /* Whether "long" was specified more than once.  */
!   bool long_long_p : 1;
    /* Whether "short" was specified.  */
!   bool short_p : 1;
    /* Whether "signed" was specified.  */
!   bool signed_p : 1;
    /* Whether "unsigned" was specified.  */
!   bool unsigned_p : 1;
    /* Whether "complex" was specified.  */
!   bool complex_p : 1;
    /* Whether "inline" was specified.  */
!   bool inline_p : 1;
    /* Whether "_Noreturn" was specified.  */
!   bool noreturn_p : 1;
    /* Whether "__thread" or "_Thread_local" was specified.  */
!   bool thread_p : 1;
    /* Whether "__thread" rather than "_Thread_local" was specified.  */
!   bool thread_gnu_p : 1;
    /* Whether "const" was specified.  */
!   bool const_p : 1;
    /* Whether "volatile" was specified.  */
!   bool volatile_p : 1;
    /* Whether "restrict" was specified.  */
!   bool restrict_p : 1;
    /* Whether "_Atomic" was specified.  */
!   bool atomic_p : 1;
    /* Whether "_Sat" was specified.  */
!   bool saturating_p : 1;
    /* Whether any alignment specifier (even with zero alignment) was
       specified.  */
!   bool alignas_p : 1;
    /* Whether an enum type specifier (": specifier-qualifier-list") was
       specified other than in a definition of that enum (if so, this is
       invalid unless it is an empty declaration "enum identifier
       enum-type-specifier;", but such an empty declaration is valid in
       C23 when "enum identifier;" would not be).  */
!   bool enum_type_specifier_ref_p : 1;
    /* Whether "auto" was specified in C23 (or later) mode and means the
       type is to be deduced from an initializer, or would mean that if
       no type specifier appears later in these declaration
       specifiers.  */
!   bool c23_auto_p : 1;
    /* Whether "constexpr" was specified.  */
!   bool constexpr_p : 1;
    /* The address space that the declaration belongs to.  */
    addr_space_t address_space;
  };
*************** struct c_arg_info {
*** 534,546 ****
       ignored.  */
    tree pending_sizes;
    /* True when these arguments had [*].  */
!   BOOL_BITFIELD had_vla_unspec : 1;
    /* True when the arguments are a (...) prototype.  */
!   BOOL_BITFIELD no_named_args_stdarg_p : 1;
    /* True when empty parentheses have been interpreted as (void) in C23 or
       later.  This is only for use by -Wtraditional and is no longer needed if
       -Wtraditional is removed.  */
!   BOOL_BITFIELD c23_empty_parens : 1;
  };
  
  /* A declarator.  */
--- 534,546 ----
       ignored.  */
    tree pending_sizes;
    /* True when these arguments had [*].  */
!   bool had_vla_unspec : 1;
    /* True when the arguments are a (...) prototype.  */
!   bool no_named_args_stdarg_p : 1;
    /* True when empty parentheses have been interpreted as (void) in C23 or
       later.  This is only for use by -Wtraditional and is no longer needed if
       -Wtraditional is removed.  */
!   bool c23_empty_parens : 1;
  };
  
  /* A declarator.  */
*************** struct c_declarator {
*** 571,579 ****
        /* The attributes (currently ignored) inside [].  */
        tree attrs;
        /* Whether [static] was used.  */
!       BOOL_BITFIELD static_p : 1;
        /* Whether [*] was used.  */
!       BOOL_BITFIELD vla_unspec_p : 1;
      } array;
      /* For pointers, the qualifiers on the pointer type.  */
      int pointer_quals;
--- 571,579 ----
        /* The attributes (currently ignored) inside [].  */
        tree attrs;
        /* Whether [static] was used.  */
!       bool static_p : 1;
        /* Whether [*] was used.  */
!       bool vla_unspec_p : 1;
      } array;
      /* For pointers, the qualifiers on the pointer type.  */
      int pointer_quals;
diff -Nrcpad gcc-17-20260621/gcc/c/c-typeck.cc gcc-17-20260628/gcc/c/c-typeck.cc
*** gcc-17-20260621/gcc/c/c-typeck.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/c/c-typeck.cc	Sun Jun 28 22:32:06 2026
*************** c_omp_finish_iterators (tree iter)
*** 16499,16508 ****
    bool ret = false;
    for (tree it = iter; it; it = TREE_CHAIN (it))
      {
!       tree var = TREE_VEC_ELT (it, 0);
!       tree begin = TREE_VEC_ELT (it, 1);
!       tree end = TREE_VEC_ELT (it, 2);
!       tree step = TREE_VEC_ELT (it, 3);
        tree orig_step;
        tree type = TREE_TYPE (var);
        location_t loc = DECL_SOURCE_LOCATION (var);
--- 16499,16508 ----
    bool ret = false;
    for (tree it = iter; it; it = TREE_CHAIN (it))
      {
!       tree var = OMP_ITERATOR_VAR (it);
!       tree begin = OMP_ITERATOR_BEGIN (it);
!       tree end = OMP_ITERATOR_END (it);
!       tree step = OMP_ITERATOR_STEP (it);
        tree orig_step;
        tree type = TREE_TYPE (var);
        location_t loc = DECL_SOURCE_LOCATION (var);
*************** c_omp_finish_iterators (tree iter)
*** 16576,16585 ****
        tree it2;
        for (it2 = TREE_CHAIN (it); it2; it2 = TREE_CHAIN (it2))
  	{
! 	  tree var2 = TREE_VEC_ELT (it2, 0);
! 	  tree begin2 = TREE_VEC_ELT (it2, 1);
! 	  tree end2 = TREE_VEC_ELT (it2, 2);
! 	  tree step2 = TREE_VEC_ELT (it2, 3);
  	  tree type2 = TREE_TYPE (var2);
  	  location_t loc2 = DECL_SOURCE_LOCATION (var2);
  	  struct c_find_omp_var_s data = { var, &pset };
--- 16576,16585 ----
        tree it2;
        for (it2 = TREE_CHAIN (it); it2; it2 = TREE_CHAIN (it2))
  	{
! 	  tree var2 = OMP_ITERATOR_VAR (it2);
! 	  tree begin2 = OMP_ITERATOR_BEGIN (it2);
! 	  tree end2 = OMP_ITERATOR_END (it2);
! 	  tree step2 = OMP_ITERATOR_STEP (it2);
  	  tree type2 = TREE_TYPE (var2);
  	  location_t loc2 = DECL_SOURCE_LOCATION (var2);
  	  struct c_find_omp_var_s data = { var, &pset };
*************** c_omp_finish_iterators (tree iter)
*** 16614,16623 ****
  	  ret = true;
  	  continue;
  	}
!       TREE_VEC_ELT (it, 1) = begin;
!       TREE_VEC_ELT (it, 2) = end;
!       TREE_VEC_ELT (it, 3) = step;
!       TREE_VEC_ELT (it, 4) = orig_step;
      }
    return ret;
  }
--- 16614,16623 ----
  	  ret = true;
  	  continue;
  	}
!       OMP_ITERATOR_BEGIN (it) = begin;
!       OMP_ITERATOR_END (it) = end;
!       OMP_ITERATOR_STEP (it) = step;
!       OMP_ITERATOR_ORIG_STEP (it) = orig_step;
      }
    return ret;
  }
diff -Nrcpad gcc-17-20260621/gcc/c-family/ChangeLog gcc-17-20260628/gcc/c-family/ChangeLog
*** gcc-17-20260621/gcc/c-family/ChangeLog	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/c-family/ChangeLog	Sun Jun 28 22:32:06 2026
***************
*** 1,3 ****
--- 1,8 ----
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* c-omp.cc (c_finish_omp_barrier): Pass GOMP_BARRIER_EXPLICIT to
+ 	GOMP_barrier_ext.
+ 
  2026-06-16  Jakub Jelinek  <jakub@redhat.com>
  
  	* c-common.h (enum cxx_dialect): Add cxx29.
diff -Nrcpad gcc-17-20260621/gcc/c-family/c-omp.cc gcc-17-20260628/gcc/c-family/c-omp.cc
*** gcc-17-20260621/gcc/c-family/c-omp.cc	Sun Jun 21 22:32:05 2026
--- gcc-17-20260628/gcc/c-family/c-omp.cc	Sun Jun 28 22:32:06 2026
*************** c_finish_omp_barrier (location_t loc)
*** 175,181 ****
    tree x;
  
    x = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
!   x = build_call_expr_loc (loc, x, 0);
    add_stmt (x);
  }
  
--- 175,183 ----
    tree x;
  
    x = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
!   x = build_call_expr_loc (loc, x, 1,
! 			   build_int_cst (integer_type_node,
! 					  GOMP_BARRIER_EXPLICIT));
    add_stmt (x);
  }
  
diff -Nrcpad gcc-17-20260621/gcc/cfgexpand.cc gcc-17-20260628/gcc/cfgexpand.cc
*** gcc-17-20260621/gcc/cfgexpand.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cfgexpand.cc	Sun Jun 28 22:32:06 2026
*************** pass_expand::execute (function *fun)
*** 7246,7258 ****
        >= param_max_debug_marker_count)
      cfun->debug_nonbind_markers = false;
  
!   enable_ranger (fun);
    lab_rtx_for_bb = new hash_map<basic_block, rtx_code_label *>;
    head_end_for_bb.create (last_basic_block_for_fn (fun));
    FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR_FOR_FN (fun),
  		  next_bb)
      bb = expand_gimple_basic_block (bb, var_ret_seq);
!   disable_ranger (fun);
    FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR_FOR_FN (fun),
  		  next_bb)
      {
--- 7246,7260 ----
        >= param_max_debug_marker_count)
      cfun->debug_nonbind_markers = false;
  
!   if (optimize)
!     enable_ranger (fun);
    lab_rtx_for_bb = new hash_map<basic_block, rtx_code_label *>;
    head_end_for_bb.create (last_basic_block_for_fn (fun));
    FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR_FOR_FN (fun),
  		  next_bb)
      bb = expand_gimple_basic_block (bb, var_ret_seq);
!   if (optimize)
!     disable_ranger (fun);
    FOR_BB_BETWEEN (bb, init_block->next_bb, EXIT_BLOCK_PTR_FOR_FN (fun),
  		  next_bb)
      {
diff -Nrcpad gcc-17-20260621/gcc/cobol/ChangeLog gcc-17-20260628/gcc/cobol/ChangeLog
*** gcc-17-20260621/gcc/cobol/ChangeLog	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/ChangeLog	Sun Jun 28 22:32:06 2026
***************
*** 1,3 ****
--- 1,61 ----
+ 2026-06-25  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* gengen.cc (gg_abs): Use fold_build1().
+ 	* genutil.cc (scale_and_round): Remove function.
+ 	(round_this_value): New function for rounding.
+ 	* genutil.h (scale_and_round): Remove function.
+ 	(round_this_value): New declaration.
+ 	* move.cc (cobol_wider_type_with_x_signedness): New function.
+ 	(mh_binary_to_numdisp): Faster routine.
+ 	(mh_binary_to_packed): Faster routine.
+ 	(move_helper): Use the faster routines.
+ 
+ 2026-06-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* parse.y: Modify grammar to accept list of intrinic function tokens.
+ 	* parse_ante.h (in_procedure_division): Remove C-syntax (void).
+ 	(in_environment_division): Declare function.
+ 	* scan_ante.h (in_procedure_division): Whitespace.
+ 	(in_environment_division): Define function.
+ 	(typed_name): Return intrinsic function token in environment division.
+ 	* scan_post.h (in_procedure_division): Remove duplicate declaration.
+ 
+ 2026-06-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* lexio.cc (valid_sequence_area): Each character may be
+ 	ISDIGIT or ISBLANK.
+ 
+ 2026-06-24  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* parse.y: Introduce ast_relop to apply validation.
+ 	* parse_ante.h (ast_relop): Declare.
+ 	(class eval_subject_t): Use ast_relop.
+ 
+ 2026-06-23  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* cbldiag.h (enum cbl_diag_id_t): Add IbmCdf.
+ 	* cdf.y: Renumber tokens.
+ 	* cobol1.cc (cobol_langhook_handle_option): Accept -Wibm-cdf.
+ 	* gcobol.1: Document Wibm-cdf
+ 	* lang-specs.h: Add Wno-ibm-cdf to spec string.
+ 	* lang.opt: Add Wibm-cdf.
+ 	* messages.cc (cobol_warning_suppress): Add IbmCdf to cbl_diagnostics.
+ 	* parse.y: Handle PROCESS token.
+ 	* scan.l: Return PROCESS token.
+ 	* token_names.h: Update.
+ 
+ 2026-06-23  James K. Lowden  <jklowden@cobolworx.com>
+ 
+ 	* parse.y: Restrict Program-ID as name to top-level.
+ 	* scan.l: Elevate keyword priority in lexer.
+ 
+ 2026-06-22  Xavier Del Campo Romero  <xdelcampo@symas.com>
+ 
+ 	* gcobol.1: Document -B.
+ 	* lang-specs.h: Remove %I spec.
+ 	* lang.opt: Remove options injected by %I.
+ 	* lang.opt.urls: Likewise.
+ 
  2026-06-20  Robert Dubner  <rdubner@symas.com>
  
  	* genapi.cc (parser_enter_file): Establish a var_decl for the
diff -Nrcpad gcc-17-20260621/gcc/cobol/cbldiag.h gcc-17-20260628/gcc/cobol/cbldiag.h
*** gcc-17-20260621/gcc/cobol/cbldiag.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/cbldiag.h	Sun Jun 28 22:32:06 2026
*************** enum cbl_diag_id_t : uint64_t {
*** 158,167 ****
    LexReplaceE,
    LexSeparatorE,
  
    IbmEjectE,
    IbmEqualAssignE,
    IbmLengthOf, 
!   IbmProcedurePointer, 
    IbmSectionNegE,
    IbmSectionRangeE,
    IbmSectionSegmentW,
--- 158,168 ----
    LexReplaceE,
    LexSeparatorE,
  
+   IbmCdf,
    IbmEjectE,
    IbmEqualAssignE,
    IbmLengthOf, 
!   IbmProcedurePointer,
    IbmSectionNegE,
    IbmSectionRangeE,
    IbmSectionSegmentW,
diff -Nrcpad gcc-17-20260621/gcc/cobol/cdf.y gcc-17-20260628/gcc/cobol/cdf.y
*** gcc-17-20260621/gcc/cobol/cdf.y	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/cdf.y	Sun Jun 28 22:32:06 2026
*************** apply_cdf_turn( const exception_turn_t&
*** 274,280 ****
  %type	<cdfarg>	namelit name_any name_one
  %type	<string>	name subscript subscripts inof
  %token <boolean>  BOOL
! %token <number>  FEATURE 367  NUMBER 304  EXCEPTION_NAME 280    "EXCEPTION NAME"
  
  %type	<cdfval>	cdf_expr
  %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
--- 274,280 ----
  %type	<cdfarg>	namelit name_any name_one
  %type	<string>	name subscript subscripts inof
  %token <boolean>  BOOL
! %token <number>  FEATURE 368  NUMBER 304  EXCEPTION_NAME 280    "EXCEPTION NAME"
  
  %type	<cdfval>	cdf_expr
  %type	<cdfval>	cdf_relexpr cdf_reloper cdf_and cdf_bool_expr
*************** apply_cdf_turn( const exception_turn_t&
*** 286,332 ****
  
  %type   <number>        cdf_stackable
  
! %token BY 488
! %token COPY 364
! %token CDF_DISPLAY 386    ">>DISPLAY"
! %token IN 606
  %token NAME 286
  %token NUMSTR 306    "numeric literal"
! %token OF 687
  %token PSEUDOTEXT 723
  %token REPLACING 745
  %token LITERAL 299
! %token SUPPRESS 378
  
! %token LSUB 369    "("
! %token SUBSCRIPT 377  RSUB 374    ")"
  
! %token CDF_DEFINE 385    ">>DEFINE"
! %token CDF_IF 387    ">>IF"
! %token CDF_ELSE 388    ">>ELSE"
! %token CDF_END_IF 389    ">>END-IF"
! %token CDF_EVALUATE 390    ">>EVALUATE"
! %token CDF_WHEN 391    ">>WHEN"
! %token CDF_END_EVALUATE 392    ">>END-EVALUATE"
  
! %token ALL 452
! %token CALL_CONVENTION 393    ">>CALL-CONVENTION"
! %token COBOL_WORDS 382    ">>COBOL-WORDS"
! %token CDF_PUSH 396    ">>PUSH"
! %token CDF_POP 397    ">>POP"
! %token SOURCE_FORMAT 398    ">>SOURCE FORMAT"
  
! %token AS 470  CONSTANT 363  DEFINED 365
  %type	<boolean>	     DEFINED
! %token OTHER 699  PARAMETER_kw 370    "PARAMETER"
! %token OFF 688  OVERRIDE 371
  %token THRU 950
  %token TRUE_kw 815    "True"
  
! %token CALL_COBOL 394    "CALL"
! %token CALL_VERBATIM 395    "CALL (as C)"
  
! %token TURN 817  CHECKING 498  LOCATION 650  ON 690  WITH 844
  
  %left OR 951
  %left AND 952
--- 286,332 ----
  
  %type   <number>        cdf_stackable
  
! %token BY 489
! %token COPY 365
! %token CDF_DISPLAY 387    ">>DISPLAY"
! %token IN 607
  %token NAME 286
  %token NUMSTR 306    "numeric literal"
! %token OF 688
  %token PSEUDOTEXT 723
  %token REPLACING 745
  %token LITERAL 299
! %token SUPPRESS 379
  
! %token LSUB 370    "("
! %token SUBSCRIPT 378  RSUB 375    ")"
  
! %token CDF_DEFINE 386    ">>DEFINE"
! %token CDF_IF 388    ">>IF"
! %token CDF_ELSE 389    ">>ELSE"
! %token CDF_END_IF 390    ">>END-IF"
! %token CDF_EVALUATE 391    ">>EVALUATE"
! %token CDF_WHEN 392    ">>WHEN"
! %token CDF_END_EVALUATE 393    ">>END-EVALUATE"
  
! %token ALL 453
! %token CALL_CONVENTION 394    ">>CALL-CONVENTION"
! %token COBOL_WORDS 383    ">>COBOL-WORDS"
! %token CDF_PUSH 397    ">>PUSH"
! %token CDF_POP 398    ">>POP"
! %token SOURCE_FORMAT 399    ">>SOURCE FORMAT"
  
! %token AS 471  CONSTANT 364  DEFINED 366
  %type	<boolean>	     DEFINED
! %token OTHER 700  PARAMETER_kw 371    "PARAMETER"
! %token OFF 689  OVERRIDE 372
  %token THRU 950
  %token TRUE_kw 815    "True"
  
! %token CALL_COBOL 395    "CALL"
! %token CALL_VERBATIM 396    "CALL (as C)"
  
! %token TURN 817  CHECKING 499  LOCATION 651  ON 691  WITH 844
  
  %left OR 951
  %left AND 952
diff -Nrcpad gcc-17-20260621/gcc/cobol/cobol1.cc gcc-17-20260628/gcc/cobol/cobol1.cc
*** gcc-17-20260621/gcc/cobol/cobol1.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/cobol1.cc	Sun Jun 28 22:32:06 2026
*************** cobol_langhook_handle_option (size_t sco
*** 733,738 ****
--- 733,742 ----
            cobol_warning(IbmEjectE, cobol_eject, warning_as_error);
            return true;
  
+         case OPT_Wibm_cdf:
+           cobol_warning(IbmCdf, cobol_ibmcdf, warning_as_error);
+           return true;
+ 
          case OPT_Woperator_space:
            cobol_warning(LexSeparatorE, operator_space, warning_as_error);
            return true;
diff -Nrcpad gcc-17-20260621/gcc/cobol/gcobol.1 gcc-17-20260628/gcc/cobol/gcobol.1
*** gcc-17-20260621/gcc/cobol/gcobol.1	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/gcobol.1	Sun Jun 28 22:32:06 2026
***************
*** 11,16 ****
--- 11,17 ----
  .Nm
  .Op Fl D Ns Ar name Ns Oo Li = Ns Ar value Oc
  .Op Fl E
+ .Op Fl B
  .Op Fl fdefaultbyte Ns Li = Ns Ar value
  .Op Fl fsyntax-only
  .Op Fl I Ns Ar copybook-path
***************
*** 56,61 ****
--- 57,63 ----
  .Op Fl Wno-copybook-found
  .Op Fl Wno-ec-unknown
  .Op Fl Wno-entry-convention
+ .Op Fl Wno-ibm-cdf
  .Op Fl Wno-iconv-error
  .Op Fl Wno-include-file-found
  .Op Fl Wno-include-file-not-found
*************** See below for examples showing the use o
*** 144,149 ****
--- 146,183 ----
  .Fl main
  and
  .Fl nomain.
+ .It Fl B Ar prefix
+ Add a search location for the system copybooks, so they can be found with the
+ .Sy COPY
+ statement. For each location, the
+ .Sy cobol1
+ compiler shall search for copybooks inside the following subdirectories,
+ relative to
+ .Ar prefix :
+ .Pp
+ .Bl -tag -compact
+ .It Sy compat/gnu/lib/
+ .It Sy compat/gnu/cpy/
+ .It Sy compat/gnu/udf/
+ .It Sy posix/cpy/
+ .It Sy posix/udf/
+ .It Sy cobol/compat/gnu/lib/
+ .It Sy cobol/compat/gnu/cpy/
+ .It Sy cobol/compat/gnu/udf/
+ .It Sy cobol/posix/cpy/
+ .It Sy cobol/posix/udf/
+ .El
+ .Pp
+ Additionally,
+ .Sy cobol1
+ shall append the configured
+ .Sy LIBSUBDIR
+ as an additional search location, where
+ .Sy LIBSUBDIR
+ is typically configured to
+ .Ar machine/version/ ,
+ relative to the configured
+ .Ar libdir .
  .It Fl D Ar name Ns Op Li = Ns Ar expr
  Define a CDF name (for use with
  .Sy >>IF )
*************** Warn if SET ... TO LOCALE is used.
*** 640,645 ****
--- 674,687 ----
  .
  `.\" convert errors to warnings
  Warn if a line directive is malformed (instead of error).
+ .It Fl Wibm-cdf
+ Warn if IBM-specific CDF directives are used (instead of error).
+ With
+ .Fl dialect Sy ibm
+ some potentially important directives produce a warning.
+ This option allows the warning to be defeated or, with
+ .Fl Werror ,
+ converted to an error.
  .It Fl Wno-iconv-error
  Warn if iconv(3) cannot convert between encodings (instead of error).
  .It Fl Wno-include-file-not-found
diff -Nrcpad gcc-17-20260621/gcc/cobol/gengen.cc gcc-17-20260628/gcc/cobol/gengen.cc
*** gcc-17-20260621/gcc/cobol/gengen.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/gengen.cc	Sun Jun 28 22:32:06 2026
*************** gg_bitwise_not(tree var)
*** 1594,1600 ****
  tree
  gg_abs(tree var)
    {
!   return build1(ABS_EXPR, TREE_TYPE(var), var);
    }
  
  static tree
--- 1594,1600 ----
  tree
  gg_abs(tree var)
    {
!   return fold_build1(ABS_EXPR, TREE_TYPE(var), var);
    }
  
  static tree
diff -Nrcpad gcc-17-20260621/gcc/cobol/genutil.cc gcc-17-20260628/gcc/cobol/genutil.cc
*** gcc-17-20260621/gcc/cobol/genutil.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/genutil.cc	Sun Jun 28 22:32:06 2026
*************** scale_by_power_of_ten(tree value,
*** 1761,1831 ****
    }
  
  void
- scale_and_round(tree value,
-                 int  value_rdigits,
-                 bool target_is_signable,
-                 int  target_rdigits,
-                 cbl_round_t rounded)
-   {
-   if( !target_is_signable )
-     {
-     // The target has to be positive, so take the absolute value of the input
-     gg_assign(value, gg_abs(value));
-     }
- 
-   if( target_rdigits >= value_rdigits )
-     {
-     // The value doesn't have enough rdigits.  All we need to do is multiply it
-     // by a power of ten to get it right:
-     scale_by_power_of_ten_N(value,
-                           target_rdigits - value_rdigits);
-     }
-   else
-     {
-     // The value has too few rdigits.
-     switch(rounded)
-       {
-       case nearest_away_from_zero_e:
-         {
-         // This is rounding away from zero
- 
-         // We want to adjust value so that the extra digit is in the units
-         // place:
-         scale_by_power_of_ten_N(value,
-                               target_rdigits - value_rdigits + 1);
-         // Add five to the result:
-         IF( value, lt_op, gg_cast(TREE_TYPE(value), integer_zero_node) )
-           {
-           gg_assign(value,
-                     gg_add( value,
-                             build_int_cst_type(TREE_TYPE(value), -5)));
-           }
-         ELSE
-           {
-           gg_assign(value,
-                     gg_add( value,
-                             build_int_cst_type(TREE_TYPE(value), +5)));
-           }
-         // And now get rid of the lowest decimal digit
-         scale_by_power_of_ten_N(value, -1);
- 
-         break;
-         }
- 
-       case truncation_e:
-         {
-         // Without rounding, just scale the result
-         scale_by_power_of_ten_N(value, target_rdigits - value_rdigits);
-         break;
-         }
-       default:
-         abort();
-         break;
-       }
-     }
-   }
- 
- void
  hex_dump(tree data, size_t bytes)
    {
    gg_printf("0x", NULL_TREE);
--- 1761,1766 ----
*************** attribute_bit_set(struct cbl_field_t *va
*** 3493,3495 ****
--- 3428,3768 ----
                              build_int_cst_type(SIZE_T, bits)));
    }
  
+ tree
+ round_this_value( tree &value,
+                   tree pot,
+                   cbl_round_t rounded,
+                   tree size_error)
+   {
+   tree retval = gg_define_variable(INT);
+   // We are rounding value by dividing it by 'pot', which is a power of ten.
+   // We will decide how to round it by looking at the remainder.
+ 
+   // Return zero when the returned value is zero.  We use this to avoid
+   // negative zero flags in numeric-display and packed-decimal reprentatios
+   // when there have been truncations.
+   tree type = TREE_TYPE(value);
+   if( rounded == truncation_e )
+     {
+     // This is the simplest and most common case.
+     gg_assign(value, gg_divide(value, pot));
+     IF( value, eq_op, build_int_cst_type(type, 0) )
+       {
+       gg_assign(retval, integer_zero_node);
+       }
+     ELSE
+       {
+       gg_assign(retval, integer_one_node);
+       }
+     ENDIF
+     return retval;
+     }
+   // With truncation out of the way, we actually have to do some work.
+   bool signable = !TYPE_UNSIGNED(type);
+ 
+   // Let's calculate rem = abs(value) % pot.  So, if the POT is, say, 1000,
+   // the remainder will be between 000 and 999 inclusive.
+   tree rem = gg_define_variable(type);
+   gg_assign(rem, gg_mod(gg_abs(value), pot));
+   gg_assign(value, gg_divide(value, pot));
+ 
+   // We often need the halfway point, that is, 500 when POT is 1000
+   tree half = gg_define_variable(type);
+   gg_assign(half, gg_divide(pot, build_int_cst_type(type, 2)));
+ 
+   tree zero = build_int_cst_type(type, 0);
+ 
+   switch(rounded)
+     {
+     case away_from_zero_e:
+       {
+       /* "If the AWAY-FROM-ZERO phrase is specified and the arithmetic value
+          cannot be exactly represented in the resultant identifier, the
+          arithmetic value is rounded to the nearest value farther from zero
+          that can be represented in the resultant identifier." */
+       if( signable )
+         {
+         IF( value, ge_op, zero )
+           {
+           // The value is positive, so if there is a remainder, increment it
+           IF( rem, gt_op, zero )
+             {
+             gg_increment(value);
+             }
+           ELSE {} ENDIF
+           }
+         ELSE
+           {
+           // The value is negative, so if there is a remainder, decrement it
+           IF( rem, gt_op, zero )
+             {
+             gg_decrement(value);
+             }
+           ELSE {} ENDIF
+           }
+         ENDIF
+         }
+       else
+         {
+         // The value is positive, so if there is a remainder, increment it
+         IF( rem, gt_op, zero )
+           {
+           gg_increment(value);
+           }
+         ELSE {} ENDIF
+         }
+       break;
+       }
+ 
+     case nearest_away_from_zero_e:
+       {
+       /* "If the NEAREST-AWAY-FROM-ZERO phrase is specified or implied and the
+          arithmetic value cannot be exactly represented in the resultant
+          identifier, the arithmetic value is rounded to the nearest value that
+          can be represented in the resultant identifier. If two such values are
+          equally near, the value farther from zero is chosen."
+ 
+          This is rounding like you learned in grade school,
+          */
+       if( signable )
+         {
+         IF( value, ge_op, zero )
+           {
+           // The value is positive, so if remainder >= 5, increment it
+           IF( rem, ge_op, half )
+             {
+             gg_increment(value);
+             }
+           ELSE {} ENDIF
+           }
+         ELSE
+           {
+           // The value is negative, so if remainder < 5, decrement it
+           IF( rem, ge_op, half )
+             {
+             gg_decrement(value);
+             }
+           ELSE {} ENDIF
+           }
+         ENDIF
+         }
+       else
+         {
+         // The value is positive, so if remainder >= 5, increment it
+         IF( rem, ge_op, half )
+           {
+           gg_increment(value);
+           }
+         ELSE {} ENDIF
+         }
+       break;
+       }
+ 
+     case nearest_even_e:
+       {
+       /* "If the NEAREST-EVEN phrase is specified and the arithmetic value
+          cannot be exactly represented in the resultant identifier, the
+          arithmetic value is rounded to the nearest value that can be
+          represented in the resultant identifier. If two such values are
+          equally near, the value whose rightmost digit is even is chosen.
+          NOTE: This method is sometimes known as 'banker's rounding'." */
+       if( signable )
+         {
+         IF( rem, eq_op, half )
+           {
+           // This is the money shot, exactly half-way.
+           IF( value, ge_op, zero )
+             {
+             gg_increment(value);
+             gg_assign(value,
+                       gg_bitwise_and(value,
+                                      gg_bitwise_not(build_int_cst_type(type,
+                                                                        1))));
+             }
+           ELSE
+             {
+             gg_assign(value, gg_negate(value));
+             gg_increment(value);
+             gg_assign(value,
+                       gg_bitwise_and(value,
+                                      gg_bitwise_not(build_int_cst_type(type,
+                                                                        1))));
+             gg_assign(value, gg_negate(value));
+             }
+           ENDIF
+           }
+         ELSE
+           {
+           // The signable value has a remainder that is not exactly 5
+           IF( value, ge_op, zero )
+             {
+             // The value is positive, so if remainder >= 5, increment it
+             IF( rem, ge_op, half )
+               {
+               gg_increment(value);
+               }
+             ELSE {} ENDIF
+             }
+           ELSE
+             {
+             // The value is negative, so if remainder < 5, decrement it
+             IF( rem, ge_op, half )
+               {
+               gg_decrement(value);
+               }
+             ELSE {} ENDIF
+             }
+           ENDIF
+           }
+         ENDIF
+         }
+       else
+         {
+         // The value is not signable, hence it is positive:
+         IF( rem, eq_op, half )
+           {
+           // This is the money shot, exactly half-way.
+           // Make value a multiple of 2
+           gg_increment(value);
+           gg_assign(value,
+                     gg_bitwise_and(value,
+                                    gg_bitwise_not(build_int_cst_type(type,
+                                                                      1))));
+           }
+         ELSE
+           {
+           // The value is positive, so if remainder > 5, increment it
+           IF( rem, gt_op, half )
+             {
+             gg_increment(value);
+             }
+           ELSE {} ENDIF
+           }
+         ENDIF
+         }
+       break;
+       }
+ 
+     case nearest_toward_zero_e:
+       {
+       /* "If the NEAREST-TOWARD-ZERO phrase is specified and the arithmetic
+          value cannot be exactly represented in the resultant identifier, the
+          arithmetic value is rounded to the nearest value that can be
+          represented in the resultant identifier. If two such values are
+          equally near, the value nearest to zero is chosen." */
+       if( signable )
+         {
+         IF( value, ge_op, zero )
+           {
+           // The value is positive, so if remainder > 5, increment it
+           IF( rem, gt_op, half )
+             {
+             gg_increment(value);
+             }
+           ELSE {} ENDIF
+           }
+         ELSE
+           {
+           // The value is negative, so if remainder < 5, decrement it
+           IF( rem, gt_op, half )
+             {
+             gg_decrement(value);
+             }
+           ELSE {} ENDIF
+           }
+         ENDIF
+         }
+       else
+         {
+         // The value is positive, so if remainder > 5, increment it
+         IF( rem, gt_op, half )
+           {
+           gg_increment(value);
+           }
+         ELSE {} ENDIF
+         }
+       break;
+       }
+     case prohibited_e:
+       {
+       /* "If the PROHIBITED phrase is specified, and the arithmetic value
+          cannot be represented exactly in the resultant identifier, the
+          EC-SIZE-TRUNCATION exception condition is set to exist, the size error
+          condition exists, and the content of the resultant identifier is
+          unchanged." */
+       const cbl_enabled_exceptions_t&
+                                 enabled_exceptions( cdf_enabled_exceptions() );
+       IF( rem, ne_op, zero )
+         {
+         if( size_error )
+           {
+           gg_assign(size_error, integer_one_node);
+           }
+         else if( enabled_exceptions.match(ec_size_truncation_e) )
+           {
+           set_exception_code(ec_size_truncation_e);
+           }
+         }
+       ELSE
+         {
+         }
+       ENDIF
+       break;
+       }
+ 
+     case toward_greater_e:
+       {
+       /* "If the TOWARD-GREATER phrase is specified, and the arithmetic value
+          cannot be represented exactly in the resultant identifier, the
+          arithmetic value is rounded to the nearest larger value that can be
+          represented in the resultant identifier." */
+       IF( value, ge_op, zero )
+         {
+         // The value is positive, so if remainder != 0, increment it
+         IF( rem, ne_op, zero )
+           {
+           gg_increment(value);
+           }
+         ELSE {} ENDIF
+         }
+       ELSE {} ENDIF
+       break;
+       }
+    
+     case toward_lesser_e:
+       {
+       /* "If the TOWARD-LESS phrase is specified, and the arithmetic value
+           cannot be represented exactly in the resultant identifier, the
+           arithmetic value is rounded to the nearest smaller value that
+           can be represented in the resultant identifier." */
+       IF( value, lt_op, zero )
+         {
+         // The value is negative, so if remainder != 0 , decrement it
+         IF( rem, ne_op, zero )
+           {
+           gg_decrement(value);
+           }
+         ELSE {} ENDIF
+         }
+       ELSE {} ENDIF
+       break;
+       }
+ 
+     case truncation_e:
+       {
+       /* We do nothing.*/
+       gg_assign(value, gg_divide(value, pot));
+       break;
+       }
+     }
+   IF( value, eq_op, build_int_cst_type(type, 0) )
+     {
+     gg_assign(retval, integer_zero_node);
+     }
+   ELSE
+     {
+     gg_assign(retval, integer_one_node);
+     }
+   ENDIF
+   return retval;
+   }
diff -Nrcpad gcc-17-20260621/gcc/cobol/genutil.h gcc-17-20260628/gcc/cobol/genutil.h
*** gcc-17-20260621/gcc/cobol/genutil.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/genutil.h	Sun Jun 28 22:32:06 2026
*************** void      scale_by_power_of_ten_N(tree v
*** 90,100 ****
  tree      scale_by_power_of_ten(tree value,
                                  tree N,
                                  bool check_for_fractional = false);
! void      scale_and_round(tree value,
!                           int  value_rdigits,
!                           bool target_is_signable,
!                           int  target_rdigits,
!                           cbl_round_t rounded);
  void      hex_dump(tree data, size_t bytes);
  void      set_exception_code_func(ec_type_t ec,
                                    int line,
--- 90,99 ----
  tree      scale_by_power_of_ten(tree value,
                                  tree N,
                                  bool check_for_fractional = false);
! tree      round_this_value( tree &value,
!                             tree power_of_ten,
!                             cbl_round_t rounded,
!                             tree size_error);
  void      hex_dump(tree data, size_t bytes);
  void      set_exception_code_func(ec_type_t ec,
                                    int line,
diff -Nrcpad gcc-17-20260621/gcc/cobol/lang-specs.h gcc-17-20260628/gcc/cobol/lang-specs.h
*** gcc-17-20260621/gcc/cobol/lang-specs.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/lang-specs.h	Sun Jun 28 22:32:06 2026
***************
*** 34,40 ****
      {".CBL", "@cobol", 0, 0, 0},
      {"@cobol",
          "cobol1 %i %(cc1_options) "
-         "%I "
          "%{B*} %{D*} %{E} %{I*} %{M} %{fmax-errors*} %{fsyntax-only*} "
          "%{idirafter}"
          "%{fcobol-exceptions*} "
--- 34,39 ----
***************
*** 68,73 ****
--- 67,73 ----
  	"%{Wno-copybook-found} "
  	"%{Wno-ec-unknown} "
  	"%{Wno-entry-convention} "
+ 	"%{Wno-ibm-cdf} "
  	"%{Wno-iconv-error} "
  	"%{Wno-include-file-found} "
  	"%{Wno-include-file-not-found} "
diff -Nrcpad gcc-17-20260621/gcc/cobol/lang.opt gcc-17-20260628/gcc/cobol/lang.opt
*** gcc-17-20260621/gcc/cobol/lang.opt	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/lang.opt	Sun Jun 28 22:32:06 2026
*************** Wnllanginfo-error
*** 228,233 ****
--- 228,238 ----
  Cobol Warning Var(nllanginfo_error, 1) Init(1)
  Warn if nlanglanginfo(3) fails.
  
+ ; IbmCdf
+ Wibm-cdf
+ Cobol Warning Var(cobol_ibmcdf, 1) Init(1)
+ Warn if IBM-specific CDF directives are used.
+ 
  ; IbmLengthOf
  Wlength-of
  Cobol Warning Var(cobol_length_of, 1) Init(1)
*************** preprocess
*** 390,411 ****
  Cobol Joined Separate Var(cobol_preprocess)
  Preprocess <source_filter> before compiling.
  
- iprefix
- Cobol Joined Separate
- ; Documented in C
- 
  include
  Cobol Joined Separate
  ; Documented in C
  
- isysroot
- Cobol Joined Separate
- ; Documented in C
- 
- isystem
- Cobol Joined Separate
- ; Documented in C
- 
  idirafter
  Cobol Joined Separate
  ; Documented in c.opt
--- 395,404 ----
diff -Nrcpad gcc-17-20260621/gcc/cobol/lang.opt.urls gcc-17-20260628/gcc/cobol/lang.opt.urls
*** gcc-17-20260621/gcc/cobol/lang.opt.urls	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/lang.opt.urls	Sun Jun 28 22:32:06 2026
*************** LangUrlSuffix_Fortran(gfortran/Fortran-D
*** 28,45 ****
  preprocess
  UrlSuffix(gcc/Overall-Options.html#index-preprocess)
  
- iprefix
- UrlSuffix(gcc/Directory-Options.html#index-iprefix) LangUrlSuffix_D(gdc/Directory-Options.html#index-iprefix) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-iprefix)
- 
  include
  UrlSuffix(gcc/Preprocessor-Options.html#index-include)
  
- isysroot
- UrlSuffix(gcc/Directory-Options.html#index-isysroot) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-isysroot)
- 
- isystem
- UrlSuffix(gcc/Directory-Options.html#index-isystem) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-isystem)
- 
  idirafter
  UrlSuffix(gcc/Directory-Options.html#index-idirafter) LangUrlSuffix_Fortran(gfortran/Preprocessing-Options.html#index-idirafter)
  
--- 28,36 ----
diff -Nrcpad gcc-17-20260621/gcc/cobol/lexio.cc gcc-17-20260628/gcc/cobol/lexio.cc
*** gcc-17-20260621/gcc/cobol/lexio.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/lexio.cc	Sun Jun 28 22:32:06 2026
*************** bool lexio_dialect_mf();
*** 1695,1715 ****
  static const char *
  valid_sequence_area( const char *data, const char *eodata ) {
  
!   for( const char *p = data;
         (p = std::find_if(p, eodata, is_p)) != eodata;
         p++ )
    {
      auto eol = std::find(p, eodata, '\n');
!     if( p == data || ISSPACE(p[-1]) ) {
!       if( is_program_id(p, eol) ) {  // found program-id token
  	const char *bol = p;
  	for( ; data <= bol-1 && bol[-1] != '\n'; --bol )
  	  ;
! 	if( 6 < p - bol ) {
! 	  if( std::all_of(bol, bol+6, ::isdigit) ) {
! 	    return bol;
! 	  }
! 	  if( std::all_of(bol, bol+6, ::isblank) ) {
  	    return bol;
  	  }
  	  break;
--- 1695,1716 ----
  static const char *
  valid_sequence_area( const char *data, const char *eodata ) {
  
!   for( const char *p = data; // find every 'P' to try Program-ID
         (p = std::find_if(p, eodata, is_p)) != eodata;
         p++ )
    {
      auto eol = std::find(p, eodata, '\n');
!     if( p == data || ISSPACE(p[-1]) ) { // start-of-buffer or preceded by space. 
!       if( is_program_id(p, eol) ) {     // found program-id token
  	const char *bol = p;
  	for( ; data <= bol-1 && bol[-1] != '\n'; --bol )
  	  ;
! 	if( 6 < p - bol ) {             // Program-ID is at least in column 7 (?)
! 	  bool ok = std::all_of( bol, bol+6,
!                                  []( char ch ) {
!                                    return ISDIGIT(ch) || ISBLANK(ch);
!                                  } );
!           if( ok ) {                    // sequence area is all digits or blanks
  	    return bol;
  	  }
  	  break;
diff -Nrcpad gcc-17-20260621/gcc/cobol/messages.cc gcc-17-20260628/gcc/cobol/messages.cc
*** gcc-17-20260621/gcc/cobol/messages.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/messages.cc	Sun Jun 28 22:32:06 2026
*************** std::set<cbl_diag_t> cbl_diagnostics {
*** 122,127 ****
--- 122,128 ----
  
    { EcUnknownW, "-Wec-unknown", diagnostics::kind::warning },
  
+   { IbmCdf, "-Wibm-cdf", diagnostics::kind::error, dialect_ibm_e },
    { IbmEjectE, "-Wcobol-eject", diagnostics::kind::error, dialect_ibm_e },
    { IbmLengthOf, "-Wlength-of", diagnostics::kind::error, dialect_ibm_mf_gnu },
    { IbmEqualAssignE, "-Wequal-assign", diagnostics::kind::error, dialect_ibm_e },
*************** cobol_warning_suppress( cbl_dialect_t di
*** 250,255 ****
--- 251,259 ----
    for( auto diag : cbl_diagnostics ) {
      if( diag.dialect & dialect ) {
        switch(diag.id) {
+       case IbmCdf:
+         diag.kind = diagnostics::kind::warning;
+         break;
        case IbmSectionNegE:
        case IbmSectionRangeE:
        case IbmSectionSegmentW:
diff -Nrcpad gcc-17-20260621/gcc/cobol/move.cc gcc-17-20260628/gcc/cobol/move.cc
*** gcc-17-20260621/gcc/cobol/move.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/move.cc	Sun Jun 28 22:32:06 2026
*************** mh_numeric_display( const cbl_refer_t &d
*** 1268,1273 ****
--- 1268,1794 ----
    return moved;
    }
  
+ static tree
+ cobol_wider_type_with_x_signedness (tree s_type, tree x_type)
+   {
+   gcc_assert (INTEGRAL_TYPE_P (s_type));
+   gcc_assert (INTEGRAL_TYPE_P (x_type));
+ 
+   unsigned int s_prec = TYPE_PRECISION (s_type);
+   unsigned int x_prec = TYPE_PRECISION (x_type);
+ 
+   unsigned int w_prec = MAX (s_prec, x_prec);
+   int unsignedp = TYPE_UNSIGNED (x_type);
+ 
+   return build_nonstandard_integer_type (w_prec, unsignedp);
+   }
+ 
+ static bool
+ mh_binary_to_numdisp(const cbl_refer_t &destref,
+                      const cbl_refer_t &sourceref,
+                            cbl_round_t  rounded,
+                            tree         size_error)
+   {
+   bool moved = false;
+ 
+   charmap_t *charmap_dest =
+                     __gg__get_charmap(destref.field->codeset.encoding);
+   if(     destref.field->type   == FldNumericDisplay
+       &&  !(destref.field->attr   & scaled_e)
+       &&  !(sourceref.field->attr & scaled_e)
+       &&  charmap_dest->stride() == 1
+       &&  (    sourceref.field->type == FldNumericBinary
+             || sourceref.field->type == FldNumericBin5
+             || sourceref.field->type == FldLiteralN
+             || sourceref.field->type == FldIndex
+             || sourceref.field->type == FldPointer ) )
+     {
+     tree plus = build_int_cst_type(UCHAR,
+                                    charmap_dest->is_like_ebcdic()
+                                    ? ebcdic_plus : ascii_plus );
+     tree minus = build_int_cst_type(UCHAR,
+                                    charmap_dest->is_like_ebcdic()
+                                    ? ebcdic_minus : ascii_minus );
+     tree dest_location;
+     get_location(dest_location, destref);
+ 
+     tree s_type   = tree_type_from_refer(sourceref);
+     tree d_type   = tree_type_from_refer(destref);
+ 
+     // Our working type is the larger of the source and destination types.
+     tree work_type = cobol_wider_type_with_x_signedness(d_type, s_type);
+ 
+     tree value ;
+     get_binary_value(value, sourceref, work_type);
+ 
+     tree negative = gg_define_variable(INT);
+     gg_assign(negative, integer_zero_node);
+ 
+     tree sign_location = NULL_TREE;
+ 
+     if( destref.field->attr & signable_e )
+       {
+       sign_location = gg_define_variable(UCHAR_P);
+       if(    (destref.field->attr & separate_e)
+           && (destref.field->attr & leading_e ) )
+         {
+         // separate and leading
+         gg_assign(sign_location, dest_location);
+         gg_increment(dest_location);
+         }
+       else if(    (destref.field->attr & separate_e)
+               && !(destref.field->attr & leading_e ) )
+         {
+         // separate and trailing
+         gg_assign(sign_location, gg_add(dest_location,
+                                         build_int_cst_type(SIZE_T,
+                                          destref.field->data.capacity()-1)));
+         }
+       else if(   !(destref.field->attr & separate_e)
+               &&  (destref.field->attr & leading_e ) )
+         {
+         // internal and leading
+         gg_assign(sign_location, dest_location);
+         }
+       else
+         {
+         // internal and trailing
+         gg_assign(sign_location, gg_add(dest_location,
+                                         build_int_cst_type(SIZE_T,
+                                          destref.field->data.capacity()-1)));
+         }
+       }
+ 
+     if(    (sourceref.field->attr & signable_e)
+         && (destref.field->attr   & signable_e) )
+       {
+       // Both source and dest are signable, which means we have to preserve
+       // the source sign and apply it, eventually, to the target.
+       IF( value, lt_op, gg_cast(work_type, integer_zero_node) )
+         {
+         gg_assign(negative, integer_one_node);
+         }
+       ELSE {} ENDIF
+       }
+ 
+     // At this point we have to align the source and destination value rdigits.
+ 
+     if( !(sourceref.field->attr & intermediate_e) )
+       {
+       // Because the source is not intermediate, we can work with the compile-
+       // time values.
+       int source_rdigits = sourceref.field->data.rdigits;
+       int dest_rdigits   = destref.field->data.rdigits;
+       int nshift = source_rdigits - dest_rdigits;
+       if(nshift < 0)
+         {
+         // We need to multiply the source by 10^(-nshift) to line them up.
+         FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten( -nshift );
+         gg_assign(value, gg_multiply(value,
+                                      wide_int_to_tree(work_type,
+                                                       power_of_ten)));
+         }
+       else if(nshift > 0)
+         {
+         // We need to divide the source by 10^(nshift) to line them up.
+         // This is a potential rounding situation.
+         FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten( nshift );
+         tree pot = wide_int_to_tree(work_type, power_of_ten);
+         gg_assign(negative,
+                   gg_bitwise_and( negative,
+                                   round_this_value(value,
+                                                    pot,
+                                                    rounded,
+                                                    size_error)));
+         }
+       }
+     else
+       {
+       // Source is intermediate; we need to use the dynamic source rdigits
+       // Because the source is not intermediate, we can work with the compile-
+       // time values.
+       tree source_rdigits = gg_define_variable(INT);
+       tree dest_rdigits;
+       tree nshift         = gg_define_variable(INT);
+ 
+       gg_assign(source_rdigits,
+                 gg_cast(INT,
+                         member(sourceref.field->var_decl_node,
+                                "rdigits")));
+       dest_rdigits = build_int_cst_type(INT, destref.field->data.rdigits);
+       gg_assign(nshift, gg_subtract(source_rdigits, dest_rdigits));
+       tree power_of_ten = gg_define_variable(work_type);
+       IF( nshift, lt_op, integer_zero_node )
+         {
+         // We need to multiply the source by 10^(-nshift) to line them up.
+         gg_assign(power_of_ten,
+                   gg_cast(work_type,
+                           gg_call_expr(INT128,
+                                        "__gg__power_of_ten",
+                                         gg_negate(nshift),
+                                         NULL_TREE)));
+         gg_assign(value, gg_multiply(value, power_of_ten));
+         }
+       ELSE
+         {
+         IF( nshift, gt_op, integer_zero_node )
+           {
+           // We need to divide the source by 10^(nshift) to line them up.
+           // This is a potential rounding situation.
+           gg_assign(power_of_ten,
+                     gg_cast(work_type,
+                             gg_call_expr(INT128,
+                                          "__gg__power_of_ten",
+                                           nshift,
+                                           NULL_TREE)));
+           gg_assign(negative,
+                     gg_bitwise_and( negative,
+                                     round_this_value(value,
+                                                      power_of_ten,
+                                                      rounded,
+                                                      size_error)));
+           }
+         ELSE
+           {
+           }
+         ENDIF
+         }
+       ENDIF
+       }
+ 
+     // At this point, value is lined up with the destination.
+ 
+     // Make it positive
+ 
+     if( !TYPE_UNSIGNED(work_type) )
+       {
+       gg_assign(value, gg_abs(value));
+       }
+ 
+     if( size_error )
+       {
+       // We need to see if is too big to fit
+       FIXED_WIDE_INT(128) power_of_ten =
+                                 get_power_of_ten(destref.field->data.digits);
+       tree pot = wide_int_to_tree(work_type, power_of_ten);
+       IF( gg_divide(value, pot),
+           ne_op,
+           gg_cast(work_type, integer_zero_node) )
+           {
+           // The value is too big; flag it:
+           gg_assign(size_error, integer_one_node);
+           }
+         ELSE
+           {
+           }
+         ENDIF
+       }
+ 
+     if( charmap_dest->is_like_ebcdic() )
+       {
+       gg_call(INT,
+               "__gg__binary_to_string_ebcdic",
+               dest_location,
+               build_int_cst_type(INT, destref.field->data.digits),
+               gg_cast(INT128, value),
+               NULL_TREE);
+       }
+     else
+       {
+       gg_call(INT,
+               "__gg__binary_to_string_ascii",
+               dest_location,
+               build_int_cst_type(INT, destref.field->data.digits),
+               gg_cast(INT128, value),
+               NULL_TREE);
+       }
+ 
+     if(    (sourceref.field->attr & signable_e )
+         && (destref.field->attr   & signable_e ) )
+       {
+       IF( negative, ne_op, integer_zero_node )
+         {
+         if( destref.field->attr & separate_e )
+           {
+           // We flag the separate as negative
+           gg_assign(gg_indirect(sign_location), minus);
+           }
+         else
+           {
+           if( charmap_dest->is_like_ebcdic() )
+             {
+             gg_assign(gg_indirect(sign_location),
+                       gg_bitwise_and(gg_indirect(sign_location),
+                                      build_int_cst_type(UCHAR, 0xDF)));
+             }
+           else
+             {
+             gg_assign(gg_indirect(sign_location),
+                       gg_bitwise_or(gg_indirect(sign_location),
+                                     build_int_cst_type(UCHAR, 0x70)));
+             }
+           }
+         }
+       ELSE
+         {
+         // The result is positive
+         if( destref.field->attr & separate_e )
+           {
+           // We flag the separate as negative
+           gg_assign(gg_indirect(sign_location), plus);
+           }
+         }
+       ENDIF
+       }
+     else if(   (destref.field->attr & signable_e )
+             && (destref.field->attr & separate_e ) )
+       {
+       // The source is not signed, but the destination is signable and
+       // separate:
+       gg_assign(gg_indirect(sign_location), plus);
+       }
+ 
+     moved = true;
+     }
+ 
+   return moved;
+   }
+ 
+ static bool
+ mh_binary_to_packed(const cbl_refer_t &destref,
+                     const cbl_refer_t &sourceref,
+                           cbl_round_t  rounded,
+                           tree         size_error)
+   {
+   bool moved = false;
+ 
+   if(     destref.field->type   == FldPacked
+       &&  !(destref.field->attr   & scaled_e)
+       &&  !(sourceref.field->attr & scaled_e)
+       &&  (    sourceref.field->type == FldNumericBinary
+             || sourceref.field->type == FldNumericBin5
+             || sourceref.field->type == FldLiteralN
+             || sourceref.field->type == FldIndex
+             || sourceref.field->type == FldPointer ) )
+     {
+     tree dest_location;
+     get_location(dest_location, destref);
+ 
+     tree s_type   = tree_type_from_refer(sourceref);
+     tree d_type   = tree_type_from_refer(destref);
+ 
+     // Our working type is the larger of the source and destination types.
+     tree work_type = cobol_wider_type_with_x_signedness(d_type, s_type);
+ 
+     tree value ;
+     get_binary_value(value, sourceref, work_type);
+ 
+     tree negative = gg_define_variable(INT);
+     gg_assign(negative, integer_zero_node);
+ 
+     if(    (sourceref.field->attr & signable_e)
+         && (destref.field->attr   & signable_e) )
+       {
+       // Both source and dest are signable, which means we have to preserve
+       // the source sign and apply it, eventually, to the target.
+       IF( value, lt_op, gg_cast(work_type, integer_zero_node) )
+         {
+         gg_assign(negative, integer_one_node);
+         }
+       ELSE
+         {
+         gg_assign(negative, integer_zero_node);
+         }
+       ENDIF
+       }
+ 
+     // At this point we have to align the source and destination value rdigits.
+ 
+     if( !(sourceref.field->attr & intermediate_e) )
+       {
+       // Because the source is not intermediate, we can work with the compile-
+       // time values.
+       int source_rdigits = sourceref.field->data.rdigits;
+       int dest_rdigits   = destref.field->data.rdigits;
+       int nshift = source_rdigits - dest_rdigits;
+       if(nshift < 0)
+         {
+         // We need to multiply the source by 10^(-nshift) to line them up.
+         FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten( -nshift );
+         gg_assign(value, gg_multiply(value,
+                                      wide_int_to_tree(work_type,
+                                                       power_of_ten)));
+         }
+       else if(nshift > 0)
+         {
+         // We need to divide the source by 10^(nshift) to line them up.
+         // This is a potential rounding situation.
+         FIXED_WIDE_INT(128) power_of_ten = get_power_of_ten(nshift);
+         tree pot = wide_int_to_tree(work_type, power_of_ten);
+         gg_assign(negative,
+                   gg_bitwise_and( negative,
+                                   round_this_value(value,
+                                                    pot,
+                                                    rounded,
+                                                    size_error)));
+         }
+       }
+     else
+       {
+       // Source is intermediate; we need to use the dynamic source rdigits
+       // Because the source is not intermediate, we can work with the compile-
+       // time values.
+       tree source_rdigits = gg_define_variable(INT);
+       tree dest_rdigits;
+       tree nshift         = gg_define_variable(INT);
+ 
+       gg_assign(source_rdigits,
+                 gg_cast(INT,
+                         member(sourceref.field->var_decl_node,
+                                "rdigits")));
+       dest_rdigits = build_int_cst_type(INT, destref.field->data.rdigits);
+       gg_assign(nshift, gg_subtract(source_rdigits, dest_rdigits));
+       tree power_of_ten = gg_define_variable(work_type);
+       IF( nshift, lt_op, integer_zero_node )
+         {
+         // We need to multiply the source by 10^(-nshift) to line them up.
+         gg_assign(power_of_ten,
+                   gg_cast(work_type,
+                           gg_call_expr(INT128,
+                                        "__gg__power_of_ten",
+                                         gg_negate(nshift),
+                                         NULL_TREE)));
+         gg_assign(value, gg_multiply(value, power_of_ten));
+         }
+       ELSE
+         {
+         IF( nshift, gt_op, integer_zero_node )
+           {
+           // We need to divide the source by 10^(nshift) to line them up.
+           // This is a potential rounding situation.
+           gg_assign(power_of_ten,
+                     gg_cast(work_type,
+                             gg_call_expr(INT128,
+                                          "__gg__power_of_ten",
+                                           nshift,
+                                           NULL_TREE)));
+           // At this point, value is ten times as big as the final value, so
+           // we are set up to round it:
+           gg_assign(negative,
+                     gg_bitwise_and( negative,
+                                     round_this_value(value,
+                                                      power_of_ten,
+                                                      rounded,
+                                                      size_error)));
+           }
+         ELSE
+           {
+           }
+         ENDIF
+         }
+       ENDIF
+       }
+ 
+     // At this point, value is lined up with the destination.
+ 
+     // Make it positive
+ 
+     if( !TYPE_UNSIGNED(work_type) )
+       {
+       gg_assign(value, gg_abs(value));
+       }
+ 
+     if( size_error )
+       {
+       // We need to see if is too big to fit
+       FIXED_WIDE_INT(128) power_of_ten =
+                                 get_power_of_ten(destref.field->data.digits);
+       tree pot = wide_int_to_tree(work_type, power_of_ten);
+       IF( gg_divide(value, pot),
+           ne_op,
+           gg_cast(work_type, integer_zero_node) )
+           {
+           // The value is too big; flag it:
+           gg_assign(size_error, integer_one_node);
+           }
+         ELSE
+           {
+           }
+         ENDIF
+       }
+ 
+     // We are now ready to convert the binary to the packed byte string.
+     
+     int ndigits;
+     if( !(destref.field->attr & packed_no_sign_e) )
+       {
+       // This is ordinary packed.  We need to multiply the value by ten to
+       // make room for the sign nybble.
+       gg_assign(value, gg_multiply(value, build_int_cst_type(work_type, 10)));
+       ndigits = destref.field->data.digits+1;
+       }
+     else
+       {
+       ndigits = destref.field->data.digits;
+       }
+ 
+     gg_call(INT,
+             "__gg__binary_to_packed",
+             dest_location,
+             build_int_cst_type(INT, ndigits),
+             gg_cast(INT128, value),
+             NULL_TREE);
+ 
+     if( !(destref.field->attr & packed_no_sign_e) )
+       {
+       tree sign_loc = gg_add(dest_location,
+                              build_int_cst_type(SIZE_T,
+                                           destref.field->data.capacity()-1));
+       if( !(destref.field->attr & signable_e) )
+         {
+         // This is an unsigned packed decimal.
+         gg_assign(gg_indirect(sign_loc),
+                   gg_bitwise_or(gg_indirect(sign_loc),
+                                 build_int_cst_type(UCHAR, 0x0F)));
+         }
+       else
+         {
+         // It is signable
+         if( !(sourceref.field->attr & signable_e) )
+           {
+           // The source wasn't signable, so the destination has to be positive.
+           gg_assign(gg_indirect(sign_loc),
+                     gg_bitwise_or(gg_indirect(sign_loc),
+                                   build_int_cst_type(UCHAR, 0x0C)));
+           }
+         else
+           {
+           // The source was signable, so we have to transfer the sign
+           IF( negative, ne_op, integer_one_node )
+             {
+             // The result is non-negative
+             gg_assign(gg_indirect(sign_loc),
+                       gg_bitwise_or(gg_indirect(sign_loc),
+                                     build_int_cst_type(UCHAR, 0x0C)));
+             }
+           ELSE
+             {
+             // The result is negative
+             gg_assign(gg_indirect(sign_loc),
+                       gg_bitwise_or(gg_indirect(sign_loc),
+                                     build_int_cst_type(UCHAR, 0x0D)));
+             }
+           ENDIF
+           }
+         }
+       }
+ 
+     moved = true;
+     }
+ 
+   return moved;
+   }
+ 
  static void
  copy_little_endian_into_place(cbl_field_t *dest,
                                tree         dest_offset,
*************** move_helper(tree size_error,        // T
*** 2953,2958 ****
--- 3474,3495 ----
      }
  
    if( !moved )
+     {
+     moved = mh_binary_to_numdisp(destref,
+                                  sourceref,
+                                  rounded,
+                                  size_error);
+     }
+ 
+   if( !moved )
+     {
+     moved = mh_binary_to_packed(destref,
+                                 sourceref,
+                                 rounded,
+                                 size_error);
+     }
+ 
+   if( !moved )
      {
      SHOW_PARSE1
        {
diff -Nrcpad gcc-17-20260621/gcc/cobol/parse.y gcc-17-20260628/gcc/cobol/parse.y
*** gcc-17-20260621/gcc/cobol/parse.y	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/parse.y	Sun Jun 28 22:32:06 2026
*************** class locale_tgt_t {
*** 311,316 ****
--- 311,317 ----
    struct file_list_t;
    struct cbl_label_t;
    typedef struct Elem_list_t<cbl_label_t*> Label_list_t;
+   typedef struct Elem_list_t<int> token_list_t;
  
    struct cbl_file_key_t;
    typedef struct Elem_list_t<cbl_file_key_t*> key_list_t;
*************** class locale_tgt_t {
*** 403,409 ****
  %token  <boolean>       PERFORM BACKWARD
  %token  <number>        POSITIVE
  %token  <field_attr>	POINTER
! %token  <string>        SECTION
  %token  <number>        STANDARD_ALPHABET "STANDARD ALPHABET"
  %token  <string>        SWITCH
  %token  <string>        UPSI 
--- 404,410 ----
  %token  <boolean>       PERFORM BACKWARD
  %token  <number>        POSITIVE
  %token  <field_attr>	POINTER
! %token  <string>        PROCESS SECTION
  %token  <number>        STANDARD_ALPHABET "STANDARD ALPHABET"
  %token  <string>        SWITCH
  %token  <string>        UPSI 
*************** class locale_tgt_t {
*** 596,602 ****
  			PAGE_COUNTER "PAGE-COUNTER"
  			PF PH PI PIC PICTURE
  			PLUS PRESENT_VALUE PRINT_SWITCH
! 			PROCEDURE PROCEDURES PROCEED PROCESS PROCESSING
  			PROGRAM_ID "PROGRAM-ID"
  			PROGRAM_kw "Program" PROPERTY PROTOTYPE PSEUDOTEXT
  
--- 597,603 ----
  			PAGE_COUNTER "PAGE-COUNTER"
  			PF PH PI PIC PICTURE
  			PLUS PRESENT_VALUE PRINT_SWITCH
! 			PROCEDURE PROCEDURES PROCEED PROCESSING
  			PROGRAM_ID "PROGRAM-ID"
  			PROGRAM_kw "Program" PROPERTY PROTOTYPE PSEUDOTEXT
  
*************** class locale_tgt_t {
*** 922,927 ****
--- 923,930 ----
  
  %type   <nameloc>       repo_func_name                        
  %type   <namelocs>      repo_func_names
+ %type   <tokens>        repo_intrinsics
+ %type   <number>        repo_intrinsic
  %type   <codeset>       codeset_name
  %type   <locale_phrase> locale_phrase
  %type   <number>        convert_hex convert_nat convert_alpha // convert_fmt
*************** class locale_tgt_t {
*** 969,974 ****
--- 972,978 ----
      struct perform_t *perf;
      struct cbl_perform_tgt_t *tgt;
             Label_list_t *labels;
+            token_list_t *tokens;
             key_list_t *file_keys;
             cbl_file_mode_t io_mode;
      struct cbl_file_key_t *file_key;
*************** class locale_tgt_t {
*** 1284,1290 ****
  			PAGE_COUNTER
                          PF PH PI PIC PICTURE PIC_P
                          PLUS POINTER POSITIVE PRESENT_VALUE PRINT_SWITCH
!                         PROCEDURE PROCEDURES PROCEED PROCESS
                          PROGRAM_ID
  			PROGRAM_kw PROPERTY PROTOTYPE PSEUDOTEXT
  
--- 1288,1294 ----
  			PAGE_COUNTER
                          PF PH PI PIC PICTURE PIC_P
                          PLUS POINTER POSITIVE PRESENT_VALUE PRINT_SWITCH
!                         PROCEDURE PROCEDURES PROCEED 
                          PROGRAM_ID
  			PROGRAM_kw PROPERTY PROTOTYPE PSEUDOTEXT
  
*************** cobol_words1:	COBOL_WORDS EQUATE NAME[ke
*** 1631,1636 ****
--- 1635,1643 ----
  	|	COBOL_WORDS RESERVE NAME[name] {
  		  if( ! cdf_tokens.reserve(@name, $name) ) { YYERROR; }
  		}
+         |       PROCESS {
+                   cbl_message(@1, IbmCdf, "%qs", $1);
+                 }
  		;
  
  program_id:     PROGRAM_ID dot namestr[name] program_as program_attrs[attr] dot
*************** dot:            %empty
*** 1685,1691 ****
          |       '.'
                  ;
  program_as:     %empty     { static const literal_t empty {}; $$ = empty; }
!         |       AS LITERAL { $$ = $2; }
                  ;
  
  function_id:    FUNCTION dot  NAME program_as program_attrs[attr] '.'
--- 1692,1705 ----
          |       '.'
                  ;
  program_as:     %empty     { static const literal_t empty {}; $$ = empty; }
!         |       AS LITERAL
!                 { // program-id not yet parsed, so top-level is 0
!                   if( 0 != current.program_level() ) {
!                     error_msg(@$, "AS %qs valid only for top-level programs",
!                               $LITERAL.data);
!                   }
!                   $$ = $2;
!                 }
                  ;
  
  function_id:    FUNCTION dot  NAME program_as program_attrs[attr] '.'
*************** repo_func:      FUNCTION repo_func_names
*** 2594,2601 ****
                  {
                    current.repository_add_all();
                  }
          |       FUNCTION repo_func_names[namelocs] {
- 		  // We allow multiple names because GnuCOBOL does.  ISO says 1.
                    for( const auto& nameloc : *$namelocs ) {
                      if( 0 != intrinsic_token_of(nameloc.name) ) {
                        error_msg(nameloc.loc,
--- 2608,2628 ----
                  {
                    current.repository_add_all();
                  }
+         |       FUNCTION repo_intrinsics INTRINSIC
+                 {
+                   for( int token : $repo_intrinsics->elems ) {
+                     if( token != 0 ) {
+                       current.repository_add(keyword_str(token));
+                     }
+                   }
+                 }
+         |       FUNCTION repo_intrinsics error {
+                   const char *func = $repo_intrinsics->elems.empty() ?
+                     "" : keyword_str($repo_intrinsics->elems.front());
+                   error_msg(@repo_intrinsics,
+                           "intrinsic function %qs requires INTRINSIC", func);
+                 }
          |       FUNCTION repo_func_names[namelocs] {
                    for( const auto& nameloc : *$namelocs ) {
                      if( 0 != intrinsic_token_of(nameloc.name) ) {
                        error_msg(nameloc.loc,
*************** repo_func_name: NAME repo_as {
*** 2635,2640 ****
--- 2662,2782 ----
                  }
                  ;
  
+ repo_intrinsics:
+                 repo_intrinsic { $$ = new token_list_t($1); }
+         |       repo_intrinsics repo_intrinsic {
+                   $$ = $1;
+                   $$->elems.push_back($repo_intrinsic);
+                 }
+                 ;
+  
+ repo_intrinsic: ABS { $$ = ABS; }
+         |       ACOS { $$ = ACOS; }
+         |       ANNUITY { $$ = ANNUITY; }
+         |       ASIN { $$ = ASIN; }
+         |       ATAN { $$ = ATAN; }
+         |       BASECONVERT { $$ = BASECONVERT; }
+         |       BIT_OF { $$ = BIT_OF; }
+         |       BIT_TO_CHAR { $$ = BIT_TO_CHAR; }
+         |       BOOLEAN_OF_INTEGER { $$ = BOOLEAN_OF_INTEGER; }
+         |       BYTE_LENGTH { $$ = BYTE_LENGTH; }
+         |       CHAR { $$ = CHAR; }
+         |       CHAR_NATIONAL { $$ = CHAR_NATIONAL; }
+         |       COMBINED_DATETIME { $$ = COMBINED_DATETIME; }
+         |       CONCAT { $$ = CONCAT; }
+         |       CONVERT { $$ = CONVERT; }
+         |       COS { $$ = COS; }
+         |       CURRENT_DATE { $$ = CURRENT_DATE; }
+         |       DATE_OF_INTEGER { $$ = DATE_OF_INTEGER; }
+         |       DATE_TO_YYYYMMDD { $$ = DATE_TO_YYYYMMDD; }
+         |       DAY_OF_INTEGER { $$ = DAY_OF_INTEGER; }
+         |       DAY_TO_YYYYDDD { $$ = DAY_TO_YYYYDDD; }
+         |       DISPLAY_OF { $$ = DISPLAY_OF; }
+         |       E { $$ = E; }
+         |       EXCEPTION_FILE { $$ = EXCEPTION_FILE; }
+         |       EXCEPTION_FILE_N { $$ = EXCEPTION_FILE_N; }
+         |       EXCEPTION_LOCATION { $$ = EXCEPTION_LOCATION; }
+         |       EXCEPTION_LOCATION_N { $$ = EXCEPTION_LOCATION_N; }
+         |       EXCEPTION_STATEMENT { $$ = EXCEPTION_STATEMENT; }
+         |       EXCEPTION_STATUS { $$ = EXCEPTION_STATUS; }
+         |       EXP { $$ = EXP; }
+         |       EXP10 { $$ = EXP10; }
+         |       FACTORIAL { $$ = FACTORIAL; }
+         |       FIND_STRING { $$ = FIND_STRING; }
+         |       FORMATTED_CURRENT_DATE { $$ = FORMATTED_CURRENT_DATE; }
+         |       FORMATTED_DATE { $$ = FORMATTED_DATE; }
+         |       FORMATTED_DATETIME { $$ = FORMATTED_DATETIME; }
+         |       FORMATTED_TIME { $$ = FORMATTED_TIME; }
+         |       FRACTION_PART { $$ = FRACTION_PART; }
+         |       HEX_OF { $$ = HEX_OF; }
+         |       HEX_TO_CHAR { $$ = HEX_TO_CHAR; }
+         |       HIGHEST_ALGEBRAIC { $$ = HIGHEST_ALGEBRAIC; }
+         |       INTEGER { $$ = INTEGER; }
+         |       INTEGER_OF_BOOLEAN { $$ = INTEGER_OF_BOOLEAN; }
+         |       INTEGER_OF_DATE { $$ = INTEGER_OF_DATE; }
+         |       INTEGER_OF_DAY { $$ = INTEGER_OF_DAY; }
+         |       INTEGER_OF_FORMATTED_DATE { $$ = INTEGER_OF_FORMATTED_DATE; }
+         |       INTEGER_PART { $$ = INTEGER_PART; }
+         |       LENGTH { $$ = LENGTH; }
+         |       LOCALE_COMPARE { $$ = LOCALE_COMPARE; }
+         |       LOCALE_DATE { $$ = LOCALE_DATE; }
+         |       LOCALE_TIME { $$ = LOCALE_TIME; }
+         |       LOCALE_TIME_FROM_SECONDS { $$ = LOCALE_TIME_FROM_SECONDS; }
+         |       LOG { $$ = LOG; }
+         |       LOG10 { $$ = LOG10; }
+         |       LOWER_CASE { $$ = LOWER_CASE; }
+         |       LOWEST_ALGEBRAIC { $$ = LOWEST_ALGEBRAIC; }
+         |       MAXX { $$ = MAXX; }
+         |       MEAN { $$ = MEAN; }
+         |       MEDIAN { $$ = MEDIAN; }
+         |       MIDRANGE { $$ = MIDRANGE; }
+         |       MINN { $$ = MINN; }
+         |       MOD { $$ = MOD; }
+         |       MODULE_NAME { $$ = MODULE_NAME; }
+         |       NATIONAL_OF { $$ = NATIONAL_OF; }
+         |       NUMVAL { $$ = NUMVAL; }
+         |       NUMVAL_C { $$ = NUMVAL_C; }
+         |       NUMVAL_F { $$ = NUMVAL_F; }
+         |       ORD { $$ = ORD; }
+         |       ORD_MAX { $$ = ORD_MAX; }
+         |       ORD_MIN { $$ = ORD_MIN; }
+         |       PI { $$ = PI; }
+         |       PRESENT_VALUE { $$ = PRESENT_VALUE; }
+         |       RANDOM { $$ = RANDOM; }
+         |       RANGE { $$ = RANGE; }
+         |       REM { $$ = REM; }
+         |       REVERSE { $$ = REVERSE; }
+         |       SECONDS_FROM_FORMATTED_TIME { $$ = SECONDS_FROM_FORMATTED_TIME; }
+         |       SECONDS_PAST_MIDNIGHT { $$ = SECONDS_PAST_MIDNIGHT; }
+         |       SIGN { $$ = SIGN; }
+         |       SIN { $$ = SIN; }
+         |       SMALLEST_ALGEBRAIC { $$ = SMALLEST_ALGEBRAIC; }
+         |       SQRT { $$ = SQRT; }
+         |       STANDARD_COMPARE { $$ = STANDARD_COMPARE; }
+         |       STANDARD_DEVIATION { $$ = STANDARD_DEVIATION; }
+         |       SUBSTITUTE { $$ = SUBSTITUTE; }
+         |       SUM { $$ = SUM; }
+         |       TAN { $$ = TAN; }
+         |       TEST_DATE_YYYYMMDD { $$ = TEST_DATE_YYYYMMDD; }
+         |       TEST_DAY_YYYYDDD { $$ = TEST_DAY_YYYYDDD; }
+         |       TEST_FORMATTED_DATETIME { $$ = TEST_FORMATTED_DATETIME; }
+         |       TEST_NUMVAL { $$ = TEST_NUMVAL; }
+         |       TEST_NUMVAL_C { $$ = TEST_NUMVAL_C; }
+         |       TEST_NUMVAL_F { $$ = TEST_NUMVAL_F; }
+         |       TRIM { $$ = TRIM; }
+         |       ULENGTH { $$ = ULENGTH; }
+         |       UPOS { $$ = UPOS; }
+         |       UPPER_CASE { $$ = UPPER_CASE; }
+         |       USUBSTR { $$ = USUBSTR; }
+         |       USUPPLEMENTARY { $$ = USUPPLEMENTARY; }
+         |       UUID4 { $$ = UUID4; }
+         |       UVALID { $$ = UVALID; }
+         |       UWIDTH { $$ = UWIDTH; }
+         |       VARIANCE { $$ = VARIANCE; }
+         |       WHEN_COMPILED { $$ = WHEN_COMPILED; }
+         |       YEAR_TO_YYYY { $$ = YEAR_TO_YYYY; }
+                 ;
+ 
  repo_program:   PROGRAM_kw NAME repo_as
                  {
                    size_t parent = 0;
*************** field:          cdf
*** 3711,3755 ****
                      }
                    }
                    field_done();
- 
- #if 0
-                   const auto& field(*$data_descr);
- 
-                   // Format data.initial per picture
-                   if( 0 == pristine_values.count(field.data.initial) ) {
-                     if( field.data.digits > 0 && !field.is_zero() ) {
-                       char *initial;
-                       int rdigits = field.data.rdigits < 0?
-                                     1 : field.data.rdigits + 1;
- 
-                       if( field.has_attr(scaled_e) ) {
-                         if( field.data.rdigits > 0 ) {
-                           rdigits = field.data.digits + field.data.rdigits;
-                         } else {
-                           rdigits = 0;
-                         }
-                       }
-                       initial = string_of(field.data.value_of());
-                       if( !initial ) {
-                         error_msg(@1, "could not convert value to string");
-                         YYERROR;
-                       }
-                       char decimal = symbol_decimal_point();
-                       std::replace(initial, initial + strlen(initial), '.', decimal);
-                       free(const_cast<char*>($data_descr->data.initial));
-                       $data_descr->data.initial = initial;
-                       if( yydebug ) {
-                         const char *value_str = string_of(field.data.value_of());
-                         dbgmsg("%s::data.initial is (%%%d.%d) %s ==> '%s'",
- 			       field.name,
- 			       field.data.digits,
- 			       rdigits,
- 			       value_str? value_str : "",
- 			       field.data.initial);
-                       }
-                     }
-                   }
- #endif
                  }
                  ;
  
--- 3853,3858 ----
*************** sentence:       statements  '.'
*** 5583,5588 ****
--- 5686,5695 ----
                    if( ! successful_parse() ) YYABORT;
                    YYACCEPT;
                  }
+         |       statements end_program1 {
+                   error_msg(@1, "missing %qs before END PROGRAM", ".");
+                   YYERROR;
+                 }
          |       program END_SUBPROGRAM namestr[name] '.'
                  { // a contained program (no prior END PROGRAM) is a "sentence"
                    const cbl_label_t *prog = current.program();
*************** simple_cond:    kind_of_name
*** 6626,6632 ****
                    lhs.addr_of = true;
                    auto rhs = cbl_field_of(symbol_field(0,0, "NULLS"));
                    $$ = new_reference(new_temporary(FldConditional));
!                   parser_relop($$->field, lhs, eq_op, rhs);
                  }
          |       expr /* IS */ NOT OMITTED
  	        { // IS captured by lexer
--- 6733,6739 ----
                    lhs.addr_of = true;
                    auto rhs = cbl_field_of(symbol_field(0,0, "NULLS"));
                    $$ = new_reference(new_temporary(FldConditional));
!                   ast_relop(@$, $$->field, lhs, eq_op, rhs);
                  }
          |       expr /* IS */ NOT OMITTED
  	        { // IS captured by lexer
*************** simple_cond:    kind_of_name
*** 6634,6640 ****
                    lhs.addr_of = true;
                    auto rhs = cbl_field_of(symbol_field(0,0, "NULLS"));
                    $$ = new_reference(new_temporary(FldConditional));
!                   parser_relop($$->field, lhs, ne_op, rhs);
                  }
          |       expr posneg[op] {
                    $$ = new_reference(new_temporary(FldConditional));
--- 6741,6747 ----
                    lhs.addr_of = true;
                    auto rhs = cbl_field_of(symbol_field(0,0, "NULLS"));
                    $$ = new_reference(new_temporary(FldConditional));
!                   ast_relop(@$, $$->field, lhs, ne_op, rhs);
                  }
          |       expr posneg[op] {
                    $$ = new_reference(new_temporary(FldConditional));
*************** simple_cond:    kind_of_name
*** 6646,6652 ****
                                cbl_field_type_name($1->field->type));
                      YYERROR;
                    }
!                   parser_relop($$->cond(), *$1, op, zero);
                  }
          |       scalar88 {
                    // copy the subscripts and set the parent field
--- 6753,6759 ----
                                cbl_field_type_name($1->field->type));
                      YYERROR;
                    }
!                   ast_relop(@$, $$->cond(), *$1, op, zero);
                  }
          |       scalar88 {
                    // copy the subscripts and set the parent field
*************** rel_expr:	rel_lhs rel_term[rhs]
*** 6748,6754 ****
                      YYERROR;
                    }
  		  auto cond = new_temporary(FldConditional);
! 		  parser_relop( cond, *ante.operand, op, *$rhs.term );
  		  $$ = cond;
                  }
  	|	rel_lhs[lhs] '(' rel_abbrs ')' {
--- 6855,6861 ----
                      YYERROR;
                    }
  		  auto cond = new_temporary(FldConditional);
! 		  ast_relop( @$, cond, *ante.operand, op, *$rhs.term );
  		  $$ = cond;
                  }
  	|	rel_lhs[lhs] '(' rel_abbrs ')' {
*************** rel_abbr:	rel_term {
*** 6804,6810 ****
                                              ante.operand, ante.relop, $rel_term.term) ){
                      YYERROR;
                    }
! 		  parser_relop(cond, *ante.operand, ante.relop, *$rel_term.term);
  		  $$ = cond;
  		}
  	|	relop rel_term {
--- 6911,6917 ----
                                              ante.operand, ante.relop, $rel_term.term) ){
                      YYERROR;
                    }
! 		  ast_relop(@$, cond, *ante.operand, ante.relop, *$rel_term.term);
  		  $$ = cond;
  		}
  	|	relop rel_term {
*************** rel_abbr:	rel_term {
*** 6827,6833 ****
                      YYERROR;
                    }
  		  auto cond = new_temporary(FldConditional);
! 		  parser_relop(cond, *ante.operand, ante.relop, *$rel_term.term);
  		  $$ = cond;
  		}
  		;
--- 6934,6940 ----
                      YYERROR;
                    }
  		  auto cond = new_temporary(FldConditional);
! 		  ast_relop(@$, cond, *ante.operand, ante.relop, *$rel_term.term);
  		  $$ = cond;
  		}
  		;
*************** eval_abbrs:	rel_term[a] {
*** 7174,7180 ****
                    cbl_refer_t lhs( ev.subject() );
                    // on pointer error, emit message and continue parsing 
                    valid_pointer_relop(@1, @1, @2, &lhs, relop_of($relop), $a.term);
! 		  auto result = ev.compare(relop, *$a.term);
  		  if( ! result ) YYERROR;
  		  if( $a.invert ) {
  		    parser_logop(result, nullptr, not_op, result);
--- 7281,7287 ----
                    cbl_refer_t lhs( ev.subject() );
                    // on pointer error, emit message and continue parsing 
                    valid_pointer_relop(@1, @1, @2, &lhs, relop_of($relop), $a.term);
! 		  auto result = ev.compare(@$, relop, *$a.term);
  		  if( ! result ) YYERROR;
  		  if( $a.invert ) {
  		    parser_logop(result, nullptr, not_op, result);
*************** eval_abbr:	rel_term[a] {
*** 7211,7217 ****
                    cbl_refer_t lhs(subj);
                    // on pointer error, emit message and continue parsing 
                    valid_pointer_relop(@1, @1, @1, &lhs, relop, $a.term);
! 		  $$ = ev.compare(relop, *$a.term);
  		  if( $a.invert ) {
  		    parser_logop($$, nullptr, not_op, $$);
  		  }
--- 7318,7324 ----
                    cbl_refer_t lhs(subj);
                    // on pointer error, emit message and continue parsing 
                    valid_pointer_relop(@1, @1, @1, &lhs, relop, $a.term);
! 		  $$ = ev.compare(@$, relop, *$a.term);
  		  if( $a.invert ) {
  		    parser_logop($$, nullptr, not_op, $$);
  		  }
*************** eval_abbr:	rel_term[a] {
*** 7224,7230 ****
                    cbl_refer_t lhs( ev.subject() );
                    // on pointer error, emit message and continue parsing 
                    valid_pointer_relop(@1, @1, @2, &lhs, relop_of($relop), $a.term);
! 		  $$ = ev.compare(relop, *$a.term);
  		  if( $a.invert ) {
  		    parser_logop($$, nullptr, not_op, $$);
  		  }
--- 7331,7337 ----
                    cbl_refer_t lhs( ev.subject() );
                    // on pointer error, emit message and continue parsing 
                    valid_pointer_relop(@1, @1, @2, &lhs, relop_of($relop), $a.term);
! 		  $$ = ev.compare(@$, relop, *$a.term);
  		  if( $a.invert ) {
  		    parser_logop($$, nullptr, not_op, $$);
  		  }
*************** ast_op( const cbl_loc_t& loc, cbl_refer_
*** 13428,13433 ****
--- 13535,13560 ----
    return tgt;
  }
  
+ /*
+  * Verify that any field being compared can be moved.  If it cannot, and one
+  * operand is not numeric, ensure the other is not FldFloat.
+  */
+ static void
+ ast_relop( const cbl_loc_t& loc, cbl_field_t *tgt,
+            cbl_refer_t lhs, relop_t op, cbl_refer_t rhs ) {
+   if( ! (valid_move(lhs.field, rhs.field) && valid_move(rhs.field, lhs.field)) ) {
+     if( is_numeric(lhs.field) != is_numeric(rhs.field) ) {
+       if( (lhs.field->type == FldFloat) || (rhs.field->type == FldFloat) ) {
+         error_msg(loc, "cannot compare %s to %s",
+                   cbl_field_type_name(lhs.field->type),
+                   cbl_field_type_name(rhs.field->type));
+         return;
+       }
+     }
+   }
+   parser_relop(tgt, lhs, op, rhs);
+ }
+ 
  static void
  ast_add( arith_t *arith ) {
    size_t nC = arith->tgts.size(), nA = arith->A.size();
*************** eval_subject_t::compare( int token ) {
*** 14806,14817 ****
  }
  
  cbl_field_t *
! eval_subject_t::compare( relop_t op, const cbl_refer_t& object, bool deciding ) {
    auto subject(*pcol);
    if( compatible(object.field) ) {
      if( ! is_conditional(subject.field) ) {
        auto result = deciding? this->result : new_temporary(FldConditional);
!       parser_relop(result, subject, op, object);
        return result;
        }
      }
--- 14933,14945 ----
  }
  
  cbl_field_t *
! eval_subject_t::compare( const cbl_loc_t& loc, 
!                          relop_t op, const cbl_refer_t& object, bool deciding ) {
    auto subject(*pcol);
    if( compatible(object.field) ) {
      if( ! is_conditional(subject.field) ) {
        auto result = deciding? this->result : new_temporary(FldConditional);
!       ast_relop(loc, result, subject, op, object);
        return result;
        }
      }
diff -Nrcpad gcc-17-20260621/gcc/cobol/parse_ante.h gcc-17-20260628/gcc/cobol/parse_ante.h
*** gcc-17-20260621/gcc/cobol/parse_ante.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/parse_ante.h	Sun Jun 28 22:32:06 2026
*************** is_cobol_charset( const char name[] ) {
*** 247,255 ****
  }
  
  bool
! in_procedure_division(void) {
    return current_division == procedure_div_e;
  }
  
  static inline bool
  in_file_section(void) { return current_data_section == file_datasect_e; }
--- 247,259 ----
  }
  
  bool
! in_procedure_division() {
    return current_division == procedure_div_e;
  }
+ bool
+ in_environment_division() {
+   return current_division == environment_div_e;
+ }
  
  static inline bool
  in_file_section(void) { return current_data_section == file_datasect_e; }
*************** struct arith_t {
*** 621,626 ****
--- 625,633 ----
  static cbl_refer_t * ast_op( const cbl_loc_t& loc,
                               cbl_refer_t *lhs, char op, cbl_refer_t *rhs );
  
+ static void ast_relop( const cbl_loc_t& loc, cbl_field_t *tgt,
+                        cbl_refer_t lhs, relop_t relop, cbl_refer_t rhs );
+ 
  static void ast_add( arith_t *arith );
  static bool ast_subtract( arith_t *arith );
  static bool ast_multiply( arith_t *arith );
*************** class eval_subject_t {
*** 691,697 ****
  
    // compare sets result
    cbl_field_t * compare( int token );
!   cbl_field_t * compare( relop_t op,
                           const cbl_refer_t& object, bool deciding = false);
    cbl_field_t * compare( const cbl_refer_t& object,
                           const cbl_refer_t& object2 = nullptr);
--- 698,704 ----
  
    // compare sets result
    cbl_field_t * compare( int token );
!   cbl_field_t * compare( const cbl_loc_t& loc, relop_t op,
                           const cbl_refer_t& object, bool deciding = false);
    cbl_field_t * compare( const cbl_refer_t& object,
                           const cbl_refer_t& object2 = nullptr);
*************** class eval_subject_t {
*** 745,751 ****
      if( pcol == columns.end() ) return false;
      dbgmsg("%s() if not %s goto %s", __func__, result->name, when()->name);
  
!     if( compare(op, object, true) ) {
        if( invert ) {
          parser_logop( result, NULL, not_op, result );
        }
--- 752,758 ----
      if( pcol == columns.end() ) return false;
      dbgmsg("%s() if not %s goto %s", __func__, result->name, when()->name);
  
!     if( compare(cbl_loc_t(), op, object, true) ) {
        if( invert ) {
          parser_logop( result, NULL, not_op, result );
        }
diff -Nrcpad gcc-17-20260621/gcc/cobol/scan.l gcc-17-20260628/gcc/cobol/scan.l
*** gcc-17-20260621/gcc/cobol/scan.l	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/scan.l	Sun Jun 28 22:32:06 2026
*************** LINE_DIRECTIVE ^[#]line{SPC}[[:alnum:]]+
*** 205,211 ****
  
  %option debug noyywrap stack yylineno case-insensitive
  %%
!    /* CDF */
  <bool_state>{
    [''""]/[01]
    [01]+/[''""]		{ if( copy_state == YY_START ) {
--- 205,211 ----
  
  %option debug noyywrap stack yylineno case-insensitive
  %%
!   /* CDF */
  <bool_state>{
    [''""]/[01]
    [01]+/[''""]		{ if( copy_state == YY_START ) {
*************** USE({SPC}FOR)?		{ return USE; }
*** 1376,1381 ****
--- 1376,1399 ----
    [=]{2}                { yy_push_state(quoteq); }
  }
  
+ <date_state>{
+   ^[[:blank:]]+
+   {BLANK_EOL}
+ 
+   DATE                { pop_return DATE; }
+   DAY                 { pop_return DAY; }
+   DATE/[[:blank:]]+Y  {                 return DATE; }
+   DAY/[[:blank:]]+Y   {                 return DAY; }
+   TIME                { pop_return TIME; }
+ 
+   YYYYMMDD            { yy_pop_state();
+                         yylval.string = xstrdup(yytext); return YYYYMMDD; }
+   YYYYDDD             { yy_pop_state();
+                         yylval.string = xstrdup(yytext); return YYYYDDD; }
+   DAY-OF-WEEK         { yy_pop_state();
+                         yylval.string = xstrdup(yytext); return DAY_OF_WEEK; }
+ }
+ 
  <quoteq>{
    [^=]+[=]/[^=]       { tmpstring_append(yyleng); }
    [^=]+/[=]{2}        { yylval.string = xstrdup(tmpstring_append(yyleng));
*************** USE({SPC}FOR)?		{ return USE; }
*** 1419,1424 ****
--- 1437,1738 ----
                          tmpstring = NULL; pop_return LITERAL; }
  }
  
+     /* ISO Reserved Words */
+ <*>{
+   ACCEPT	{ return ACCEPT; }
+   ACCESS	{ return ACCESS; }
+   ADD		{ return ADD; }
+   ADDRESS	{ return ADDRESS; }
+   ADVANCING	{ return ADVANCING; }
+   AFTER		{ return AFTER; }
+   ALL		{ return ALL; }
+   ALLOCATE	{ return ALLOCATE; }
+   ALPHABET	{ return ALPHABET; }
+   ALPHABETIC	{ return ALPHABETIC; }
+   ALPHABETIC-LOWER	{ return ALPHABETIC_LOWER; }
+   ALPHABETIC-UPPER	{ return ALPHABETIC_UPPER; }
+   ALPHANUMERIC		{ return ALPHANUMERIC; }
+   ALPHANUMERIC-EDITED	{ return ALPHANUMERIC_EDITED; }
+   ALSO		{ return ALSO; }
+   ALTERNATE	{ return ALTERNATE; }
+   AND		{ return AND; }
+   ANY		{ return ANY; }
+   ANYCASE	{ return ANYCASE; }
+   ARE		{ return ARE; }
+   AREA		{ return AREA; }
+   AREAS		{ return AREAS; }
+   AS		{ return AS; }
+   ASCENDING	{ return ASCENDING; }
+   ASSIGN		{ return ASSIGN; }
+   AT		{ return AT; }
+   BASED		{ return BASED; }
+   BEFORE	{ return BEFORE; }
+   BINARY	{ return BINARY; }
+   BIT		{ return BIT; }
+   BLANK		{ return BLANK; }
+   BLOCK		{ return BLOCK_kw; }
+   BOTTOM	{ return BOTTOM; }
+   BY		{ return BY; }
+   CALL		{ return CALL; }
+   CANCEL	{ return CANCEL; }
+   CF		{ return CF; }
+   CH		{ return CH; }
+   CHARACTER	{ return CHARACTER; }
+   CHARACTERS	{ return CHARACTERS; }
+   CLASS		{ return CLASS; }
+   CLOSE		{ return CLOSE; }
+   CODE		{ return CODE; }
+   COMMA		{ return COMMA; }
+   COMMIT	{ return COMMIT; }
+   COMMON	{ return COMMON; }
+   COMPUTE	{ return COMPUTE; }
+   CONDITION	{ return CONDITION; }
+   CONSTANT	{ return CONSTANT; }
+   CONTAINS	{ return CONTAINS; }
+   CONTENT	{ return CONTENT; }
+   CONTINUE	{ return CONTINUE; }
+   CONTROL	{ return CONTROL; }
+   CONTROLS	{ return CONTROLS; }
+   CONVERTING	{ return CONVERTING; }
+   COPY		{ return COPY; }
+   COUNT		{ return COUNT; }
+   CURRENCY	{ return CURRENCY; }
+   DATA		{ return DATA; }
+   DATE		{ return DATE; }
+   DAY		{ return DAY; }
+   DAY-OF-WEEK	{ return DAY_OF_WEEK; }
+   DE		{ return DE; }
+   DECIMAL-POINT	{ return DECIMAL_POINT; }
+   DECLARATIVES	{ return DECLARATIVES; }
+   DEFAULT	{ yylval.number = 'D'; return DEFAULT; }
+   DELETE	{ return DELETE; }
+   DELIMITED	{ return DELIMITED; }
+   DELIMITER	{ return DELIMITER; }
+   DEPENDING	{ return DEPENDING; }
+   DESCENDING	{ return DESCENDING; }
+   DETAIL	{ return DETAIL; }
+   DISPLAY	{ return DISPLAY; }
+   DIVIDE	{ return DIVIDE; }
+   DOWN		{ return DOWN; }
+   DUPLICATES	{ return DUPLICATES; }
+   DYNAMIC	{ return DYNAMIC; }
+   EC		{ return EC; }
+   ELSE		{ return ELSE; }
+   END		{ return END; }
+   END-ACCEPT	{ return END_ACCEPT; }
+   END-ADD	{ return END_ADD; }
+   END-CALL	{ return END_CALL; }
+   END-DELETE	{ return END_DELETE; }
+   END-DISPLAY	{ return END_DISPLAY; }
+   END-DIVIDE	{ return END_DIVIDE; }
+   END-EVALUATE	{ return END_EVALUATE; }
+   END-IF	{ return END_IF; }
+   END-MULTIPLY	{ return END_MULTIPLY; }
+   END-PERFORM	{ return END_PERFORM; }
+   END-READ	{ return END_READ; }
+   END-RETURN	{ return END_RETURN; }
+   END-REWRITE	{ return END_REWRITE; }
+   END-SEARCH	{ return END_SEARCH; }
+   END-SUBTRACT	{ return END_SUBTRACT; }
+   END-WRITE	{ return END_WRITE; }
+   ENVIRONMENT	{ return ENVIRONMENT; }
+   EQUAL		{ ydflval.string = yylval.string = xstrdup(yytext);
+ 		  return EQ; }
+   ERROR		{ return ERROR; }
+   EVALUATE	{ return EVALUATE; }
+   /* EXCEPTION	special handling */
+   EXIT		{ return EXIT; }
+   EXTEND	{ return EXTEND; }
+   EXTERNAL	{ return EXTERNAL; }
+ 
+   FD		{ return FD; }
+   FINAL		{ return FINAL; }
+   FINALLY	{ return FINALLY; }
+   FIRST		{ return FIRST; }
+   FOOTING	{ return FOOTING; }
+   FOR		{ return FOR; }
+   FREE		{ return FREE; }
+   FROM		{ return FROM; }
+   /* FUNCTION	special handling */
+   GENERATE	{ return GENERATE; }
+   GIVING	{ return GIVING; }
+   GLOBAL	{ return GLOBAL; }
+   GO		{ return GO; }
+   GOBACK	{ return GOBACK; }
+   GROUP		{ return GROUP; }
+   HEADING	{ return HEADING; }
+   IF		{ return IF; }
+   IN		{ return IN; }
+   INDEX		{ return INDEX; }
+   INDEXED	{ return INDEXED; }
+   INDICATE	{ return INDICATE; }
+   INITIAL	{ return INITIAL_kw; }
+   INITIALIZE	{ return INITIALIZE; }
+   INITIATE	{ return INITIATE; }
+   INPUT		{ return INPUT; }
+   INSPECT	{ return INSPECT; }
+   INTERFACE	{ return INTERFACE; }
+   INTO		{ return INTO; }
+   INVOKE	{ return INVOKE; }
+   IS		{ return IS; }
+   KEY		{ return KEY; }
+   LAST		{ return LAST; }
+   LEADING	{ return LEADING; }
+   LEFT		{ return LEFT; }
+   LENGTH	{ return LENGTH; }
+   LIMIT		{ return LIMIT; }
+   LIMITS	{ return LIMITS; }
+   LINAGE	{ return LINAGE; }
+   LINE		{ return LINE; }
+   LINE-COUNTER	{ return LINE_COUNTER; }
+   LINES		{ return LINES; }
+   LINKAGE	{ return LINKAGE; }
+   LOCAL-STORAGE	{ return LOCAL_STORAGE; }
+   LOCALE	{ return LOCALE; }
+   LOCATION	{ return LOCATION; }
+   LOCK		{ return LOCK; }
+   MERGE		{ return MERGE; }
+   MODE		{ return MODE; }
+   MOVE		{ return MOVE; }
+   MULTIPLY	{ return MULTIPLY; }
+   NATIONAL	{ return NATIONAL; }
+   NATIONAL-EDITED	{ return NATIONAL_EDITED; }
+   NATIVE	{ return NATIVE; }
+   NEGATIVE	{ return NEGATIVE; }
+   NESTED	{ return NESTED; }
+   NEXT		{ return NEXT; }
+   NO		{ return NO; }
+   NOT		{ return NOT; }
+   NUMBER	{ return NUMBER; }
+   NUMERIC	{ return NUMERIC; }
+   NUMERIC-EDITED	{ return NUMERIC_EDITED; }
+   OCCURS	{ return OCCURS; }
+   OF		{ return OF; }
+   OFF		{ return OFF; }
+   OMITTED	{ return OMITTED; }
+   ON		{ return ON; }
+   OPEN		{ return OPEN; }
+   OPTIONAL	{ return OPTIONAL; }
+   OPTIONS	{ return OPTIONS; }
+   OR		{ return OR; }
+   ORDER		{ return ORDER; }
+   ORGANI[SZ]ATION	{ return ORGANIZATION; }
+   OTHER		{ return OTHER; }
+   OUTPUT	{ return OUTPUT; }
+   /* OVERFLOW	special handling */
+   OVERRIDE	{ return OVERRIDE; }
+   PACKED-DECIMAL	{ return PACKED_DECIMAL; }
+   PAGE		{ return PAGE; }
+   PAGE-COUNTER	{ return PAGE_COUNTER; }
+   PERFORM	{ return PERFORM; }
+   PF		{ return PF; }
+   PH		{ return PH; }
+   PIC		{ return PIC; }
+   PICTURE	{ return PICTURE; }
+   PLUS		{ return PLUS; }
+   POINTER	{ return POINTER; }
+   POSITIVE	{ return POSITIVE; }
+   PROCEDURE	{ return PROCEDURE; }
+   PROGRAM	{ return PROGRAM_kw; }
+   PROGRAM-ID	{ return PROGRAM_ID; }
+   PROPERTY	{ return PROPERTY; }
+   PROTOTYPE	{ return PROTOTYPE; }
+   QUOTES	{ return QUOTES; }
+   RAISE		{ return RAISE; }
+   RAISING	{ return RAISING; }
+   /* RANDOM	special handling */
+   RD		{ return RD; }
+   READ		{ return READ; }
+   RECORD	{ return RECORD; }
+   RECORDS	{ return RECORDS; }
+   REDEFINES	{ return REDEFINES; }
+   REEL		{ return REEL; }
+   REFERENCE	{ return REFERENCE; }
+   RELATIVE	{ return RELATIVE; }
+   RELEASE	{ return RELEASE; }
+   REMAINDER	{ return REMAINDER; }
+   REMOVAL	{ return REMOVAL; }
+   RENAMES	{ return RENAMES; }
+   REPLACE	{ return REPLACE; }
+   REPLACING	{ return REPLACING; }
+   REPORT	{ return REPORT; }
+   REPORTING	{ return REPORTING; }
+   REPORTS	{ return REPORTS; }
+   REPOSITORY	{ return REPOSITORY; }
+   RESERVE	{ return RESERVE; }
+   RESET		{ return RESET; }
+   RESUME	{ return RESUME; }
+   RETURN	{ return RETURN; }
+   RETURNING	{ return RETURNING; }
+   REWIND	{ return REWIND; }
+   REWRITE	{ return REWRITE; }
+   RF		{ return RF; }
+   RH		{ return RH; }
+   RIGHT		{ return RIGHT; }
+   ROUNDED	{ return ROUNDED; }
+   RUN		{ return RUN; }
+   SAME		{ return SAME; }
+   SCREEN	{ return SCREEN; }
+   SD		{ return SD; }
+   SEARCH	{ return SEARCH; }
+   SECTION	{ yylval.string = NULL; return SECTION; }
+   SELECT	{ return SELECT; }
+   SENTENCE	{ return SENTENCE; }
+   SEPARATE	{ return SEPARATE; }
+   SEQUENCE	{ return SEQUENCE; }
+   SEQUENTIAL	{ return SEQUENTIAL; }
+   SET		{ return SET; }
+   SHARING	{ return SHARING; }
+   SIGN		{ return SIGN; }
+   SIZE		{ return SIZE; }
+   SORT		{ return SORT; }
+   SORT-MERGE	{ return SORT_MERGE; }
+   SOURCE	{ return SOURCE; }
+   SPACE		{ return SPACE; }
+   SPACES	{ return SPACES; }
+   SPECIAL-NAMES	{ return SPECIAL_NAMES; }
+   STANDARD	{ return STANDARD; }
+   STANDARD-1	{ return STANDARD_1; }
+   START		{ return START; }
+   STATUS	{ return STATUS; }
+   STOP		{ return STOP; }
+   SUBTRACT	{ return SUBTRACT; }
+   SUM		{ return SUM; }
+   SUPPRESS	{ return SUPPRESS; }
+   SYMBOLIC	{ return SYMBOLIC; }
+   TALLYING	{ return TALLYING; }
+   TERMINATE	{ return TERMINATE; }
+   TEST		{ return TEST; }
+   THAN		{ return THAN; }
+   THEN		{ return THEN; }
+   THRU		{ return THRU; }
+   TIME		{ return TIME; }
+   TIMES		{ return TIMES; }
+   TO		{ return TO; }
+   TOP		{ return TOP; }
+   TRAILING	{ return TRAILING; }
+ 
+   TYPE		{ return TYPE; }
+   TYPEDEF	{ return TYPEDEF; }
+   UNIT		{ return UNIT; }
+   UNTIL		{ return UNTIL; }
+   UP		{ return UP; }
+   UPON		{ return UPON; }
+   USAGE		{ return USAGE; }
+   USE		{ return USE; }
+   USING		{ return USING; }
+   VALUE		{ return VALUE; }
+   VARYING	{ return VARYING; }
+   WHEN		{ return WHEN; }
+   WITH		{ return WITH; }
+   WORKING-STORAGE	{ return WORKING_STORAGE; }
+   WRITE		{ return WRITE; }
+ 
+   ZERO	|
+   ZEROES	|
+   ZEROS		{ return ZERO; }
+ }
+ 
  <*>{
    AS		{ return AS; }
    CONSTANT	{ return CONSTANT; }
*************** USE({SPC}FOR)?		{ return USE; }
*** 1490,1513 ****
    [[:blank:]]*[.]+			{ pop_return '.'; }
  }
  
- <date_state>{
-   ^[[:blank:]]+
-   {BLANK_EOL}
- 
-   DATE                { pop_return DATE; }
-   DAY                 { pop_return DAY; }
-   DATE/[[:blank:]]+Y  {                 return DATE; }
-   DAY/[[:blank:]]+Y   {                 return DAY; }
-   TIME                { pop_return TIME; }
- 
-   YYYYMMDD            { yy_pop_state();
-                         yylval.string = xstrdup(yytext); return YYYYMMDD; }
-   YYYYDDD             { yy_pop_state();
-                         yylval.string = xstrdup(yytext); return YYYYDDD; }
-   DAY-OF-WEEK         { yy_pop_state();
-                         yylval.string = xstrdup(yytext); return DAY_OF_WEEK; }
- }
- 
  <INITIAL,procedure_div,copy_state>{
    NOT{SPC}B/{boolseq}	{ is_not = true;  yy_push_state(bool_state); }
      B/{boolseq}			{ is_not = false; yy_push_state(bool_state); }
--- 1804,1809 ----
*************** USE({SPC}FOR)?		{ return USE; }
*** 1557,1564 ****
                                   *p = '\0';
                                   myless(p - s);
                                 }
!                                numstr_of(s); free(s);
!                                pop_return NUMSTR;
  			     }
  }
  
--- 1853,1861 ----
                                   *p = '\0';
                                   myless(p - s);
                                 }
!                                int token = numstr_of(s);
! 			       free(s);
!                                pop_return token;
  			     }
  }
  
*************** USE({SPC}FOR)?		{ return USE; }
*** 1991,1999 ****
  [*]CBL		{ return STAR_CBL; }
  [*]CONTROL	{ return STAR_CBL; }
  
! ^[ ]*[*](PROCESS\b|CBL\b).*$ {
! 		  auto p = std::find(yytext, yytext + yyleng, '*');
! 		  not_implemented("CDF '%s' was ignored", p);
  		}
  ^[ ]*[@]OPTIONS.+$ {
  		  auto p = std::find(yytext, yytext + yyleng, '@');
--- 2288,2300 ----
  [*]CBL		{ return STAR_CBL; }
  [*]CONTROL	{ return STAR_CBL; }
  
! (PROCESS|CBL)({BLANK}.*)?/{EOL} {
! 		  yylval.string = xstrdup(yytext);
!                   for(char *p = yylval.string + strlen(yylval.string) - 1;
!                       *p == 0x20; p-- ) {
!                       *p = '\0';
!                   }
! 		  return PROCESS;
  		}
  ^[ ]*[@]OPTIONS.+$ {
  		  auto p = std::find(yytext, yytext + yyleng, '@');
*************** BASIS		{ yy_push_state(basis); return BA
*** 2211,2510 ****
  }
  
  <*>{
-   ACCEPT	{ return ACCEPT; }
-   ACCESS	{ return ACCESS; }
-   ADD		{ return ADD; }
-   ADDRESS	{ return ADDRESS; }
-   ADVANCING	{ return ADVANCING; }
-   AFTER		{ return AFTER; }
-   ALL		{ return ALL; }
-   ALLOCATE	{ return ALLOCATE; }
-   ALPHABET	{ return ALPHABET; }
-   ALPHABETIC	{ return ALPHABETIC; }
-   ALPHABETIC-LOWER	{ return ALPHABETIC_LOWER; }
-   ALPHABETIC-UPPER	{ return ALPHABETIC_UPPER; }
-   ALPHANUMERIC		{ return ALPHANUMERIC; }
-   ALPHANUMERIC-EDITED	{ return ALPHANUMERIC_EDITED; }
-   ALSO		{ return ALSO; }
-   ALTERNATE	{ return ALTERNATE; }
-   AND		{ return AND; }
-   ANY		{ return ANY; }
-   ANYCASE	{ return ANYCASE; }
-   ARE		{ return ARE; }
-   AREA		{ return AREA; }
-   AREAS		{ return AREAS; }
-   AS		{ return AS; }
-   ASCENDING	{ return ASCENDING; }
-   ASSIGN		{ return ASSIGN; }
-   AT		{ return AT; }
-   BASED		{ return BASED; }
-   BEFORE	{ return BEFORE; }
-   BINARY	{ return BINARY; }
-   BIT		{ return BIT; }
-   BLANK		{ return BLANK; }
-   BLOCK		{ return BLOCK_kw; }
-   BOTTOM	{ return BOTTOM; }
-   BY		{ return BY; }
-   CALL		{ return CALL; }
-   CANCEL	{ return CANCEL; }
-   CF		{ return CF; }
-   CH		{ return CH; }
-   CHARACTER	{ return CHARACTER; }
-   CHARACTERS	{ return CHARACTERS; }
-   CLASS		{ return CLASS; }
-   CLOSE		{ return CLOSE; }
-   CODE		{ return CODE; }
-   COMMA		{ return COMMA; }
-   COMMIT	{ return COMMIT; }
-   COMMON	{ return COMMON; }
-   CONDITION	{ return CONDITION; }
-   CONSTANT	{ return CONSTANT; }
-   CONTAINS	{ return CONTAINS; }
-   CONTENT	{ return CONTENT; }
-   CONTINUE	{ return CONTINUE; }
-   CONTROL	{ return CONTROL; }
-   CONTROLS	{ return CONTROLS; }
-   CONVERTING	{ return CONVERTING; }
-   COPY		{ return COPY; }
-   COUNT		{ return COUNT; }
-   CURRENCY	{ return CURRENCY; }
-   DATA		{ return DATA; }
-   DATE		{ return DATE; }
-   DAY		{ return DAY; }
-   DAY-OF-WEEK	{ return DAY_OF_WEEK; }
-   DE		{ return DE; }
-   DECIMAL-POINT	{ return DECIMAL_POINT; }
-   DECLARATIVES	{ return DECLARATIVES; }
-   DEFAULT	{ yylval.number = 'D'; return DEFAULT; }
-   DELETE	{ return DELETE; }
-   DELIMITED	{ return DELIMITED; }
-   DELIMITER	{ return DELIMITER; }
-   DEPENDING	{ return DEPENDING; }
-   DESCENDING	{ return DESCENDING; }
-   DETAIL	{ return DETAIL; }
-   DISPLAY	{ return DISPLAY; }
-   DIVIDE	{ return DIVIDE; }
-   DOWN		{ return DOWN; }
-   DUPLICATES	{ return DUPLICATES; }
-   DYNAMIC	{ return DYNAMIC; }
-   EC		{ return EC; }
-   ELSE		{ return ELSE; }
-   END		{ return END; }
-   END-ACCEPT	{ return END_ACCEPT; }
-   END-ADD	{ return END_ADD; }
-   END-CALL	{ return END_CALL; }
-   END-DELETE	{ return END_DELETE; }
-   END-DISPLAY	{ return END_DISPLAY; }
-   END-DIVIDE	{ return END_DIVIDE; }
-   END-EVALUATE	{ return END_EVALUATE; }
-   END-IF	{ return END_IF; }
-   END-MULTIPLY	{ return END_MULTIPLY; }
-   END-PERFORM	{ return END_PERFORM; }
-   END-READ	{ return END_READ; }
-   END-RETURN	{ return END_RETURN; }
-   END-REWRITE	{ return END_REWRITE; }
-   END-SEARCH	{ return END_SEARCH; }
-   END-SUBTRACT	{ return END_SUBTRACT; }
-   END-WRITE	{ return END_WRITE; }
-   ENVIRONMENT	{ return ENVIRONMENT; }
-   EQUAL		{ ydflval.string = yylval.string = xstrdup(yytext);
- 		  return EQ; }
-   ERROR		{ return ERROR; }
-   EVALUATE	{ return EVALUATE; }
-   EXCEPTION	{ return EXCEPTION; }
-   EXIT		{ return EXIT; }
-   EXTEND	{ return EXTEND; }
-   EXTERNAL	{ return EXTERNAL; }
- 
-   FD		{ return FD; }
-   FINAL		{ return FINAL; }
-   FINALLY	{ return FINALLY; }
-   FIRST		{ return FIRST; }
-   FOOTING	{ return FOOTING; }
-   FOR		{ return FOR; }
-   FREE		{ return FREE; }
-   FROM		{ return FROM; }
-   FUNCTION	{ return FUNCTION; }
-   GENERATE	{ return GENERATE; }
-   GIVING	{ return GIVING; }
-   GLOBAL	{ return GLOBAL; }
-   GO		{ return GO; }
-   GOBACK	{ return GOBACK; }
-   GROUP		{ return GROUP; }
-   HEADING	{ return HEADING; }
-   IF		{ return IF; }
-   IN		{ return IN; }
-   INDEX		{ return INDEX; }
-   INDEXED	{ return INDEXED; }
-   INDICATE	{ return INDICATE; }
-   INITIAL	{ return INITIAL; }
-   INITIALIZE	{ return INITIALIZE; }
-   INITIATE	{ return INITIATE; }
-   INPUT		{ return INPUT; }
-   INSPECT	{ return INSPECT; }
-   INTERFACE	{ return INTERFACE; }
-   INTO		{ return INTO; }
-   INVOKE	{ return INVOKE; }
-   IS		{ return IS; }
-   KEY		{ return KEY; }
-   LAST		{ return LAST; }
-   LEADING	{ return LEADING; }
-   LEFT		{ return LEFT; }
-   LENGTH	{ return LENGTH; }
-   LIMIT		{ return LIMIT; }
-   LIMITS	{ return LIMITS; }
-   LINAGE	{ return LINAGE; }
-   LINE		{ return LINE; }
-   LINE-COUNTER	{ return LINE_COUNTER; }
-   LINES		{ return LINES; }
-   LINKAGE	{ return LINKAGE; }
-   LOCAL-STORAGE	{ return LOCAL_STORAGE; }
-   LOCALE	{ return LOCALE; }
-   LOCATION	{ return LOCATION; }
-   LOCK		{ return LOCK; }
-   MERGE		{ return MERGE; }
-   MODE		{ return MODE; }
-   MOVE		{ return MOVE; }
-   MULTIPLY	{ return MULTIPLY; }
-   NATIONAL	{ return NATIONAL; }
-   NATIONAL-EDITED	{ return NATIONAL_EDITED; }
-   NATIVE	{ return NATIVE; }
-   NEGATIVE	{ return NEGATIVE; }
-   NESTED	{ return NESTED; }
-   NEXT		{ return NEXT; }
-   NO		{ return NO; }
-   NOT		{ return NOT; }
-   NUMBER	{ return NUMBER; }
-   NUMERIC	{ return NUMERIC; }
-   NUMERIC-EDITED	{ return NUMERIC_EDITED; }
-   OCCURS	{ return OCCURS; }
-   OF		{ return OF; }
-   OFF		{ return OFF; }
-   OMITTED	{ return OMITTED; }
-   ON		{ return ON; }
-   OPEN		{ return OPEN; }
-   OPTIONAL	{ return OPTIONAL; }
-   OPTIONS	{ return OPTIONS; }
-   OR		{ return OR; }
-   ORDER		{ return ORDER; }
-   ORGANI[SZ]ATION	{ return ORGANIZATION; }
-   OTHER		{ return OTHER; }
-   OUTPUT	{ return OUTPUT; }
-   OVERFLOW	{ return OVERFLOW_kw; }
-   OVERRIDE	{ return OVERRIDE; }
-   PACKED-DECIMAL	{ return PACKED_DECIMAL; }
-   PAGE		{ return PAGE; }
-   PAGE-COUNTER	{ return PAGE_COUNTER; }
-   PERFORM	{ return PERFORM; }
-   PF		{ return PF; }
-   PH		{ return PH; }
-   PIC		{ return PIC; }
-   PICTURE	{ return PICTURE; }
-   PLUS		{ return PLUS; }
-   POINTER	{ return POINTER; }
-   POSITIVE	{ return POSITIVE; }
-   PROCEDURE	{ return PROCEDURE; }
-   PROGRAM	{ return PROGRAM_kw; }
-   PROGRAM-ID	{ return PROGRAM_ID; }
-   PROPERTY	{ return PROPERTY; }
-   PROTOTYPE	{ return PROTOTYPE; }
-   QUOTES	{ return QUOTES; }
-   RAISE		{ return RAISE; }
-   RAISING	{ return RAISING; }
-   RANDOM	{ return RANDOM; }
-   RD		{ return RD; }
-   READ		{ return READ; }
-   RECORD	{ return RECORD; }
-   RECORDS	{ return RECORDS; }
-   REDEFINES	{ return REDEFINES; }
-   REEL		{ return REEL; }
-   REFERENCE	{ return REFERENCE; }
-   RELATIVE	{ return RELATIVE; }
-   RELEASE	{ return RELEASE; }
-   REMAINDER	{ return REMAINDER; }
-   REMOVAL	{ return REMOVAL; }
-   RENAMES	{ return RENAMES; }
-   REPLACE	{ return REPLACE; }
-   REPLACING	{ return REPLACING; }
-   REPORT	{ return REPORT; }
-   REPORTING	{ return REPORTING; }
-   REPORTS	{ return REPORTS; }
-   REPOSITORY	{ return REPOSITORY; }
-   RESERVE	{ return RESERVE; }
-   RESET		{ return RESET; }
-   RESUME	{ return RESUME; }
-   RETURN	{ return RETURN; }
-   RETURNING	{ return RETURNING; }
-   REWIND	{ return REWIND; }
-   REWRITE	{ return REWRITE; }
-   RF		{ return RF; }
-   RH		{ return RH; }
-   RIGHT		{ return RIGHT; }
-   ROUNDED	{ return ROUNDED; }
-   RUN		{ return RUN; }
-   SAME		{ return SAME; }
-   SCREEN	{ return SCREEN; }
-   SD		{ return SD; }
-   SEARCH	{ return SEARCH; }
-   SECTION	{ yylval.string = NULL; return SECTION; }
-   SELECT	{ return SELECT; }
-   SENTENCE	{ return SENTENCE; }
-   SEPARATE	{ return SEPARATE; }
-   SEQUENCE	{ return SEQUENCE; }
-   SEQUENTIAL	{ return SEQUENTIAL; }
-   SET		{ return SET; }
-   SHARING	{ return SHARING; }
-   SIGN		{ return SIGN; }
-   SIZE		{ return SIZE; }
-   SORT		{ return SORT; }
-   SORT-MERGE	{ return SORT_MERGE; }
-   SOURCE	{ return SOURCE; }
-   SPACE		{ return SPACE; }
-   SPACES	{ return SPACES; }
-   SPECIAL-NAMES	{ return SPECIAL_NAMES; }
-   STANDARD	{ return STANDARD; }
-   STANDARD-1	{ return STANDARD_1; }
-   START		{ return START; }
-   STATUS	{ return STATUS; }
-   STOP		{ return STOP; }
-   SUBTRACT	{ return SUBTRACT; }
-   SUM		{ return SUM; }
-   SUPPRESS	{ return SUPPRESS; }
-   SYMBOLIC	{ return SYMBOLIC; }
-   TALLYING	{ return TALLYING; }
-   TERMINATE	{ return TERMINATE; }
-   TEST		{ return TEST; }
-   THAN		{ return THAN; }
-   THEN		{ return THEN; }
-   THRU		{ return THRU; }
-   TIME		{ return TIME; }
-   TIMES		{ return TIMES; }
-   TO		{ return TO; }
-   TOP		{ return TOP; }
-   TRAILING	{ return TRAILING; }
- 
-   TYPE		{ return TYPE; }
-   TYPEDEF	{ return TYPEDEF; }
-   UNIT		{ return UNIT; }
-   UNTIL		{ return UNTIL; }
-   UP		{ return UP; }
-   UPON		{ return UPON; }
-   USAGE		{ return USAGE; }
-   USE		{ return USE; }
-   USING		{ return USING; }
-   VALUE		{ return VALUE; }
-   VARYING	{ return VARYING; }
-   WHEN		{ return WHEN; }
-   WITH		{ return WITH; }
-   WORKING-STORAGE	{ return WORKING_STORAGE; }
-   WRITE		{ return WRITE; }
- 
-   ZERO	|
-   ZEROES	|
-   ZEROS		{ return ZERO; }
- }
- 
- <*>{
    %EBCDIC-MODE		{ ydflval.number = feature_internal_ebcdic_e;
  			  return FEATURE; }
    %64-BIT-POINTER	{ ydflval.number = feature_embiggen_e;
--- 2512,2517 ----
diff -Nrcpad gcc-17-20260621/gcc/cobol/scan_ante.h gcc-17-20260628/gcc/cobol/scan_ante.h
*** gcc-17-20260621/gcc/cobol/scan_ante.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/scan_ante.h	Sun Jun 28 22:32:06 2026
*************** symbol_function_token( const char name[]
*** 1106,1112 ****
    return 0;
  }
  
! bool in_procedure_division(void );
  
  static symbol_elem_t *
  symbol_exists( const char name[] ) {
--- 1106,1113 ----
    return 0;
  }
  
! bool in_procedure_division(void);
! bool in_environment_division(void );
  
  static symbol_elem_t *
  symbol_exists( const char name[] ) {
*************** typed_name( const char name[] ) {
*** 1175,1180 ****
--- 1176,1189 ----
    struct symbol_elem_t *e = symbol_special( PROGRAM, name );
    if( e ) return  cbl_special_name_of(e)->token;
  
+   // If we're in the configuration section, Data Division is still empty.
+   // Give priority to intrinsic functions names.
+   if( in_environment_division() ) {
+     token = keyword_tok(yytext, true);
+     auto name = intrinsic_function_name(token);
+     if( name ) return token;
+   }
+ 
    if( (token = redefined_token(name)) ) { return token; }
  
    e = symbol_exists( name );
diff -Nrcpad gcc-17-20260621/gcc/cobol/scan_post.h gcc-17-20260628/gcc/cobol/scan_post.h
*** gcc-17-20260621/gcc/cobol/scan_post.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/scan_post.h	Sun Jun 28 22:32:06 2026
*************** static int next_token() {
*** 322,329 ****
    return token;
  }
  
- bool in_procedure_division(void);
- 
  // act on CDF tokens
  int
  prelex() {
--- 322,327 ----
diff -Nrcpad gcc-17-20260621/gcc/cobol/token_names.h gcc-17-20260628/gcc/cobol/token_names.h
*** gcc-17-20260621/gcc/cobol/token_names.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cobol/token_names.h	Sun Jun 28 22:32:06 2026
*************** tokens = {
*** 57,469 ****
  	{ "backward", BACKWARD }, // 311
  	{ "positive", POSITIVE }, // 312
  	{ "pointer", POINTER }, // 313
! 	{ "section", SECTION }, // 314
! 	{ "standard-alphabet", STANDARD_ALPHABET }, // 315
! 	{ "switch", SWITCH }, // 316
! 	{ "upsi", UPSI }, // 317
! 	{ "zero", ZERO }, // 318
! 	{ "zeros", ZERO }, // 318
! 	{ "zeroes", ZERO }, // 318
! 	{ "sysin", SYSIN }, // 319
! 	{ "sysipt", SYSIPT }, // 320
! 	{ "sysout", SYSOUT }, // 321
! 	{ "syslist", SYSLIST }, // 322
! 	{ "syslst", SYSLST }, // 323
! 	{ "syspunch", SYSPUNCH }, // 324
! 	{ "syspch", SYSPCH }, // 325
! 	{ "console", CONSOLE }, // 326
! 	{ "c01", C01 }, // 327
! 	{ "c02", C02 }, // 328
! 	{ "c03", C03 }, // 329
! 	{ "c04", C04 }, // 330
! 	{ "c05", C05 }, // 331
! 	{ "c06", C06 }, // 332
! 	{ "c07", C07 }, // 333
! 	{ "c08", C08 }, // 334
! 	{ "c09", C09 }, // 335
! 	{ "c10", C10 }, // 336
! 	{ "c11", C11 }, // 337
! 	{ "c12", C12 }, // 338
! 	{ "csp", CSP }, // 339
! 	{ "s01", S01 }, // 340
! 	{ "s02", S02 }, // 341
! 	{ "s03", S03 }, // 342
! 	{ "s04", S04 }, // 343
! 	{ "s05", S05 }, // 344
! 	{ "afp-5a", AFP_5A }, // 345
! 	{ "stdin", STDIN }, // 346
! 	{ "stdout", STDOUT }, // 347
! 	{ "stderr", STDERR }, // 348
! 	{ "list", LIST }, // 349
! 	{ "map", MAP }, // 350
! 	{ "nolist", NOLIST }, // 351
! 	{ "nomap", NOMAP }, // 352
! 	{ "nosource", NOSOURCE }, // 353
! 	{ "might-be", MIGHT_BE }, // 354
! 	{ "function-udf", FUNCTION_UDF }, // 355
! 	{ "function-udf-0", FUNCTION_UDF_0 }, // 356
! 	{ "default", DEFAULT }, // 357
! 	{ "date-fmt", DATE_FMT }, // 358
! 	{ "time-fmt", TIME_FMT }, // 359
! 	{ "datetime-fmt", DATETIME_FMT }, // 360
! 	{ "basis", BASIS }, // 361
! 	{ "cbl", CBL }, // 362
! 	{ "constant", CONSTANT }, // 363
! 	{ "copy", COPY }, // 364
! 	{ "defined", DEFINED }, // 365
! 	{ "enter", ENTER }, // 366
! 	{ "feature", FEATURE }, // 367
! 	{ "insertt", INSERTT }, // 368
! 	{ "lsub", LSUB }, // 369
! 	{ "parameter", PARAMETER_kw }, // 370
! 	{ "override", OVERRIDE }, // 371
! 	{ "ready", READY }, // 372
! 	{ "reset", RESET }, // 373
! 	{ "rsub", RSUB }, // 374
! 	{ "service-reload", SERVICE_RELOAD }, // 375
! 	{ "star-cbl", STAR_CBL }, // 376
! 	{ "subscript", SUBSCRIPT }, // 377
! 	{ "suppress", SUPPRESS }, // 378
! 	{ "title", TITLE }, // 379
! 	{ "trace", TRACE }, // 380
! 	{ "use", USE }, // 381
! 	{ "cobol-words", COBOL_WORDS }, // 382
! 	{ "equate", EQUATE }, // 383
! 	{ "undefine", UNDEFINE }, // 384
! 	{ "cdf-define", CDF_DEFINE }, // 385
! 	{ "cdf-display", CDF_DISPLAY }, // 386
! 	{ "cdf-if", CDF_IF }, // 387
! 	{ "cdf-else", CDF_ELSE }, // 388
! 	{ "cdf-end-if", CDF_END_IF }, // 389
! 	{ "cdf-evaluate", CDF_EVALUATE }, // 390
! 	{ "cdf-when", CDF_WHEN }, // 391
! 	{ "cdf-end-evaluate", CDF_END_EVALUATE }, // 392
! 	{ "call-convention", CALL_CONVENTION }, // 393
! 	{ "call-cobol", CALL_COBOL }, // 394
! 	{ "call-verbatim", CALL_VERBATIM }, // 395
! 	{ "cdf-push", CDF_PUSH }, // 396
! 	{ "cdf-pop", CDF_POP }, // 397
! 	{ "source-format", SOURCE_FORMAT }, // 398
! 	{ "if", IF }, // 399
! 	{ "then", THEN }, // 400
! 	{ "else", ELSE }, // 401
! 	{ "sentence", SENTENCE }, // 402
! 	{ "accept", ACCEPT }, // 403
! 	{ "add", ADD }, // 404
! 	{ "alter", ALTER }, // 405
! 	{ "call", CALL }, // 406
! 	{ "cancel", CANCEL }, // 407
! 	{ "close", CLOSE }, // 408
! 	{ "compute", COMPUTE }, // 409
! 	{ "continue", CONTINUE }, // 410
! 	{ "delete", DELETE }, // 411
! 	{ "display", DISPLAY }, // 412
! 	{ "divide", DIVIDE }, // 413
! 	{ "evaluate", EVALUATE }, // 414
! 	{ "exit", EXIT }, // 415
! 	{ "filler", FILLER_kw }, // 416
! 	{ "goback", GOBACK }, // 417
! 	{ "goto", GOTO }, // 418
! 	{ "initialize", INITIALIZE }, // 419
! 	{ "inspect", INSPECT }, // 420
! 	{ "merge", MERGE }, // 421
! 	{ "move", MOVE }, // 422
! 	{ "multiply", MULTIPLY }, // 423
! 	{ "open", OPEN }, // 424
! 	{ "paragraph", PARAGRAPH }, // 425
! 	{ "read", READ }, // 426
! 	{ "release", RELEASE }, // 427
! 	{ "return", RETURN }, // 428
! 	{ "rewrite", REWRITE }, // 429
! 	{ "search", SEARCH }, // 430
! 	{ "set", SET }, // 431
! 	{ "select", SELECT }, // 432
! 	{ "sort", SORT }, // 433
! 	{ "sort-merge", SORT_MERGE }, // 434
! 	{ "string", STRING_kw }, // 435
! 	{ "stop", STOP }, // 436
! 	{ "subtract", SUBTRACT }, // 437
! 	{ "start", START }, // 438
! 	{ "unstring", UNSTRING }, // 439
! 	{ "write", WRITE }, // 440
! 	{ "when", WHEN }, // 441
! 	{ "argument-number", ARGUMENT_NUMBER }, // 442
! 	{ "argument-value", ARGUMENT_VALUE }, // 443
! 	{ "environment-name", ENVIRONMENT_NAME }, // 444
! 	{ "environment-value", ENVIRONMENT_VALUE }, // 445
! 	{ "abs", ABS }, // 446
! 	{ "access", ACCESS }, // 447
! 	{ "acos", ACOS }, // 448
! 	{ "actual", ACTUAL }, // 449
! 	{ "advancing", ADVANCING }, // 450
! 	{ "after", AFTER }, // 451
! 	{ "all", ALL }, // 452
! 	{ "allocate", ALLOCATE }, // 453
! 	{ "alphabet", ALPHABET }, // 454
! 	{ "alphabetic", ALPHABETIC }, // 455
! 	{ "alphabetic-lower", ALPHABETIC_LOWER }, // 456
! 	{ "alphabetic-upper", ALPHABETIC_UPPER }, // 457
! 	{ "alphanumeric", ALPHANUMERIC }, // 458
! 	{ "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 459
! 	{ "also", ALSO }, // 460
! 	{ "alternate", ALTERNATE }, // 461
! 	{ "annuity", ANNUITY }, // 462
! 	{ "anum", ANUM }, // 463
! 	{ "any", ANY }, // 464
! 	{ "anycase", ANYCASE }, // 465
! 	{ "apply", APPLY }, // 466
! 	{ "are", ARE }, // 467
! 	{ "area", AREA }, // 468
! 	{ "areas", AREAS }, // 469
! 	{ "as", AS }, // 470
! 	{ "ascending", ASCENDING }, // 471
! 	{ "activating", ACTIVATING }, // 472
! 	{ "asin", ASIN }, // 473
! 	{ "assign", ASSIGN }, // 474
! 	{ "at", AT }, // 475
! 	{ "atan", ATAN }, // 476
! 	{ "based", BASED }, // 477
! 	{ "baseconvert", BASECONVERT }, // 478
! 	{ "before", BEFORE }, // 479
! 	{ "binary", BINARY }, // 480
! 	{ "bit", BIT }, // 481
! 	{ "bit-of", BIT_OF }, // 482
! 	{ "bit-to-char", BIT_TO_CHAR }, // 483
! 	{ "blank", BLANK }, // 484
! 	{ "block", BLOCK_kw }, // 485
! 	{ "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 486
! 	{ "bottom", BOTTOM }, // 487
! 	{ "by", BY }, // 488
! 	{ "byte", BYTE }, // 489
! 	{ "byte-length", BYTE_LENGTH }, // 490
! 	{ "cf", CF }, // 491
! 	{ "ch", CH }, // 492
! 	{ "changed", CHANGED }, // 493
! 	{ "char", CHAR }, // 494
! 	{ "char-national", CHAR_NATIONAL }, // 495
! 	{ "character", CHARACTER }, // 496
! 	{ "characters", CHARACTERS }, // 497
! 	{ "checking", CHECKING }, // 498
! 	{ "class", CLASS }, // 499
! 	{ "cobol", COBOL }, // 500
! 	{ "code", CODE }, // 501
! 	{ "code-set", CODESET }, // 502
! 	{ "collating", COLLATING }, // 503
! 	{ "column", COLUMN }, // 504
! 	{ "combined-datetime", COMBINED_DATETIME }, // 505
! 	{ "comma", COMMA }, // 506
! 	{ "command-line", COMMAND_LINE }, // 507
! 	{ "command-line-count", COMMAND_LINE_COUNT }, // 508
! 	{ "commit", COMMIT }, // 509
! 	{ "common", COMMON }, // 510
! 	{ "concat", CONCAT }, // 511
! 	{ "condition", CONDITION }, // 512
! 	{ "configuration", CONFIGURATION_SECT }, // 513
! 	{ "contains", CONTAINS }, // 514
! 	{ "content", CONTENT }, // 515
! 	{ "control", CONTROL }, // 516
! 	{ "controls", CONTROLS }, // 517
! 	{ "convert", CONVERT }, // 518
! 	{ "converting", CONVERTING }, // 519
! 	{ "corresponding", CORRESPONDING }, // 520
! 	{ "cos", COS }, // 521
! 	{ "count", COUNT }, // 522
! 	{ "currency", CURRENCY }, // 523
! 	{ "current", CURRENT }, // 524
! 	{ "current-date", CURRENT_DATE }, // 525
! 	{ "data", DATA }, // 526
! 	{ "date", DATE }, // 527
! 	{ "date-compiled", DATE_COMPILED }, // 528
! 	{ "date-of-integer", DATE_OF_INTEGER }, // 529
! 	{ "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 530
! 	{ "date-written", DATE_WRITTEN }, // 531
! 	{ "day", DAY }, // 532
! 	{ "day-of-integer", DAY_OF_INTEGER }, // 533
! 	{ "day-of-week", DAY_OF_WEEK }, // 534
! 	{ "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 535
! 	{ "dbcs", DBCS }, // 536
! 	{ "de", DE }, // 537
! 	{ "debugging", DEBUGGING }, // 538
! 	{ "decimal-point", DECIMAL_POINT }, // 539
! 	{ "declaratives", DECLARATIVES }, // 540
! 	{ "delimited", DELIMITED }, // 541
! 	{ "delimiter", DELIMITER }, // 542
! 	{ "depending", DEPENDING }, // 543
! 	{ "descending", DESCENDING }, // 544
! 	{ "detail", DETAIL }, // 545
! 	{ "direct", DIRECT }, // 546
! 	{ "direct-access", DIRECT_ACCESS }, // 547
! 	{ "down", DOWN }, // 548
! 	{ "duplicates", DUPLICATES }, // 549
! 	{ "dynamic", DYNAMIC }, // 550
! 	{ "e", E }, // 551
! 	{ "ebcdic", EBCDIC }, // 552
! 	{ "ec", EC }, // 553
! 	{ "egcs", EGCS }, // 554
! 	{ "encoding", ENCODING }, // 555
! 	{ "entry", ENTRY }, // 556
! 	{ "environment", ENVIRONMENT }, // 557
! 	{ "every", EVERY }, // 558
! 	{ "examine", EXAMINE }, // 559
! 	{ "exhibit", EXHIBIT }, // 560
! 	{ "exp", EXP }, // 561
! 	{ "exp10", EXP10 }, // 562
! 	{ "extend", EXTEND }, // 563
! 	{ "external", EXTERNAL }, // 564
! 	{ "exception-file", EXCEPTION_FILE }, // 565
! 	{ "exception-file-n", EXCEPTION_FILE_N }, // 566
! 	{ "exception-location", EXCEPTION_LOCATION }, // 567
! 	{ "exception-location-n", EXCEPTION_LOCATION_N }, // 568
! 	{ "exception-statement", EXCEPTION_STATEMENT }, // 569
! 	{ "exception-status", EXCEPTION_STATUS }, // 570
! 	{ "factorial", FACTORIAL }, // 571
! 	{ "false", FALSE_kw }, // 572
! 	{ "fd", FD }, // 573
! 	{ "file-control", FILE_CONTROL }, // 574
! 	{ "file", FILE_KW }, // 575
! 	{ "file-limit", FILE_LIMIT }, // 576
! 	{ "final", FINAL }, // 577
! 	{ "finally", FINALLY }, // 578
! 	{ "find-string", FIND_STRING }, // 579
! 	{ "first", FIRST }, // 580
! 	{ "fixed", FIXED }, // 581
! 	{ "footing", FOOTING }, // 582
! 	{ "for", FOR }, // 583
! 	{ "formatted-current-date", FORMATTED_CURRENT_DATE }, // 584
! 	{ "formatted-date", FORMATTED_DATE }, // 585
! 	{ "formatted-datetime", FORMATTED_DATETIME }, // 586
! 	{ "formatted-time", FORMATTED_TIME }, // 587
! 	{ "form-overflow", FORM_OVERFLOW }, // 588
! 	{ "free", FREE }, // 589
! 	{ "fraction-part", FRACTION_PART }, // 590
! 	{ "from", FROM }, // 591
! 	{ "function", FUNCTION }, // 592
! 	{ "generate", GENERATE }, // 593
! 	{ "giving", GIVING }, // 594
! 	{ "global", GLOBAL }, // 595
! 	{ "go", GO }, // 596
! 	{ "group", GROUP }, // 597
! 	{ "heading", HEADING }, // 598
! 	{ "hex", HEX }, // 599
! 	{ "hex-of", HEX_OF }, // 600
! 	{ "hex-to-char", HEX_TO_CHAR }, // 601
! 	{ "high-values", HIGH_VALUES }, // 602
! 	{ "highest-algebraic", HIGHEST_ALGEBRAIC }, // 603
! 	{ "hold", HOLD }, // 604
! 	{ "ibm-360", IBM_360 }, // 605
! 	{ "in", IN }, // 606
! 	{ "include", INCLUDE }, // 607
! 	{ "index", INDEX }, // 608
! 	{ "indexed", INDEXED }, // 609
! 	{ "indicate", INDICATE }, // 610
! 	{ "initial", INITIAL_kw }, // 611
! 	{ "initiate", INITIATE }, // 612
! 	{ "input", INPUT }, // 613
! 	{ "installation", INSTALLATION }, // 614
! 	{ "interface", INTERFACE }, // 615
! 	{ "integer", INTEGER }, // 616
! 	{ "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 617
! 	{ "integer-of-date", INTEGER_OF_DATE }, // 618
! 	{ "integer-of-day", INTEGER_OF_DAY }, // 619
! 	{ "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 620
! 	{ "integer-part", INTEGER_PART }, // 621
! 	{ "into", INTO }, // 622
! 	{ "intrinsic", INTRINSIC }, // 623
! 	{ "invoke", INVOKE }, // 624
! 	{ "i-o", IO }, // 625
! 	{ "i-o-control", IO_CONTROL }, // 626
! 	{ "is", IS }, // 627
! 	{ "isnt", ISNT }, // 628
! 	{ "kanji", KANJI }, // 629
! 	{ "key", KEY }, // 630
! 	{ "label", LABEL }, // 631
! 	{ "last", LAST }, // 632
! 	{ "leading", LEADING }, // 633
! 	{ "left", LEFT }, // 634
! 	{ "length", LENGTH }, // 635
! 	{ "length-of", LENGTH_OF }, // 636
! 	{ "limit", LIMIT }, // 637
! 	{ "limits", LIMITS }, // 638
! 	{ "line", LINE }, // 639
! 	{ "lines", LINES }, // 640
! 	{ "line-counter", LINE_COUNTER }, // 641
! 	{ "linage", LINAGE }, // 642
! 	{ "linkage", LINKAGE }, // 643
! 	{ "locale", LOCALE }, // 644
! 	{ "locale-compare", LOCALE_COMPARE }, // 645
! 	{ "locale-date", LOCALE_DATE }, // 646
! 	{ "locale-time", LOCALE_TIME }, // 647
! 	{ "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 648
! 	{ "local-storage", LOCAL_STORAGE }, // 649
! 	{ "location", LOCATION }, // 650
! 	{ "lock", LOCK }, // 651
! 	{ "lock-on", LOCK_ON }, // 652
! 	{ "log", LOG }, // 653
! 	{ "log10", LOG10 }, // 654
! 	{ "lower-case", LOWER_CASE }, // 655
! 	{ "low-values", LOW_VALUES }, // 656
! 	{ "lowest-algebraic", LOWEST_ALGEBRAIC }, // 657
! 	{ "lparen", LPAREN }, // 658
! 	{ "manual", MANUAL }, // 659
! 	{ "maxx", MAXX }, // 660
! 	{ "mean", MEAN }, // 661
! 	{ "median", MEDIAN }, // 662
! 	{ "midrange", MIDRANGE }, // 663
! 	{ "minn", MINN }, // 664
! 	{ "multiple", MULTIPLE }, // 665
! 	{ "mod", MOD }, // 666
! 	{ "mode", MODE }, // 667
! 	{ "module-name", MODULE_NAME }, // 668
! 	{ "named", NAMED }, // 669
! 	{ "nat", NAT }, // 670
! 	{ "national", NATIONAL }, // 671
! 	{ "national-edited", NATIONAL_EDITED }, // 672
! 	{ "national-of", NATIONAL_OF }, // 673
! 	{ "native", NATIVE }, // 674
! 	{ "nested", NESTED }, // 675
! 	{ "next", NEXT }, // 676
! 	{ "no", NO }, // 677
! 	{ "note", NOTE }, // 678
! 	{ "nulls", NULLS }, // 679
! 	{ "null", NULLS }, // 679
! 	{ "nullptr", NULLPTR }, // 680
! 	{ "numeric", NUMERIC }, // 681
! 	{ "numeric-edited", NUMERIC_EDITED }, // 682
! 	{ "numval", NUMVAL }, // 683
! 	{ "numval-c", NUMVAL_C }, // 684
! 	{ "numval-f", NUMVAL_F }, // 685
! 	{ "occurs", OCCURS }, // 686
! 	{ "of", OF }, // 687
! 	{ "off", OFF }, // 688
! 	{ "omitted", OMITTED }, // 689
! 	{ "on", ON }, // 690
! 	{ "only", ONLY }, // 691
! 	{ "optional", OPTIONAL }, // 692
! 	{ "options", OPTIONS }, // 693
! 	{ "ord", ORD }, // 694
! 	{ "order", ORDER }, // 695
! 	{ "ord-max", ORD_MAX }, // 696
! 	{ "ord-min", ORD_MIN }, // 697
! 	{ "organization", ORGANIZATION }, // 698
! 	{ "other", OTHER }, // 699
! 	{ "otherwise", OTHERWISE }, // 700
! 	{ "output", OUTPUT }, // 701
! 	{ "packed-decimal", PACKED_DECIMAL }, // 702
! 	{ "padding", PADDING }, // 703
! 	{ "page", PAGE }, // 704
! 	{ "page-counter", PAGE_COUNTER }, // 705
! 	{ "pf", PF }, // 706
! 	{ "ph", PH }, // 707
! 	{ "pi", PI }, // 708
! 	{ "pic", PIC }, // 709
! 	{ "picture", PICTURE }, // 710
! 	{ "plus", PLUS }, // 711
! 	{ "present-value", PRESENT_VALUE }, // 712
! 	{ "print-switch", PRINT_SWITCH }, // 713
! 	{ "procedure", PROCEDURE }, // 714
! 	{ "procedures", PROCEDURES }, // 715
! 	{ "proceed", PROCEED }, // 716
! 	{ "process", PROCESS }, // 717
  	{ "processing", PROCESSING }, // 718
  	{ "program-id", PROGRAM_ID }, // 719
  	{ "program", PROGRAM_kw }, // 720
--- 57,469 ----
  	{ "backward", BACKWARD }, // 311
  	{ "positive", POSITIVE }, // 312
  	{ "pointer", POINTER }, // 313
! 	{ "process", PROCESS }, // 314
! 	{ "section", SECTION }, // 315
! 	{ "standard-alphabet", STANDARD_ALPHABET }, // 316
! 	{ "switch", SWITCH }, // 317
! 	{ "upsi", UPSI }, // 318
! 	{ "zero", ZERO }, // 319
! 	{ "zeros", ZERO }, // 319
! 	{ "zeroes", ZERO }, // 319
! 	{ "sysin", SYSIN }, // 320
! 	{ "sysipt", SYSIPT }, // 321
! 	{ "sysout", SYSOUT }, // 322
! 	{ "syslist", SYSLIST }, // 323
! 	{ "syslst", SYSLST }, // 324
! 	{ "syspunch", SYSPUNCH }, // 325
! 	{ "syspch", SYSPCH }, // 326
! 	{ "console", CONSOLE }, // 327
! 	{ "c01", C01 }, // 328
! 	{ "c02", C02 }, // 329
! 	{ "c03", C03 }, // 330
! 	{ "c04", C04 }, // 331
! 	{ "c05", C05 }, // 332
! 	{ "c06", C06 }, // 333
! 	{ "c07", C07 }, // 334
! 	{ "c08", C08 }, // 335
! 	{ "c09", C09 }, // 336
! 	{ "c10", C10 }, // 337
! 	{ "c11", C11 }, // 338
! 	{ "c12", C12 }, // 339
! 	{ "csp", CSP }, // 340
! 	{ "s01", S01 }, // 341
! 	{ "s02", S02 }, // 342
! 	{ "s03", S03 }, // 343
! 	{ "s04", S04 }, // 344
! 	{ "s05", S05 }, // 345
! 	{ "afp-5a", AFP_5A }, // 346
! 	{ "stdin", STDIN }, // 347
! 	{ "stdout", STDOUT }, // 348
! 	{ "stderr", STDERR }, // 349
! 	{ "list", LIST }, // 350
! 	{ "map", MAP }, // 351
! 	{ "nolist", NOLIST }, // 352
! 	{ "nomap", NOMAP }, // 353
! 	{ "nosource", NOSOURCE }, // 354
! 	{ "might-be", MIGHT_BE }, // 355
! 	{ "function-udf", FUNCTION_UDF }, // 356
! 	{ "function-udf-0", FUNCTION_UDF_0 }, // 357
! 	{ "default", DEFAULT }, // 358
! 	{ "date-fmt", DATE_FMT }, // 359
! 	{ "time-fmt", TIME_FMT }, // 360
! 	{ "datetime-fmt", DATETIME_FMT }, // 361
! 	{ "basis", BASIS }, // 362
! 	{ "cbl", CBL }, // 363
! 	{ "constant", CONSTANT }, // 364
! 	{ "copy", COPY }, // 365
! 	{ "defined", DEFINED }, // 366
! 	{ "enter", ENTER }, // 367
! 	{ "feature", FEATURE }, // 368
! 	{ "insertt", INSERTT }, // 369
! 	{ "lsub", LSUB }, // 370
! 	{ "parameter", PARAMETER_kw }, // 371
! 	{ "override", OVERRIDE }, // 372
! 	{ "ready", READY }, // 373
! 	{ "reset", RESET }, // 374
! 	{ "rsub", RSUB }, // 375
! 	{ "service-reload", SERVICE_RELOAD }, // 376
! 	{ "star-cbl", STAR_CBL }, // 377
! 	{ "subscript", SUBSCRIPT }, // 378
! 	{ "suppress", SUPPRESS }, // 379
! 	{ "title", TITLE }, // 380
! 	{ "trace", TRACE }, // 381
! 	{ "use", USE }, // 382
! 	{ "cobol-words", COBOL_WORDS }, // 383
! 	{ "equate", EQUATE }, // 384
! 	{ "undefine", UNDEFINE }, // 385
! 	{ "cdf-define", CDF_DEFINE }, // 386
! 	{ "cdf-display", CDF_DISPLAY }, // 387
! 	{ "cdf-if", CDF_IF }, // 388
! 	{ "cdf-else", CDF_ELSE }, // 389
! 	{ "cdf-end-if", CDF_END_IF }, // 390
! 	{ "cdf-evaluate", CDF_EVALUATE }, // 391
! 	{ "cdf-when", CDF_WHEN }, // 392
! 	{ "cdf-end-evaluate", CDF_END_EVALUATE }, // 393
! 	{ "call-convention", CALL_CONVENTION }, // 394
! 	{ "call-cobol", CALL_COBOL }, // 395
! 	{ "call-verbatim", CALL_VERBATIM }, // 396
! 	{ "cdf-push", CDF_PUSH }, // 397
! 	{ "cdf-pop", CDF_POP }, // 398
! 	{ "source-format", SOURCE_FORMAT }, // 399
! 	{ "if", IF }, // 400
! 	{ "then", THEN }, // 401
! 	{ "else", ELSE }, // 402
! 	{ "sentence", SENTENCE }, // 403
! 	{ "accept", ACCEPT }, // 404
! 	{ "add", ADD }, // 405
! 	{ "alter", ALTER }, // 406
! 	{ "call", CALL }, // 407
! 	{ "cancel", CANCEL }, // 408
! 	{ "close", CLOSE }, // 409
! 	{ "compute", COMPUTE }, // 410
! 	{ "continue", CONTINUE }, // 411
! 	{ "delete", DELETE }, // 412
! 	{ "display", DISPLAY }, // 413
! 	{ "divide", DIVIDE }, // 414
! 	{ "evaluate", EVALUATE }, // 415
! 	{ "exit", EXIT }, // 416
! 	{ "filler", FILLER_kw }, // 417
! 	{ "goback", GOBACK }, // 418
! 	{ "goto", GOTO }, // 419
! 	{ "initialize", INITIALIZE }, // 420
! 	{ "inspect", INSPECT }, // 421
! 	{ "merge", MERGE }, // 422
! 	{ "move", MOVE }, // 423
! 	{ "multiply", MULTIPLY }, // 424
! 	{ "open", OPEN }, // 425
! 	{ "paragraph", PARAGRAPH }, // 426
! 	{ "read", READ }, // 427
! 	{ "release", RELEASE }, // 428
! 	{ "return", RETURN }, // 429
! 	{ "rewrite", REWRITE }, // 430
! 	{ "search", SEARCH }, // 431
! 	{ "set", SET }, // 432
! 	{ "select", SELECT }, // 433
! 	{ "sort", SORT }, // 434
! 	{ "sort-merge", SORT_MERGE }, // 435
! 	{ "string", STRING_kw }, // 436
! 	{ "stop", STOP }, // 437
! 	{ "subtract", SUBTRACT }, // 438
! 	{ "start", START }, // 439
! 	{ "unstring", UNSTRING }, // 440
! 	{ "write", WRITE }, // 441
! 	{ "when", WHEN }, // 442
! 	{ "argument-number", ARGUMENT_NUMBER }, // 443
! 	{ "argument-value", ARGUMENT_VALUE }, // 444
! 	{ "environment-name", ENVIRONMENT_NAME }, // 445
! 	{ "environment-value", ENVIRONMENT_VALUE }, // 446
! 	{ "abs", ABS }, // 447
! 	{ "access", ACCESS }, // 448
! 	{ "acos", ACOS }, // 449
! 	{ "actual", ACTUAL }, // 450
! 	{ "advancing", ADVANCING }, // 451
! 	{ "after", AFTER }, // 452
! 	{ "all", ALL }, // 453
! 	{ "allocate", ALLOCATE }, // 454
! 	{ "alphabet", ALPHABET }, // 455
! 	{ "alphabetic", ALPHABETIC }, // 456
! 	{ "alphabetic-lower", ALPHABETIC_LOWER }, // 457
! 	{ "alphabetic-upper", ALPHABETIC_UPPER }, // 458
! 	{ "alphanumeric", ALPHANUMERIC }, // 459
! 	{ "alphanumeric-edited", ALPHANUMERIC_EDITED }, // 460
! 	{ "also", ALSO }, // 461
! 	{ "alternate", ALTERNATE }, // 462
! 	{ "annuity", ANNUITY }, // 463
! 	{ "anum", ANUM }, // 464
! 	{ "any", ANY }, // 465
! 	{ "anycase", ANYCASE }, // 466
! 	{ "apply", APPLY }, // 467
! 	{ "are", ARE }, // 468
! 	{ "area", AREA }, // 469
! 	{ "areas", AREAS }, // 470
! 	{ "as", AS }, // 471
! 	{ "ascending", ASCENDING }, // 472
! 	{ "activating", ACTIVATING }, // 473
! 	{ "asin", ASIN }, // 474
! 	{ "assign", ASSIGN }, // 475
! 	{ "at", AT }, // 476
! 	{ "atan", ATAN }, // 477
! 	{ "based", BASED }, // 478
! 	{ "baseconvert", BASECONVERT }, // 479
! 	{ "before", BEFORE }, // 480
! 	{ "binary", BINARY }, // 481
! 	{ "bit", BIT }, // 482
! 	{ "bit-of", BIT_OF }, // 483
! 	{ "bit-to-char", BIT_TO_CHAR }, // 484
! 	{ "blank", BLANK }, // 485
! 	{ "block", BLOCK_kw }, // 486
! 	{ "boolean-of-integer", BOOLEAN_OF_INTEGER }, // 487
! 	{ "bottom", BOTTOM }, // 488
! 	{ "by", BY }, // 489
! 	{ "byte", BYTE }, // 490
! 	{ "byte-length", BYTE_LENGTH }, // 491
! 	{ "cf", CF }, // 492
! 	{ "ch", CH }, // 493
! 	{ "changed", CHANGED }, // 494
! 	{ "char", CHAR }, // 495
! 	{ "char-national", CHAR_NATIONAL }, // 496
! 	{ "character", CHARACTER }, // 497
! 	{ "characters", CHARACTERS }, // 498
! 	{ "checking", CHECKING }, // 499
! 	{ "class", CLASS }, // 500
! 	{ "cobol", COBOL }, // 501
! 	{ "code", CODE }, // 502
! 	{ "code-set", CODESET }, // 503
! 	{ "collating", COLLATING }, // 504
! 	{ "column", COLUMN }, // 505
! 	{ "combined-datetime", COMBINED_DATETIME }, // 506
! 	{ "comma", COMMA }, // 507
! 	{ "command-line", COMMAND_LINE }, // 508
! 	{ "command-line-count", COMMAND_LINE_COUNT }, // 509
! 	{ "commit", COMMIT }, // 510
! 	{ "common", COMMON }, // 511
! 	{ "concat", CONCAT }, // 512
! 	{ "condition", CONDITION }, // 513
! 	{ "configuration", CONFIGURATION_SECT }, // 514
! 	{ "contains", CONTAINS }, // 515
! 	{ "content", CONTENT }, // 516
! 	{ "control", CONTROL }, // 517
! 	{ "controls", CONTROLS }, // 518
! 	{ "convert", CONVERT }, // 519
! 	{ "converting", CONVERTING }, // 520
! 	{ "corresponding", CORRESPONDING }, // 521
! 	{ "cos", COS }, // 522
! 	{ "count", COUNT }, // 523
! 	{ "currency", CURRENCY }, // 524
! 	{ "current", CURRENT }, // 525
! 	{ "current-date", CURRENT_DATE }, // 526
! 	{ "data", DATA }, // 527
! 	{ "date", DATE }, // 528
! 	{ "date-compiled", DATE_COMPILED }, // 529
! 	{ "date-of-integer", DATE_OF_INTEGER }, // 530
! 	{ "date-to-yyyymmdd", DATE_TO_YYYYMMDD }, // 531
! 	{ "date-written", DATE_WRITTEN }, // 532
! 	{ "day", DAY }, // 533
! 	{ "day-of-integer", DAY_OF_INTEGER }, // 534
! 	{ "day-of-week", DAY_OF_WEEK }, // 535
! 	{ "day-to-yyyyddd", DAY_TO_YYYYDDD }, // 536
! 	{ "dbcs", DBCS }, // 537
! 	{ "de", DE }, // 538
! 	{ "debugging", DEBUGGING }, // 539
! 	{ "decimal-point", DECIMAL_POINT }, // 540
! 	{ "declaratives", DECLARATIVES }, // 541
! 	{ "delimited", DELIMITED }, // 542
! 	{ "delimiter", DELIMITER }, // 543
! 	{ "depending", DEPENDING }, // 544
! 	{ "descending", DESCENDING }, // 545
! 	{ "detail", DETAIL }, // 546
! 	{ "direct", DIRECT }, // 547
! 	{ "direct-access", DIRECT_ACCESS }, // 548
! 	{ "down", DOWN }, // 549
! 	{ "duplicates", DUPLICATES }, // 550
! 	{ "dynamic", DYNAMIC }, // 551
! 	{ "e", E }, // 552
! 	{ "ebcdic", EBCDIC }, // 553
! 	{ "ec", EC }, // 554
! 	{ "egcs", EGCS }, // 555
! 	{ "encoding", ENCODING }, // 556
! 	{ "entry", ENTRY }, // 557
! 	{ "environment", ENVIRONMENT }, // 558
! 	{ "every", EVERY }, // 559
! 	{ "examine", EXAMINE }, // 560
! 	{ "exhibit", EXHIBIT }, // 561
! 	{ "exp", EXP }, // 562
! 	{ "exp10", EXP10 }, // 563
! 	{ "extend", EXTEND }, // 564
! 	{ "external", EXTERNAL }, // 565
! 	{ "exception-file", EXCEPTION_FILE }, // 566
! 	{ "exception-file-n", EXCEPTION_FILE_N }, // 567
! 	{ "exception-location", EXCEPTION_LOCATION }, // 568
! 	{ "exception-location-n", EXCEPTION_LOCATION_N }, // 569
! 	{ "exception-statement", EXCEPTION_STATEMENT }, // 570
! 	{ "exception-status", EXCEPTION_STATUS }, // 571
! 	{ "factorial", FACTORIAL }, // 572
! 	{ "false", FALSE_kw }, // 573
! 	{ "fd", FD }, // 574
! 	{ "file-control", FILE_CONTROL }, // 575
! 	{ "file", FILE_KW }, // 576
! 	{ "file-limit", FILE_LIMIT }, // 577
! 	{ "final", FINAL }, // 578
! 	{ "finally", FINALLY }, // 579
! 	{ "find-string", FIND_STRING }, // 580
! 	{ "first", FIRST }, // 581
! 	{ "fixed", FIXED }, // 582
! 	{ "footing", FOOTING }, // 583
! 	{ "for", FOR }, // 584
! 	{ "formatted-current-date", FORMATTED_CURRENT_DATE }, // 585
! 	{ "formatted-date", FORMATTED_DATE }, // 586
! 	{ "formatted-datetime", FORMATTED_DATETIME }, // 587
! 	{ "formatted-time", FORMATTED_TIME }, // 588
! 	{ "form-overflow", FORM_OVERFLOW }, // 589
! 	{ "free", FREE }, // 590
! 	{ "fraction-part", FRACTION_PART }, // 591
! 	{ "from", FROM }, // 592
! 	{ "function", FUNCTION }, // 593
! 	{ "generate", GENERATE }, // 594
! 	{ "giving", GIVING }, // 595
! 	{ "global", GLOBAL }, // 596
! 	{ "go", GO }, // 597
! 	{ "group", GROUP }, // 598
! 	{ "heading", HEADING }, // 599
! 	{ "hex", HEX }, // 600
! 	{ "hex-of", HEX_OF }, // 601
! 	{ "hex-to-char", HEX_TO_CHAR }, // 602
! 	{ "high-values", HIGH_VALUES }, // 603
! 	{ "highest-algebraic", HIGHEST_ALGEBRAIC }, // 604
! 	{ "hold", HOLD }, // 605
! 	{ "ibm-360", IBM_360 }, // 606
! 	{ "in", IN }, // 607
! 	{ "include", INCLUDE }, // 608
! 	{ "index", INDEX }, // 609
! 	{ "indexed", INDEXED }, // 610
! 	{ "indicate", INDICATE }, // 611
! 	{ "initial", INITIAL_kw }, // 612
! 	{ "initiate", INITIATE }, // 613
! 	{ "input", INPUT }, // 614
! 	{ "installation", INSTALLATION }, // 615
! 	{ "interface", INTERFACE }, // 616
! 	{ "integer", INTEGER }, // 617
! 	{ "integer-of-boolean", INTEGER_OF_BOOLEAN }, // 618
! 	{ "integer-of-date", INTEGER_OF_DATE }, // 619
! 	{ "integer-of-day", INTEGER_OF_DAY }, // 620
! 	{ "integer-of-formatted-date", INTEGER_OF_FORMATTED_DATE }, // 621
! 	{ "integer-part", INTEGER_PART }, // 622
! 	{ "into", INTO }, // 623
! 	{ "intrinsic", INTRINSIC }, // 624
! 	{ "invoke", INVOKE }, // 625
! 	{ "i-o", IO }, // 626
! 	{ "i-o-control", IO_CONTROL }, // 627
! 	{ "is", IS }, // 628
! 	{ "isnt", ISNT }, // 629
! 	{ "kanji", KANJI }, // 630
! 	{ "key", KEY }, // 631
! 	{ "label", LABEL }, // 632
! 	{ "last", LAST }, // 633
! 	{ "leading", LEADING }, // 634
! 	{ "left", LEFT }, // 635
! 	{ "length", LENGTH }, // 636
! 	{ "length-of", LENGTH_OF }, // 637
! 	{ "limit", LIMIT }, // 638
! 	{ "limits", LIMITS }, // 639
! 	{ "line", LINE }, // 640
! 	{ "lines", LINES }, // 641
! 	{ "line-counter", LINE_COUNTER }, // 642
! 	{ "linage", LINAGE }, // 643
! 	{ "linkage", LINKAGE }, // 644
! 	{ "locale", LOCALE }, // 645
! 	{ "locale-compare", LOCALE_COMPARE }, // 646
! 	{ "locale-date", LOCALE_DATE }, // 647
! 	{ "locale-time", LOCALE_TIME }, // 648
! 	{ "locale-time-from-seconds", LOCALE_TIME_FROM_SECONDS }, // 649
! 	{ "local-storage", LOCAL_STORAGE }, // 650
! 	{ "location", LOCATION }, // 651
! 	{ "lock", LOCK }, // 652
! 	{ "lock-on", LOCK_ON }, // 653
! 	{ "log", LOG }, // 654
! 	{ "log10", LOG10 }, // 655
! 	{ "lower-case", LOWER_CASE }, // 656
! 	{ "low-values", LOW_VALUES }, // 657
! 	{ "lowest-algebraic", LOWEST_ALGEBRAIC }, // 658
! 	{ "lparen", LPAREN }, // 659
! 	{ "manual", MANUAL }, // 660
! 	{ "maxx", MAXX }, // 661
! 	{ "mean", MEAN }, // 662
! 	{ "median", MEDIAN }, // 663
! 	{ "midrange", MIDRANGE }, // 664
! 	{ "minn", MINN }, // 665
! 	{ "multiple", MULTIPLE }, // 666
! 	{ "mod", MOD }, // 667
! 	{ "mode", MODE }, // 668
! 	{ "module-name", MODULE_NAME }, // 669
! 	{ "named", NAMED }, // 670
! 	{ "nat", NAT }, // 671
! 	{ "national", NATIONAL }, // 672
! 	{ "national-edited", NATIONAL_EDITED }, // 673
! 	{ "national-of", NATIONAL_OF }, // 674
! 	{ "native", NATIVE }, // 675
! 	{ "nested", NESTED }, // 676
! 	{ "next", NEXT }, // 677
! 	{ "no", NO }, // 678
! 	{ "note", NOTE }, // 679
! 	{ "nulls", NULLS }, // 680
! 	{ "null", NULLS }, // 680
! 	{ "nullptr", NULLPTR }, // 681
! 	{ "numeric", NUMERIC }, // 682
! 	{ "numeric-edited", NUMERIC_EDITED }, // 683
! 	{ "numval", NUMVAL }, // 684
! 	{ "numval-c", NUMVAL_C }, // 685
! 	{ "numval-f", NUMVAL_F }, // 686
! 	{ "occurs", OCCURS }, // 687
! 	{ "of", OF }, // 688
! 	{ "off", OFF }, // 689
! 	{ "omitted", OMITTED }, // 690
! 	{ "on", ON }, // 691
! 	{ "only", ONLY }, // 692
! 	{ "optional", OPTIONAL }, // 693
! 	{ "options", OPTIONS }, // 694
! 	{ "ord", ORD }, // 695
! 	{ "order", ORDER }, // 696
! 	{ "ord-max", ORD_MAX }, // 697
! 	{ "ord-min", ORD_MIN }, // 698
! 	{ "organization", ORGANIZATION }, // 699
! 	{ "other", OTHER }, // 700
! 	{ "otherwise", OTHERWISE }, // 701
! 	{ "output", OUTPUT }, // 702
! 	{ "packed-decimal", PACKED_DECIMAL }, // 703
! 	{ "padding", PADDING }, // 704
! 	{ "page", PAGE }, // 705
! 	{ "page-counter", PAGE_COUNTER }, // 706
! 	{ "pf", PF }, // 707
! 	{ "ph", PH }, // 708
! 	{ "pi", PI }, // 709
! 	{ "pic", PIC }, // 710
! 	{ "picture", PICTURE }, // 711
! 	{ "plus", PLUS }, // 712
! 	{ "present-value", PRESENT_VALUE }, // 713
! 	{ "print-switch", PRINT_SWITCH }, // 714
! 	{ "procedure", PROCEDURE }, // 715
! 	{ "procedures", PROCEDURES }, // 716
! 	{ "proceed", PROCEED }, // 717
  	{ "processing", PROCESSING }, // 718
  	{ "program-id", PROGRAM_ID }, // 719
  	{ "program", PROGRAM_kw }, // 720
*************** token_names = {
*** 765,1174 ****
  	"BACKWARD", // 53 (311)
  	"POSITIVE", // 54 (312)
  	"POINTER", // 55 (313)
! 	"SECTION", // 56 (314)
! 	"STANDARD-ALPHABET", // 57 (315)
! 	"SWITCH", // 58 (316)
! 	"UPSI", // 59 (317)
! 	"ZERO", // 60 (318)
! 	"SYSIN", // 61 (319)
! 	"SYSIPT", // 62 (320)
! 	"SYSOUT", // 63 (321)
! 	"SYSLIST", // 64 (322)
! 	"SYSLST", // 65 (323)
! 	"SYSPUNCH", // 66 (324)
! 	"SYSPCH", // 67 (325)
! 	"CONSOLE", // 68 (326)
! 	"C01", // 69 (327)
! 	"C02", // 70 (328)
! 	"C03", // 71 (329)
! 	"C04", // 72 (330)
! 	"C05", // 73 (331)
! 	"C06", // 74 (332)
! 	"C07", // 75 (333)
! 	"C08", // 76 (334)
! 	"C09", // 77 (335)
! 	"C10", // 78 (336)
! 	"C11", // 79 (337)
! 	"C12", // 80 (338)
! 	"CSP", // 81 (339)
! 	"S01", // 82 (340)
! 	"S02", // 83 (341)
! 	"S03", // 84 (342)
! 	"S04", // 85 (343)
! 	"S05", // 86 (344)
! 	"AFP-5A", // 87 (345)
! 	"STDIN", // 88 (346)
! 	"STDOUT", // 89 (347)
! 	"STDERR", // 90 (348)
! 	"LIST", // 91 (349)
! 	"MAP", // 92 (350)
! 	"NOLIST", // 93 (351)
! 	"NOMAP", // 94 (352)
! 	"NOSOURCE", // 95 (353)
! 	"MIGHT-BE", // 96 (354)
! 	"FUNCTION-UDF", // 97 (355)
! 	"FUNCTION-UDF-0", // 98 (356)
! 	"DEFAULT", // 99 (357)
! 	"DATE-FMT", // 100 (358)
! 	"TIME-FMT", // 101 (359)
! 	"DATETIME-FMT", // 102 (360)
! 	"BASIS", // 103 (361)
! 	"CBL", // 104 (362)
! 	"CONSTANT", // 105 (363)
! 	"COPY", // 106 (364)
! 	"DEFINED", // 107 (365)
! 	"ENTER", // 108 (366)
! 	"FEATURE", // 109 (367)
! 	"INSERTT", // 110 (368)
! 	"LSUB", // 111 (369)
! 	"PARAMETER", // 112 (370)
! 	"OVERRIDE", // 113 (371)
! 	"READY", // 114 (372)
! 	"RESET", // 115 (373)
! 	"RSUB", // 116 (374)
! 	"SERVICE-RELOAD", // 117 (375)
! 	"STAR-CBL", // 118 (376)
! 	"SUBSCRIPT", // 119 (377)
! 	"SUPPRESS", // 120 (378)
! 	"TITLE", // 121 (379)
! 	"TRACE", // 122 (380)
! 	"USE", // 123 (381)
! 	"COBOL-WORDS", // 124 (382)
! 	"EQUATE", // 125 (383)
! 	"UNDEFINE", // 126 (384)
! 	"CDF-DEFINE", // 127 (385)
! 	"CDF-DISPLAY", // 128 (386)
! 	"CDF-IF", // 129 (387)
! 	"CDF-ELSE", // 130 (388)
! 	"CDF-END-IF", // 131 (389)
! 	"CDF-EVALUATE", // 132 (390)
! 	"CDF-WHEN", // 133 (391)
! 	"CDF-END-EVALUATE", // 134 (392)
! 	"CALL-CONVENTION", // 135 (393)
! 	"CALL-COBOL", // 136 (394)
! 	"CALL-VERBATIM", // 137 (395)
! 	"CDF-PUSH", // 138 (396)
! 	"CDF-POP", // 139 (397)
! 	"SOURCE-FORMAT", // 140 (398)
! 	"IF", // 141 (399)
! 	"THEN", // 142 (400)
! 	"ELSE", // 143 (401)
! 	"SENTENCE", // 144 (402)
! 	"ACCEPT", // 145 (403)
! 	"ADD", // 146 (404)
! 	"ALTER", // 147 (405)
! 	"CALL", // 148 (406)
! 	"CANCEL", // 149 (407)
! 	"CLOSE", // 150 (408)
! 	"COMPUTE", // 151 (409)
! 	"CONTINUE", // 152 (410)
! 	"DELETE", // 153 (411)
! 	"DISPLAY", // 154 (412)
! 	"DIVIDE", // 155 (413)
! 	"EVALUATE", // 156 (414)
! 	"EXIT", // 157 (415)
! 	"FILLER", // 158 (416)
! 	"GOBACK", // 159 (417)
! 	"GOTO", // 160 (418)
! 	"INITIALIZE", // 161 (419)
! 	"INSPECT", // 162 (420)
! 	"MERGE", // 163 (421)
! 	"MOVE", // 164 (422)
! 	"MULTIPLY", // 165 (423)
! 	"OPEN", // 166 (424)
! 	"PARAGRAPH", // 167 (425)
! 	"READ", // 168 (426)
! 	"RELEASE", // 169 (427)
! 	"RETURN", // 170 (428)
! 	"REWRITE", // 171 (429)
! 	"SEARCH", // 172 (430)
! 	"SET", // 173 (431)
! 	"SELECT", // 174 (432)
! 	"SORT", // 175 (433)
! 	"SORT-MERGE", // 176 (434)
! 	"STRING", // 177 (435)
! 	"STOP", // 178 (436)
! 	"SUBTRACT", // 179 (437)
! 	"START", // 180 (438)
! 	"UNSTRING", // 181 (439)
! 	"WRITE", // 182 (440)
! 	"WHEN", // 183 (441)
! 	"ARGUMENT-NUMBER", // 184 (442)
! 	"ARGUMENT-VALUE", // 185 (443)
! 	"ENVIRONMENT-NAME", // 186 (444)
! 	"ENVIRONMENT-VALUE", // 187 (445)
! 	"ABS", // 188 (446)
! 	"ACCESS", // 189 (447)
! 	"ACOS", // 190 (448)
! 	"ACTUAL", // 191 (449)
! 	"ADVANCING", // 192 (450)
! 	"AFTER", // 193 (451)
! 	"ALL", // 194 (452)
! 	"ALLOCATE", // 195 (453)
! 	"ALPHABET", // 196 (454)
! 	"ALPHABETIC", // 197 (455)
! 	"ALPHABETIC-LOWER", // 198 (456)
! 	"ALPHABETIC-UPPER", // 199 (457)
! 	"ALPHANUMERIC", // 200 (458)
! 	"ALPHANUMERIC-EDITED", // 201 (459)
! 	"ALSO", // 202 (460)
! 	"ALTERNATE", // 203 (461)
! 	"ANNUITY", // 204 (462)
! 	"ANUM", // 205 (463)
! 	"ANY", // 206 (464)
! 	"ANYCASE", // 207 (465)
! 	"APPLY", // 208 (466)
! 	"ARE", // 209 (467)
! 	"AREA", // 210 (468)
! 	"AREAS", // 211 (469)
! 	"AS", // 212 (470)
! 	"ASCENDING", // 213 (471)
! 	"ACTIVATING", // 214 (472)
! 	"ASIN", // 215 (473)
! 	"ASSIGN", // 216 (474)
! 	"AT", // 217 (475)
! 	"ATAN", // 218 (476)
! 	"BASED", // 219 (477)
! 	"BASECONVERT", // 220 (478)
! 	"BEFORE", // 221 (479)
! 	"BINARY", // 222 (480)
! 	"BIT", // 223 (481)
! 	"BIT-OF", // 224 (482)
! 	"BIT-TO-CHAR", // 225 (483)
! 	"BLANK", // 226 (484)
! 	"BLOCK", // 227 (485)
! 	"BOOLEAN-OF-INTEGER", // 228 (486)
! 	"BOTTOM", // 229 (487)
! 	"BY", // 230 (488)
! 	"BYTE", // 231 (489)
! 	"BYTE-LENGTH", // 232 (490)
! 	"CF", // 233 (491)
! 	"CH", // 234 (492)
! 	"CHANGED", // 235 (493)
! 	"CHAR", // 236 (494)
! 	"CHAR-NATIONAL", // 237 (495)
! 	"CHARACTER", // 238 (496)
! 	"CHARACTERS", // 239 (497)
! 	"CHECKING", // 240 (498)
! 	"CLASS", // 241 (499)
! 	"COBOL", // 242 (500)
! 	"CODE", // 243 (501)
! 	"CODE-SET", // 244 (502)
! 	"COLLATING", // 245 (503)
! 	"COLUMN", // 246 (504)
! 	"COMBINED-DATETIME", // 247 (505)
! 	"COMMA", // 248 (506)
! 	"COMMAND-LINE", // 249 (507)
! 	"COMMAND-LINE-COUNT", // 250 (508)
! 	"COMMIT", // 251 (509)
! 	"COMMON", // 252 (510)
! 	"CONCAT", // 253 (511)
! 	"CONDITION", // 254 (512)
! 	"CONFIGURATION", // 255 (513)
! 	"CONTAINS", // 256 (514)
! 	"CONTENT", // 257 (515)
! 	"CONTROL", // 258 (516)
! 	"CONTROLS", // 259 (517)
! 	"CONVERT", // 260 (518)
! 	"CONVERTING", // 261 (519)
! 	"CORRESPONDING", // 262 (520)
! 	"COS", // 263 (521)
! 	"COUNT", // 264 (522)
! 	"CURRENCY", // 265 (523)
! 	"CURRENT", // 266 (524)
! 	"CURRENT-DATE", // 267 (525)
! 	"DATA", // 268 (526)
! 	"DATE", // 269 (527)
! 	"DATE-COMPILED", // 270 (528)
! 	"DATE-OF-INTEGER", // 271 (529)
! 	"DATE-TO-YYYYMMDD", // 272 (530)
! 	"DATE-WRITTEN", // 273 (531)
! 	"DAY", // 274 (532)
! 	"DAY-OF-INTEGER", // 275 (533)
! 	"DAY-OF-WEEK", // 276 (534)
! 	"DAY-TO-YYYYDDD", // 277 (535)
! 	"DBCS", // 278 (536)
! 	"DE", // 279 (537)
! 	"DEBUGGING", // 280 (538)
! 	"DECIMAL-POINT", // 281 (539)
! 	"DECLARATIVES", // 282 (540)
! 	"DELIMITED", // 283 (541)
! 	"DELIMITER", // 284 (542)
! 	"DEPENDING", // 285 (543)
! 	"DESCENDING", // 286 (544)
! 	"DETAIL", // 287 (545)
! 	"DIRECT", // 288 (546)
! 	"DIRECT-ACCESS", // 289 (547)
! 	"DOWN", // 290 (548)
! 	"DUPLICATES", // 291 (549)
! 	"DYNAMIC", // 292 (550)
! 	"E", // 293 (551)
! 	"EBCDIC", // 294 (552)
! 	"EC", // 295 (553)
! 	"EGCS", // 296 (554)
! 	"ENCODING", // 297 (555)
! 	"ENTRY", // 298 (556)
! 	"ENVIRONMENT", // 299 (557)
! 	"EVERY", // 300 (558)
! 	"EXAMINE", // 301 (559)
! 	"EXHIBIT", // 302 (560)
! 	"EXP", // 303 (561)
! 	"EXP10", // 304 (562)
! 	"EXTEND", // 305 (563)
! 	"EXTERNAL", // 306 (564)
! 	"EXCEPTION-FILE", // 307 (565)
! 	"EXCEPTION-FILE-N", // 308 (566)
! 	"EXCEPTION-LOCATION", // 309 (567)
! 	"EXCEPTION-LOCATION-N", // 310 (568)
! 	"EXCEPTION-STATEMENT", // 311 (569)
! 	"EXCEPTION-STATUS", // 312 (570)
! 	"FACTORIAL", // 313 (571)
! 	"FALSE", // 314 (572)
! 	"FD", // 315 (573)
! 	"FILE-CONTROL", // 316 (574)
! 	"FILE", // 317 (575)
! 	"FILE-LIMIT", // 318 (576)
! 	"FINAL", // 319 (577)
! 	"FINALLY", // 320 (578)
! 	"FIND-STRING", // 321 (579)
! 	"FIRST", // 322 (580)
! 	"FIXED", // 323 (581)
! 	"FOOTING", // 324 (582)
! 	"FOR", // 325 (583)
! 	"FORMATTED-CURRENT-DATE", // 326 (584)
! 	"FORMATTED-DATE", // 327 (585)
! 	"FORMATTED-DATETIME", // 328 (586)
! 	"FORMATTED-TIME", // 329 (587)
! 	"FORM-OVERFLOW", // 330 (588)
! 	"FREE", // 331 (589)
! 	"FRACTION-PART", // 332 (590)
! 	"FROM", // 333 (591)
! 	"FUNCTION", // 334 (592)
! 	"GENERATE", // 335 (593)
! 	"GIVING", // 336 (594)
! 	"GLOBAL", // 337 (595)
! 	"GO", // 338 (596)
! 	"GROUP", // 339 (597)
! 	"HEADING", // 340 (598)
! 	"HEX", // 341 (599)
! 	"HEX-OF", // 342 (600)
! 	"HEX-TO-CHAR", // 343 (601)
! 	"HIGH-VALUES", // 344 (602)
! 	"HIGHEST-ALGEBRAIC", // 345 (603)
! 	"HOLD", // 346 (604)
! 	"IBM-360", // 347 (605)
! 	"IN", // 348 (606)
! 	"INCLUDE", // 349 (607)
! 	"INDEX", // 350 (608)
! 	"INDEXED", // 351 (609)
! 	"INDICATE", // 352 (610)
! 	"INITIAL", // 353 (611)
! 	"INITIATE", // 354 (612)
! 	"INPUT", // 355 (613)
! 	"INSTALLATION", // 356 (614)
! 	"INTERFACE", // 357 (615)
! 	"INTEGER", // 358 (616)
! 	"INTEGER-OF-BOOLEAN", // 359 (617)
! 	"INTEGER-OF-DATE", // 360 (618)
! 	"INTEGER-OF-DAY", // 361 (619)
! 	"INTEGER-OF-FORMATTED-DATE", // 362 (620)
! 	"INTEGER-PART", // 363 (621)
! 	"INTO", // 364 (622)
! 	"INTRINSIC", // 365 (623)
! 	"INVOKE", // 366 (624)
! 	"I-O", // 367 (625)
! 	"I-O-CONTROL", // 368 (626)
! 	"IS", // 369 (627)
! 	"ISNT", // 370 (628)
! 	"KANJI", // 371 (629)
! 	"KEY", // 372 (630)
! 	"LABEL", // 373 (631)
! 	"LAST", // 374 (632)
! 	"LEADING", // 375 (633)
! 	"LEFT", // 376 (634)
! 	"LENGTH", // 377 (635)
! 	"LENGTH-OF", // 378 (636)
! 	"LIMIT", // 379 (637)
! 	"LIMITS", // 380 (638)
! 	"LINE", // 381 (639)
! 	"LINES", // 382 (640)
! 	"LINE-COUNTER", // 383 (641)
! 	"LINAGE", // 384 (642)
! 	"LINKAGE", // 385 (643)
! 	"LOCALE", // 386 (644)
! 	"LOCALE-COMPARE", // 387 (645)
! 	"LOCALE-DATE", // 388 (646)
! 	"LOCALE-TIME", // 389 (647)
! 	"LOCALE-TIME-FROM-SECONDS", // 390 (648)
! 	"LOCAL-STORAGE", // 391 (649)
! 	"LOCATION", // 392 (650)
! 	"LOCK", // 393 (651)
! 	"LOCK-ON", // 394 (652)
! 	"LOG", // 395 (653)
! 	"LOG10", // 396 (654)
! 	"LOWER-CASE", // 397 (655)
! 	"LOW-VALUES", // 398 (656)
! 	"LOWEST-ALGEBRAIC", // 399 (657)
! 	"LPAREN", // 400 (658)
! 	"MANUAL", // 401 (659)
! 	"MAXX", // 402 (660)
! 	"MEAN", // 403 (661)
! 	"MEDIAN", // 404 (662)
! 	"MIDRANGE", // 405 (663)
! 	"MINN", // 406 (664)
! 	"MULTIPLE", // 407 (665)
! 	"MOD", // 408 (666)
! 	"MODE", // 409 (667)
! 	"MODULE-NAME", // 410 (668)
! 	"NAMED", // 411 (669)
! 	"NAT", // 412 (670)
! 	"NATIONAL", // 413 (671)
! 	"NATIONAL-EDITED", // 414 (672)
! 	"NATIONAL-OF", // 415 (673)
! 	"NATIVE", // 416 (674)
! 	"NESTED", // 417 (675)
! 	"NEXT", // 418 (676)
! 	"NO", // 419 (677)
! 	"NOTE", // 420 (678)
! 	"NULLS", // 421 (679)
! 	"NULLPTR", // 422 (680)
! 	"NUMERIC", // 423 (681)
! 	"NUMERIC-EDITED", // 424 (682)
! 	"NUMVAL", // 425 (683)
! 	"NUMVAL-C", // 426 (684)
! 	"NUMVAL-F", // 427 (685)
! 	"OCCURS", // 428 (686)
! 	"OF", // 429 (687)
! 	"OFF", // 430 (688)
! 	"OMITTED", // 431 (689)
! 	"ON", // 432 (690)
! 	"ONLY", // 433 (691)
! 	"OPTIONAL", // 434 (692)
! 	"OPTIONS", // 435 (693)
! 	"ORD", // 436 (694)
! 	"ORDER", // 437 (695)
! 	"ORD-MAX", // 438 (696)
! 	"ORD-MIN", // 439 (697)
! 	"ORGANIZATION", // 440 (698)
! 	"OTHER", // 441 (699)
! 	"OTHERWISE", // 442 (700)
! 	"OUTPUT", // 443 (701)
! 	"PACKED-DECIMAL", // 444 (702)
! 	"PADDING", // 445 (703)
! 	"PAGE", // 446 (704)
! 	"PAGE-COUNTER", // 447 (705)
! 	"PF", // 448 (706)
! 	"PH", // 449 (707)
! 	"PI", // 450 (708)
! 	"PIC", // 451 (709)
! 	"PICTURE", // 452 (710)
! 	"PLUS", // 453 (711)
! 	"PRESENT-VALUE", // 454 (712)
! 	"PRINT-SWITCH", // 455 (713)
! 	"PROCEDURE", // 456 (714)
! 	"PROCEDURES", // 457 (715)
! 	"PROCEED", // 458 (716)
! 	"PROCESS", // 459 (717)
  	"PROCESSING", // 460 (718)
  	"PROGRAM-ID", // 461 (719)
  	"PROGRAM", // 462 (720)
--- 765,1174 ----
  	"BACKWARD", // 53 (311)
  	"POSITIVE", // 54 (312)
  	"POINTER", // 55 (313)
! 	"PROCESS", // 56 (314)
! 	"SECTION", // 57 (315)
! 	"STANDARD-ALPHABET", // 58 (316)
! 	"SWITCH", // 59 (317)
! 	"UPSI", // 60 (318)
! 	"ZERO", // 61 (319)
! 	"SYSIN", // 62 (320)
! 	"SYSIPT", // 63 (321)
! 	"SYSOUT", // 64 (322)
! 	"SYSLIST", // 65 (323)
! 	"SYSLST", // 66 (324)
! 	"SYSPUNCH", // 67 (325)
! 	"SYSPCH", // 68 (326)
! 	"CONSOLE", // 69 (327)
! 	"C01", // 70 (328)
! 	"C02", // 71 (329)
! 	"C03", // 72 (330)
! 	"C04", // 73 (331)
! 	"C05", // 74 (332)
! 	"C06", // 75 (333)
! 	"C07", // 76 (334)
! 	"C08", // 77 (335)
! 	"C09", // 78 (336)
! 	"C10", // 79 (337)
! 	"C11", // 80 (338)
! 	"C12", // 81 (339)
! 	"CSP", // 82 (340)
! 	"S01", // 83 (341)
! 	"S02", // 84 (342)
! 	"S03", // 85 (343)
! 	"S04", // 86 (344)
! 	"S05", // 87 (345)
! 	"AFP-5A", // 88 (346)
! 	"STDIN", // 89 (347)
! 	"STDOUT", // 90 (348)
! 	"STDERR", // 91 (349)
! 	"LIST", // 92 (350)
! 	"MAP", // 93 (351)
! 	"NOLIST", // 94 (352)
! 	"NOMAP", // 95 (353)
! 	"NOSOURCE", // 96 (354)
! 	"MIGHT-BE", // 97 (355)
! 	"FUNCTION-UDF", // 98 (356)
! 	"FUNCTION-UDF-0", // 99 (357)
! 	"DEFAULT", // 100 (358)
! 	"DATE-FMT", // 101 (359)
! 	"TIME-FMT", // 102 (360)
! 	"DATETIME-FMT", // 103 (361)
! 	"BASIS", // 104 (362)
! 	"CBL", // 105 (363)
! 	"CONSTANT", // 106 (364)
! 	"COPY", // 107 (365)
! 	"DEFINED", // 108 (366)
! 	"ENTER", // 109 (367)
! 	"FEATURE", // 110 (368)
! 	"INSERTT", // 111 (369)
! 	"LSUB", // 112 (370)
! 	"PARAMETER", // 113 (371)
! 	"OVERRIDE", // 114 (372)
! 	"READY", // 115 (373)
! 	"RESET", // 116 (374)
! 	"RSUB", // 117 (375)
! 	"SERVICE-RELOAD", // 118 (376)
! 	"STAR-CBL", // 119 (377)
! 	"SUBSCRIPT", // 120 (378)
! 	"SUPPRESS", // 121 (379)
! 	"TITLE", // 122 (380)
! 	"TRACE", // 123 (381)
! 	"USE", // 124 (382)
! 	"COBOL-WORDS", // 125 (383)
! 	"EQUATE", // 126 (384)
! 	"UNDEFINE", // 127 (385)
! 	"CDF-DEFINE", // 128 (386)
! 	"CDF-DISPLAY", // 129 (387)
! 	"CDF-IF", // 130 (388)
! 	"CDF-ELSE", // 131 (389)
! 	"CDF-END-IF", // 132 (390)
! 	"CDF-EVALUATE", // 133 (391)
! 	"CDF-WHEN", // 134 (392)
! 	"CDF-END-EVALUATE", // 135 (393)
! 	"CALL-CONVENTION", // 136 (394)
! 	"CALL-COBOL", // 137 (395)
! 	"CALL-VERBATIM", // 138 (396)
! 	"CDF-PUSH", // 139 (397)
! 	"CDF-POP", // 140 (398)
! 	"SOURCE-FORMAT", // 141 (399)
! 	"IF", // 142 (400)
! 	"THEN", // 143 (401)
! 	"ELSE", // 144 (402)
! 	"SENTENCE", // 145 (403)
! 	"ACCEPT", // 146 (404)
! 	"ADD", // 147 (405)
! 	"ALTER", // 148 (406)
! 	"CALL", // 149 (407)
! 	"CANCEL", // 150 (408)
! 	"CLOSE", // 151 (409)
! 	"COMPUTE", // 152 (410)
! 	"CONTINUE", // 153 (411)
! 	"DELETE", // 154 (412)
! 	"DISPLAY", // 155 (413)
! 	"DIVIDE", // 156 (414)
! 	"EVALUATE", // 157 (415)
! 	"EXIT", // 158 (416)
! 	"FILLER", // 159 (417)
! 	"GOBACK", // 160 (418)
! 	"GOTO", // 161 (419)
! 	"INITIALIZE", // 162 (420)
! 	"INSPECT", // 163 (421)
! 	"MERGE", // 164 (422)
! 	"MOVE", // 165 (423)
! 	"MULTIPLY", // 166 (424)
! 	"OPEN", // 167 (425)
! 	"PARAGRAPH", // 168 (426)
! 	"READ", // 169 (427)
! 	"RELEASE", // 170 (428)
! 	"RETURN", // 171 (429)
! 	"REWRITE", // 172 (430)
! 	"SEARCH", // 173 (431)
! 	"SET", // 174 (432)
! 	"SELECT", // 175 (433)
! 	"SORT", // 176 (434)
! 	"SORT-MERGE", // 177 (435)
! 	"STRING", // 178 (436)
! 	"STOP", // 179 (437)
! 	"SUBTRACT", // 180 (438)
! 	"START", // 181 (439)
! 	"UNSTRING", // 182 (440)
! 	"WRITE", // 183 (441)
! 	"WHEN", // 184 (442)
! 	"ARGUMENT-NUMBER", // 185 (443)
! 	"ARGUMENT-VALUE", // 186 (444)
! 	"ENVIRONMENT-NAME", // 187 (445)
! 	"ENVIRONMENT-VALUE", // 188 (446)
! 	"ABS", // 189 (447)
! 	"ACCESS", // 190 (448)
! 	"ACOS", // 191 (449)
! 	"ACTUAL", // 192 (450)
! 	"ADVANCING", // 193 (451)
! 	"AFTER", // 194 (452)
! 	"ALL", // 195 (453)
! 	"ALLOCATE", // 196 (454)
! 	"ALPHABET", // 197 (455)
! 	"ALPHABETIC", // 198 (456)
! 	"ALPHABETIC-LOWER", // 199 (457)
! 	"ALPHABETIC-UPPER", // 200 (458)
! 	"ALPHANUMERIC", // 201 (459)
! 	"ALPHANUMERIC-EDITED", // 202 (460)
! 	"ALSO", // 203 (461)
! 	"ALTERNATE", // 204 (462)
! 	"ANNUITY", // 205 (463)
! 	"ANUM", // 206 (464)
! 	"ANY", // 207 (465)
! 	"ANYCASE", // 208 (466)
! 	"APPLY", // 209 (467)
! 	"ARE", // 210 (468)
! 	"AREA", // 211 (469)
! 	"AREAS", // 212 (470)
! 	"AS", // 213 (471)
! 	"ASCENDING", // 214 (472)
! 	"ACTIVATING", // 215 (473)
! 	"ASIN", // 216 (474)
! 	"ASSIGN", // 217 (475)
! 	"AT", // 218 (476)
! 	"ATAN", // 219 (477)
! 	"BASED", // 220 (478)
! 	"BASECONVERT", // 221 (479)
! 	"BEFORE", // 222 (480)
! 	"BINARY", // 223 (481)
! 	"BIT", // 224 (482)
! 	"BIT-OF", // 225 (483)
! 	"BIT-TO-CHAR", // 226 (484)
! 	"BLANK", // 227 (485)
! 	"BLOCK", // 228 (486)
! 	"BOOLEAN-OF-INTEGER", // 229 (487)
! 	"BOTTOM", // 230 (488)
! 	"BY", // 231 (489)
! 	"BYTE", // 232 (490)
! 	"BYTE-LENGTH", // 233 (491)
! 	"CF", // 234 (492)
! 	"CH", // 235 (493)
! 	"CHANGED", // 236 (494)
! 	"CHAR", // 237 (495)
! 	"CHAR-NATIONAL", // 238 (496)
! 	"CHARACTER", // 239 (497)
! 	"CHARACTERS", // 240 (498)
! 	"CHECKING", // 241 (499)
! 	"CLASS", // 242 (500)
! 	"COBOL", // 243 (501)
! 	"CODE", // 244 (502)
! 	"CODE-SET", // 245 (503)
! 	"COLLATING", // 246 (504)
! 	"COLUMN", // 247 (505)
! 	"COMBINED-DATETIME", // 248 (506)
! 	"COMMA", // 249 (507)
! 	"COMMAND-LINE", // 250 (508)
! 	"COMMAND-LINE-COUNT", // 251 (509)
! 	"COMMIT", // 252 (510)
! 	"COMMON", // 253 (511)
! 	"CONCAT", // 254 (512)
! 	"CONDITION", // 255 (513)
! 	"CONFIGURATION", // 256 (514)
! 	"CONTAINS", // 257 (515)
! 	"CONTENT", // 258 (516)
! 	"CONTROL", // 259 (517)
! 	"CONTROLS", // 260 (518)
! 	"CONVERT", // 261 (519)
! 	"CONVERTING", // 262 (520)
! 	"CORRESPONDING", // 263 (521)
! 	"COS", // 264 (522)
! 	"COUNT", // 265 (523)
! 	"CURRENCY", // 266 (524)
! 	"CURRENT", // 267 (525)
! 	"CURRENT-DATE", // 268 (526)
! 	"DATA", // 269 (527)
! 	"DATE", // 270 (528)
! 	"DATE-COMPILED", // 271 (529)
! 	"DATE-OF-INTEGER", // 272 (530)
! 	"DATE-TO-YYYYMMDD", // 273 (531)
! 	"DATE-WRITTEN", // 274 (532)
! 	"DAY", // 275 (533)
! 	"DAY-OF-INTEGER", // 276 (534)
! 	"DAY-OF-WEEK", // 277 (535)
! 	"DAY-TO-YYYYDDD", // 278 (536)
! 	"DBCS", // 279 (537)
! 	"DE", // 280 (538)
! 	"DEBUGGING", // 281 (539)
! 	"DECIMAL-POINT", // 282 (540)
! 	"DECLARATIVES", // 283 (541)
! 	"DELIMITED", // 284 (542)
! 	"DELIMITER", // 285 (543)
! 	"DEPENDING", // 286 (544)
! 	"DESCENDING", // 287 (545)
! 	"DETAIL", // 288 (546)
! 	"DIRECT", // 289 (547)
! 	"DIRECT-ACCESS", // 290 (548)
! 	"DOWN", // 291 (549)
! 	"DUPLICATES", // 292 (550)
! 	"DYNAMIC", // 293 (551)
! 	"E", // 294 (552)
! 	"EBCDIC", // 295 (553)
! 	"EC", // 296 (554)
! 	"EGCS", // 297 (555)
! 	"ENCODING", // 298 (556)
! 	"ENTRY", // 299 (557)
! 	"ENVIRONMENT", // 300 (558)
! 	"EVERY", // 301 (559)
! 	"EXAMINE", // 302 (560)
! 	"EXHIBIT", // 303 (561)
! 	"EXP", // 304 (562)
! 	"EXP10", // 305 (563)
! 	"EXTEND", // 306 (564)
! 	"EXTERNAL", // 307 (565)
! 	"EXCEPTION-FILE", // 308 (566)
! 	"EXCEPTION-FILE-N", // 309 (567)
! 	"EXCEPTION-LOCATION", // 310 (568)
! 	"EXCEPTION-LOCATION-N", // 311 (569)
! 	"EXCEPTION-STATEMENT", // 312 (570)
! 	"EXCEPTION-STATUS", // 313 (571)
! 	"FACTORIAL", // 314 (572)
! 	"FALSE", // 315 (573)
! 	"FD", // 316 (574)
! 	"FILE-CONTROL", // 317 (575)
! 	"FILE", // 318 (576)
! 	"FILE-LIMIT", // 319 (577)
! 	"FINAL", // 320 (578)
! 	"FINALLY", // 321 (579)
! 	"FIND-STRING", // 322 (580)
! 	"FIRST", // 323 (581)
! 	"FIXED", // 324 (582)
! 	"FOOTING", // 325 (583)
! 	"FOR", // 326 (584)
! 	"FORMATTED-CURRENT-DATE", // 327 (585)
! 	"FORMATTED-DATE", // 328 (586)
! 	"FORMATTED-DATETIME", // 329 (587)
! 	"FORMATTED-TIME", // 330 (588)
! 	"FORM-OVERFLOW", // 331 (589)
! 	"FREE", // 332 (590)
! 	"FRACTION-PART", // 333 (591)
! 	"FROM", // 334 (592)
! 	"FUNCTION", // 335 (593)
! 	"GENERATE", // 336 (594)
! 	"GIVING", // 337 (595)
! 	"GLOBAL", // 338 (596)
! 	"GO", // 339 (597)
! 	"GROUP", // 340 (598)
! 	"HEADING", // 341 (599)
! 	"HEX", // 342 (600)
! 	"HEX-OF", // 343 (601)
! 	"HEX-TO-CHAR", // 344 (602)
! 	"HIGH-VALUES", // 345 (603)
! 	"HIGHEST-ALGEBRAIC", // 346 (604)
! 	"HOLD", // 347 (605)
! 	"IBM-360", // 348 (606)
! 	"IN", // 349 (607)
! 	"INCLUDE", // 350 (608)
! 	"INDEX", // 351 (609)
! 	"INDEXED", // 352 (610)
! 	"INDICATE", // 353 (611)
! 	"INITIAL", // 354 (612)
! 	"INITIATE", // 355 (613)
! 	"INPUT", // 356 (614)
! 	"INSTALLATION", // 357 (615)
! 	"INTERFACE", // 358 (616)
! 	"INTEGER", // 359 (617)
! 	"INTEGER-OF-BOOLEAN", // 360 (618)
! 	"INTEGER-OF-DATE", // 361 (619)
! 	"INTEGER-OF-DAY", // 362 (620)
! 	"INTEGER-OF-FORMATTED-DATE", // 363 (621)
! 	"INTEGER-PART", // 364 (622)
! 	"INTO", // 365 (623)
! 	"INTRINSIC", // 366 (624)
! 	"INVOKE", // 367 (625)
! 	"I-O", // 368 (626)
! 	"I-O-CONTROL", // 369 (627)
! 	"IS", // 370 (628)
! 	"ISNT", // 371 (629)
! 	"KANJI", // 372 (630)
! 	"KEY", // 373 (631)
! 	"LABEL", // 374 (632)
! 	"LAST", // 375 (633)
! 	"LEADING", // 376 (634)
! 	"LEFT", // 377 (635)
! 	"LENGTH", // 378 (636)
! 	"LENGTH-OF", // 379 (637)
! 	"LIMIT", // 380 (638)
! 	"LIMITS", // 381 (639)
! 	"LINE", // 382 (640)
! 	"LINES", // 383 (641)
! 	"LINE-COUNTER", // 384 (642)
! 	"LINAGE", // 385 (643)
! 	"LINKAGE", // 386 (644)
! 	"LOCALE", // 387 (645)
! 	"LOCALE-COMPARE", // 388 (646)
! 	"LOCALE-DATE", // 389 (647)
! 	"LOCALE-TIME", // 390 (648)
! 	"LOCALE-TIME-FROM-SECONDS", // 391 (649)
! 	"LOCAL-STORAGE", // 392 (650)
! 	"LOCATION", // 393 (651)
! 	"LOCK", // 394 (652)
! 	"LOCK-ON", // 395 (653)
! 	"LOG", // 396 (654)
! 	"LOG10", // 397 (655)
! 	"LOWER-CASE", // 398 (656)
! 	"LOW-VALUES", // 399 (657)
! 	"LOWEST-ALGEBRAIC", // 400 (658)
! 	"LPAREN", // 401 (659)
! 	"MANUAL", // 402 (660)
! 	"MAXX", // 403 (661)
! 	"MEAN", // 404 (662)
! 	"MEDIAN", // 405 (663)
! 	"MIDRANGE", // 406 (664)
! 	"MINN", // 407 (665)
! 	"MULTIPLE", // 408 (666)
! 	"MOD", // 409 (667)
! 	"MODE", // 410 (668)
! 	"MODULE-NAME", // 411 (669)
! 	"NAMED", // 412 (670)
! 	"NAT", // 413 (671)
! 	"NATIONAL", // 414 (672)
! 	"NATIONAL-EDITED", // 415 (673)
! 	"NATIONAL-OF", // 416 (674)
! 	"NATIVE", // 417 (675)
! 	"NESTED", // 418 (676)
! 	"NEXT", // 419 (677)
! 	"NO", // 420 (678)
! 	"NOTE", // 421 (679)
! 	"NULLS", // 422 (680)
! 	"NULLPTR", // 423 (681)
! 	"NUMERIC", // 424 (682)
! 	"NUMERIC-EDITED", // 425 (683)
! 	"NUMVAL", // 426 (684)
! 	"NUMVAL-C", // 427 (685)
! 	"NUMVAL-F", // 428 (686)
! 	"OCCURS", // 429 (687)
! 	"OF", // 430 (688)
! 	"OFF", // 431 (689)
! 	"OMITTED", // 432 (690)
! 	"ON", // 433 (691)
! 	"ONLY", // 434 (692)
! 	"OPTIONAL", // 435 (693)
! 	"OPTIONS", // 436 (694)
! 	"ORD", // 437 (695)
! 	"ORDER", // 438 (696)
! 	"ORD-MAX", // 439 (697)
! 	"ORD-MIN", // 440 (698)
! 	"ORGANIZATION", // 441 (699)
! 	"OTHER", // 442 (700)
! 	"OTHERWISE", // 443 (701)
! 	"OUTPUT", // 444 (702)
! 	"PACKED-DECIMAL", // 445 (703)
! 	"PADDING", // 446 (704)
! 	"PAGE", // 447 (705)
! 	"PAGE-COUNTER", // 448 (706)
! 	"PF", // 449 (707)
! 	"PH", // 450 (708)
! 	"PI", // 451 (709)
! 	"PIC", // 452 (710)
! 	"PICTURE", // 453 (711)
! 	"PLUS", // 454 (712)
! 	"PRESENT-VALUE", // 455 (713)
! 	"PRINT-SWITCH", // 456 (714)
! 	"PROCEDURE", // 457 (715)
! 	"PROCEDURES", // 458 (716)
! 	"PROCEED", // 459 (717)
  	"PROCESSING", // 460 (718)
  	"PROGRAM-ID", // 461 (719)
  	"PROGRAM", // 462 (720)
diff -Nrcpad gcc-17-20260621/gcc/common/config/i386/cpuinfo.h gcc-17-20260628/gcc/common/config/i386/cpuinfo.h
*** gcc-17-20260621/gcc/common/config/i386/cpuinfo.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/common/config/i386/cpuinfo.h	Sun Jun 28 22:32:06 2026
*************** get_hygon_cpu (struct __processor_model
*** 383,388 ****
--- 383,394 ----
  	  CHECK___builtin_cpu_is ("c86-4g-m7");
  	  cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M7;
  	}
+       else if (model == 0x8)
+ 	{
+ 	  cpu = "c86-4g-m8";
+ 	  CHECK___builtin_cpu_is ("c86-4g-m8");
+ 	  cpu_model->__cpu_subtype = HYGONFAM18H_C86_4G_M8;
+ 	}
        break;
      default:
        break;
diff -Nrcpad gcc-17-20260621/gcc/common/config/i386/i386-common.cc gcc-17-20260628/gcc/common/config/i386/i386-common.cc
*** gcc-17-20260621/gcc/common/config/i386/i386-common.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/common/config/i386/i386-common.cc	Sun Jun 28 22:32:06 2026
*************** const char *const processor_names[] =
*** 2208,2214 ****
    "znver6",
    "c86-4g-m4",
    "c86-4g-m6",
!   "c86-4g-m7"
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
--- 2208,2215 ----
    "znver6",
    "c86-4g-m4",
    "c86-4g-m6",
!   "c86-4g-m7",
!   "c86-4g-m8"
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
*************** const pta processor_alias_table[] =
*** 2485,2490 ****
--- 2486,2494 ----
    {"c86-4g-m7", PROCESSOR_C86_4G_M7, CPU_C86_4G_M7,
      PTA_C86_4G_M7,
      M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M7), P_PROC_AVX512F},
+   {"c86-4g-m8", PROCESSOR_C86_4G_M8, CPU_C86_4G_M8,
+     PTA_C86_4G_M8,
+     M_CPU_SUBTYPE (HYGONFAM18H_C86_4G_M8), P_PROC_AVX512F},
  
    {"generic", PROCESSOR_GENERIC, CPU_GENERIC,
      PTA_64BIT
diff -Nrcpad gcc-17-20260621/gcc/common/config/i386/i386-cpuinfo.h gcc-17-20260628/gcc/common/config/i386/i386-cpuinfo.h
*** gcc-17-20260621/gcc/common/config/i386/i386-cpuinfo.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/common/config/i386/i386-cpuinfo.h	Sun Jun 28 22:32:06 2026
*************** enum processor_subtypes
*** 113,118 ****
--- 113,119 ----
    HYGONFAM18H_C86_4G_M4,
    HYGONFAM18H_C86_4G_M6,
    HYGONFAM18H_C86_4G_M7,
+   HYGONFAM18H_C86_4G_M8,
    CPU_SUBTYPE_MAX
  };
  
diff -Nrcpad gcc-17-20260621/gcc/config/aarch64/aarch64-simd.md gcc-17-20260628/gcc/config/aarch64/aarch64-simd.md
*** gcc-17-20260621/gcc/config/aarch64/aarch64-simd.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/aarch64/aarch64-simd.md	Sun Jun 28 22:32:06 2026
***************
*** 304,309 ****
--- 304,310 ----
       [r , m  ; load_4           , *    ] ldr<size>\t%w0, %1
       [w , w  ; neon_logic       , simd ] mov\t%0.8b, %1.8b
       [w , m  ; neon_load1_1reg  , simd ] ldr\t%<vstype>0, %1
+      [?w, r  ; f_mcr            , *    ] #
       [w , Dz ; neon_move        , simd ] movi\t%0.2d, #0
       [m , rZ ; store_4          , *    ] str<size>\t%w1, %0
       [m , w  ; neon_store1_1reg , simd ] str\t%<vstype>1, %0
diff -Nrcpad gcc-17-20260621/gcc/config/aarch64/aarch64-sve-builtins-base.cc gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-base.cc
*** gcc-17-20260621/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/aarch64/aarch64-sve-builtins-base.cc	Sun Jun 28 22:32:06 2026
*************** public:
*** 2992,3003 ****
         The fold routines expect the replacement statement to have the
         same lhs as the original call, so return the copy statement
         rather than the field update.  */
!     gassign *copy = gimple_build_assign (unshare_expr (f.lhs), rhs_tuple);
  
      /* Get a reference to the individual vector.  */
      tree field = tuple_type_field (TREE_TYPE (f.lhs));
      tree lhs_array = build3 (COMPONENT_REF, TREE_TYPE (field),
! 			     f.lhs, field, NULL_TREE);
      tree lhs_vector = build4 (ARRAY_REF, TREE_TYPE (rhs_vector),
  			      lhs_array, index, NULL_TREE, NULL_TREE);
      gassign *update = gimple_build_assign (lhs_vector, rhs_vector);
--- 2992,3003 ----
         The fold routines expect the replacement statement to have the
         same lhs as the original call, so return the copy statement
         rather than the field update.  */
!     gassign *copy = gimple_build_assign (f.lhs, rhs_tuple);
  
      /* Get a reference to the individual vector.  */
      tree field = tuple_type_field (TREE_TYPE (f.lhs));
      tree lhs_array = build3 (COMPONENT_REF, TREE_TYPE (field),
! 			     unshare_expr (f.lhs), field, NULL_TREE);
      tree lhs_vector = build4 (ARRAY_REF, TREE_TYPE (rhs_vector),
  			      lhs_array, index, NULL_TREE, NULL_TREE);
      gassign *update = gimple_build_assign (lhs_vector, rhs_vector);
diff -Nrcpad gcc-17-20260621/gcc/config/aarch64/aarch64-sve.md gcc-17-20260628/gcc/config/aarch64/aarch64-sve.md
*** gcc-17-20260621/gcc/config/aarch64/aarch64-sve.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/aarch64/aarch64-sve.md	Sun Jun 28 22:32:06 2026
***************
*** 2958,2964 ****
  ;; -------------------------------------------------------------------------
  
  (define_expand "vec_init<mode><Vel>"
!   [(match_operand:SVE_FULL 0 "register_operand")
      (match_operand 1 "")]
    "TARGET_SVE"
    {
--- 2958,2964 ----
  ;; -------------------------------------------------------------------------
  
  (define_expand "vec_init<mode><Vel>"
!   [(match_operand:SVE_ALL 0 "register_operand")
      (match_operand 1 "")]
    "TARGET_SVE"
    {
***************
*** 3002,3018 ****
  
  ;; Shift an SVE vector left and insert a scalar into element 0.
  (define_insn "vec_shl_insert_<mode>"
!   [(set (match_operand:SVE_FULL 0 "register_operand")
! 	(unspec:SVE_FULL
! 	  [(match_operand:SVE_FULL 1 "register_operand")
  	   (match_operand:<VEL> 2 "aarch64_reg_or_zero")]
  	  UNSPEC_INSR))]
    "TARGET_SVE"
    {@ [ cons: =0 , 1 , 2  ; attrs: movprfx ]
!      [ ?w       , 0 , rZ ; *              ] insr\t%0.<Vetype>, %<vwcore>2
!      [ w        , 0 , w  ; *              ] insr\t%0.<Vetype>, %<Vetype>2
!      [ ??&w     , w , rZ ; yes            ] movprfx\t%0, %1\;insr\t%0.<Vetype>, %<vwcore>2
!      [ ?&w      , w , w  ; yes            ] movprfx\t%0, %1\;insr\t%0.<Vetype>, %<Vetype>2
    }
    [(set_attr "sve_type" "sve_int_general")]
  )
--- 3002,3018 ----
  
  ;; Shift an SVE vector left and insert a scalar into element 0.
  (define_insn "vec_shl_insert_<mode>"
!   [(set (match_operand:SVE_ALL 0 "register_operand")
! 	(unspec:SVE_ALL
! 	  [(match_operand:SVE_ALL 1 "register_operand")
  	   (match_operand:<VEL> 2 "aarch64_reg_or_zero")]
  	  UNSPEC_INSR))]
    "TARGET_SVE"
    {@ [ cons: =0 , 1 , 2  ; attrs: movprfx ]
!      [ ?w       , 0 , rZ ; *              ] insr\t%0.<Vctype>, %<vccore>2
!      [ w        , 0 , w  ; *              ] insr\t%0.<Vctype>, %<Vctype>2
!      [ ??&w     , w , rZ ; yes            ] movprfx\t%0, %1\;insr\t%0.<Vctype>, %<vccore>2
!      [ ?&w      , w , w  ; yes            ] movprfx\t%0, %1\;insr\t%0.<Vctype>, %<Vctype>2
    }
    [(set_attr "sve_type" "sve_int_general")]
  )
diff -Nrcpad gcc-17-20260621/gcc/config/aarch64/aarch64.cc gcc-17-20260628/gcc/config/aarch64/aarch64.cc
*** gcc-17-20260621/gcc/config/aarch64/aarch64.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/aarch64/aarch64.cc	Sun Jun 28 22:32:06 2026
*************** aarch64_min_divisions_for_recip_mul (mac
*** 1528,1534 ****
  
  /* Return the reassociation width of treeop OPC with mode MODE.  */
  static int
! aarch64_reassociation_width (unsigned opc, machine_mode mode)
  {
    if (VECTOR_MODE_P (mode))
      return aarch64_tune_params.vec_reassoc_width;
--- 1528,1534 ----
  
  /* Return the reassociation width of treeop OPC with mode MODE.  */
  static int
! aarch64_reassociation_width (tree_code opc, machine_mode mode)
  {
    if (VECTOR_MODE_P (mode))
      return aarch64_tune_params.vec_reassoc_width;
*************** aarch64_sched_variable_issue (FILE *, in
*** 17191,17199 ****
  static int
  aarch64_sched_first_cycle_multipass_dfa_lookahead (void)
  {
!   int issue_rate = aarch64_sched_issue_rate ();
  
!   return issue_rate > 1 && !sched_fusion ? issue_rate : 0;
  }
  
  
--- 17191,17203 ----
  static int
  aarch64_sched_first_cycle_multipass_dfa_lookahead (void)
  {
!   /* Do not use DFA lookahead during sched_fusion or when dispatch
!      scheduling is enabled.  */
!   if (sched_fusion || aarch64_sched_dispatch (NULL, IS_DISPATCH_ON))
!     return 0;
  
!   int issue_rate = aarch64_sched_issue_rate ();
!   return issue_rate > 1 ? issue_rate : 0;
  }
  
  
diff -Nrcpad gcc-17-20260621/gcc/config/avr/avr-log.cc gcc-17-20260628/gcc/config/avr/avr-log.cc
*** gcc-17-20260621/gcc/config/avr/avr-log.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/avr/avr-log.cc	Sun Jun 28 22:32:07 2026
***************
*** 48,53 ****
--- 48,54 ----
    T: tree (brief)
    C: enum rtx_code
    m: machine_mode
+   N: tree node (recursive, brief)
    R: enum reg_class
    L: insn list
    H: location_t
*************** avr_vdump (FILE *stream, const char *cal
*** 102,107 ****
--- 103,169 ----
  }
  
  
+ /* %N: Brief dump of a node, but still displaying its structure.  */
+ 
+ static void
+ avr_log_node (FILE *file, tree node, int tab, const char *tag = nullptr)
+ {
+   tab += 3;
+ 
+   auto code = TREE_CODE (node);
+ 
+   fprintf (file, "%*s", tab, "");
+ 
+   print_node_brief (file, "", node, 0);
+   if (tag)
+     fprintf (file, " %s", tag);
+   if (DECL_P (node) && DECL_ARTIFICIAL (node))
+     fprintf (file, " artificial");
+   if (code == VAR_DECL || code == PARM_DECL || code == FIELD_DECL)
+     if (TREE_READONLY (node))
+       fprintf (file, " read-only");
+   if (TYPE_P (node) && TYPE_READONLY (node))
+     fprintf (file, " read-only");
+ 
+   fprintf (file, "\n");
+ 
+   switch (code)
+     {
+     case FUNCTION_DECL:
+       avr_log_node (file, TREE_TYPE (TREE_TYPE (node)), tab, "return");
+       for (tree p = DECL_ARGUMENTS (node); p; p = DECL_CHAIN (p))
+ 	avr_log_node (file, p, tab);
+       break;
+ 
+     case FUNCTION_TYPE:
+     case METHOD_TYPE:
+       avr_log_node (file, TREE_TYPE (node), tab, "return");
+       for (tree p = TYPE_ARG_TYPES (node); p; p = TREE_CHAIN (p))
+ 	avr_log_node (file, TREE_VALUE (p), tab);
+       break;
+ 
+     case RECORD_TYPE:
+     case UNION_TYPE:
+     case QUAL_UNION_TYPE:
+       for (tree el = TYPE_FIELDS (node); el; el = DECL_CHAIN (el))
+ 	if (TREE_CODE (el) == FIELD_DECL)
+ 	  avr_log_node (file, el, tab);
+       break;
+ 
+     case ARRAY_TYPE:
+     case POINTER_TYPE:
+     case REFERENCE_TYPE:
+       avr_log_node (file, TREE_TYPE (node), tab);
+       break;
+ 
+     default:
+       if (DECL_P (node))
+ 	avr_log_node (file, TREE_TYPE (node), tab);
+       break;
+     }
+ }
+ 
+ 
  /* Worker function implementing the %-codes and forwarding to
     respective print/dump function.  */
  
*************** avr_log_vadump (FILE *file, const char *
*** 161,166 ****
--- 223,238 ----
  	      }
  	      break;
  
+ 	    case 'N':
+ 	      {
+ 		tree t = va_arg (ap, tree);
+ 		if (NULL_TREE == t)
+ 		  fprintf (file, "<NULL-TREE>");
+ 		else
+ 		  avr_log_node (file, t, 0);
+ 	      }
+ 	      break;
+ 
  	    case 'b':
  	      fprintf (file, "%s", va_arg (ap, int) ? "true" : "false");
  	      break;
*************** avr_log_set_avr_log (void)
*** 370,375 ****
--- 442,448 ----
        SET_DUMP_DETAIL (address_cost);
        SET_DUMP_DETAIL (builtin);
        SET_DUMP_DETAIL (constraints);
+       SET_DUMP_DETAIL (insert_attributes);
        SET_DUMP_DETAIL (insn_addresses);
        SET_DUMP_DETAIL (legitimate_address_p);
        SET_DUMP_DETAIL (legitimize_address);
diff -Nrcpad gcc-17-20260621/gcc/config/avr/avr-protos.h gcc-17-20260628/gcc/config/avr/avr-protos.h
*** gcc-17-20260621/gcc/config/avr/avr-protos.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/avr/avr-protos.h	Sun Jun 28 22:32:07 2026
*************** typedef struct
*** 236,241 ****
--- 236,242 ----
    unsigned address_cost :1;
    unsigned builtin :1;
    unsigned constraints :1;
+   unsigned insert_attributes :1;
    unsigned insn_addresses :1;
    unsigned legitimate_address_p :1;
    unsigned legitimize_address :1;
diff -Nrcpad gcc-17-20260621/gcc/config/avr/avr.cc gcc-17-20260628/gcc/config/avr/avr.cc
*** gcc-17-20260621/gcc/config/avr/avr.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/avr/avr.cc	Sun Jun 28 22:32:07 2026
*************** avr_pgm_check_var_decl (tree node)
*** 11977,11985 ****
  
    gcc_assert (as == 0);
  
-   if (avr_log.progmem)
-     avr_edump ("%?: %t\n", node);
- 
    switch (TREE_CODE (node))
      {
      default:
--- 11977,11982 ----
*************** avr_attrs_section_name (tree attrs)
*** 12082,12087 ****
--- 12079,12088 ----
  static void
  avr_insert_attributes (tree node, tree *attributes)
  {
+   if (avr_log.insert_attributes)
+     if (TREE_CODE (node) != FUNCTION_DECL || !fndecl_built_in_p (node))
+       avr_edump ("%?:\n%N\n", node);
+ 
    if (VAR_P (node)
        && ! TREE_STATIC (node)
        && ! DECL_EXTERNAL (node))
diff -Nrcpad gcc-17-20260621/gcc/config/i386/c86-4g-m7.md gcc-17-20260628/gcc/config/i386/c86-4g-m7.md
*** gcc-17-20260621/gcc/config/i386/c86-4g-m7.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/c86-4g-m7.md	Thu Jan  1 00:00:00 1970
***************
*** 1,2061 ****
- ;; Copyright (C) 2026 Free Software Foundation, Inc.
- ;;
- ;; This file is part of GCC.
- ;;
- ;; GCC is free software; you can redistribute it and/or modify
- ;; it under the terms of the GNU General Public License as published by
- ;; the Free Software Foundation; either version 3, or (at your option)
- ;; any later version.
- ;;
- ;; GCC is distributed in the hope that it will be useful,
- ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- ;; GNU General Public License for more details.
- ;;
- ;; You should have received a copy of the GNU General Public License
- ;; along with GCC; see the file COPYING3.  If not see
- ;; <http://www.gnu.org/licenses/>.
- ;;
- 
- ;; HYGON c86-4g-m7 Scheduling
- ;; Modeling automatons for decoders, integer execution pipes,
- ;; AGU pipes, branch, floating point execution, fp store units,
- ;; integer and floating point dividers.  Split fpu1 and fpu3
- ;; into their own automata to keep these units independent
- ;; without increasing the main c86_4g_m7_fpu state space.
- (define_automaton "c86_4g_m7, c86_4g_m7_ieu, c86_4g_m7_agu, c86_4g_m7_fpu02, c86_4g_m7_fpu13, c86_4g_m7_idiv, c86_4g_m7_fdiv")
- 
- ;; Decoders unit has 4 decoders and all of them can decode fast path
- ;; and vector type instructions.
- (define_cpu_unit "c86-4g-m7-decode0" "c86_4g_m7")
- (define_cpu_unit "c86-4g-m7-decode1" "c86_4g_m7")
- (define_cpu_unit "c86-4g-m7-decode2" "c86_4g_m7")
- (define_cpu_unit "c86-4g-m7-decode3" "c86_4g_m7")
- 
- ;; Currently blocking all decoders for vector path instructions as
- ;; they are dispatched separately as microcode sequence.
- (define_reservation "c86-4g-m7-vector" "c86-4g-m7-decode0+c86-4g-m7-decode1+c86-4g-m7-decode2+c86-4g-m7-decode3")
- 
- ;; Direct instructions can be issued to any of the four decoders.
- (define_reservation "c86-4g-m7-direct" "c86-4g-m7-decode0|c86-4g-m7-decode1|c86-4g-m7-decode2|c86-4g-m7-decode3")
- 
- ;; Fix me: Need to revisit this later to simulate fast path double behavior.
- (define_reservation "c86-4g-m7-double" "c86-4g-m7-direct")
- 
- ;; Integer unit 4 ALU pipes.
- (define_cpu_unit "c86-4g-m7-ieu0" "c86_4g_m7_ieu")
- (define_cpu_unit "c86-4g-m7-ieu1" "c86_4g_m7_ieu")
- (define_cpu_unit "c86-4g-m7-ieu2" "c86_4g_m7_ieu")
- (define_cpu_unit "c86-4g-m7-ieu3" "c86_4g_m7_ieu")
- 
- ;; One separated integer divider.
- (define_cpu_unit "c86-4g-m7-idiv" "c86_4g_m7_idiv")
- 
- ;; c86-4g-m7 has an additional branch unit.
- (define_cpu_unit "c86-4g-m7-bru0" "c86_4g_m7_ieu")
- (define_reservation "c86-4g-m7-ieu" "c86-4g-m7-ieu0|c86-4g-m7-ieu1|c86-4g-m7-ieu2|c86-4g-m7-ieu3")
- 
- ;; 3 AGU pipes in c86-4g-m7
- (define_cpu_unit "c86-4g-m7-agu0" "c86_4g_m7_agu")
- (define_cpu_unit "c86-4g-m7-agu1" "c86_4g_m7_agu")
- (define_cpu_unit "c86-4g-m7-agu2" "c86_4g_m7_agu")
- (define_reservation "c86-4g-m7-agu-reserve" "c86-4g-m7-agu0|c86-4g-m7-agu1|c86-4g-m7-agu2")
- 
- ;; Load is 4 cycles.  We do not model reservation of load unit.
- (define_reservation "c86-4g-m7-load" "c86-4g-m7-agu-reserve")
- (define_reservation "c86-4g-m7-store" "c86-4g-m7-agu-reserve")
- 
- ;; vectorpath (microcoded) instructions are single issue instructions.
- ;; So, they occupy all the integer units.
- (define_reservation "c86-4g-m7-ivector" "c86-4g-m7-ieu0+c86-4g-m7-ieu1
- 					 +c86-4g-m7-ieu2+c86-4g-m7-ieu3+c86-4g-m7-bru0
- 					 +c86-4g-m7-agu0+c86-4g-m7-agu1+c86-4g-m7-agu2")
- 
- ;; Floating point unit 4 FP pipes.
- (define_cpu_unit "c86-4g-m7-fpu0" "c86_4g_m7_fpu02")
- (define_cpu_unit "c86-4g-m7-fpu1" "c86_4g_m7_fpu13")
- (define_cpu_unit "c86-4g-m7-fpu2" "c86_4g_m7_fpu02")
- (define_cpu_unit "c86-4g-m7-fpu3" "c86_4g_m7_fpu13")
- 
- (define_reservation "c86-4g-m7-fpu" "c86-4g-m7-fpu0|c86-4g-m7-fpu1|c86-4g-m7-fpu2|c86-4g-m7-fpu3")
- (define_reservation "c86-4g-m7-fpu_0_1" "c86-4g-m7-fpu0|c86-4g-m7-fpu1")
- (define_reservation "c86-4g-m7-fpu_0_2" "c86-4g-m7-fpu0|c86-4g-m7-fpu2")
- (define_reservation "c86-4g-m7-fpu_0_2x2" "c86-4g-m7-fpu0*2|c86-4g-m7-fpu2*2")
- (define_reservation "c86-4g-m7-fpu_0_2x4" "c86-4g-m7-fpu0*4|c86-4g-m7-fpu2*4")
- (define_reservation "c86-4g-m7-fpu_0_3" "c86-4g-m7-fpu0|c86-4g-m7-fpu3")
- (define_reservation "c86-4g-m7-fpu_1_3" "c86-4g-m7-fpu1|c86-4g-m7-fpu3")
- (define_reservation "c86-4g-m7-fpu_1_3x2" "c86-4g-m7-fpu1*2|c86-4g-m7-fpu3*2")
- (define_reservation "c86-4g-m7-fpu_1_3x3" "c86-4g-m7-fpu1*3|c86-4g-m7-fpu3*3")
- (define_reservation "c86-4g-m7-fpu_1_3x6" "c86-4g-m7-fpu1*6|c86-4g-m7-fpu3*6")
- (define_reservation "c86-4g-m7-fpux2" "c86-4g-m7-fpu0*2|c86-4g-m7-fpu1*2|c86-4g-m7-fpu2*2|c86-4g-m7-fpu3*2")
- (define_reservation "c86-4g-m7-fpux4" "c86-4g-m7-fpu0*4|c86-4g-m7-fpu1*4|c86-4g-m7-fpu2*4|c86-4g-m7-fpu3*4")
- (define_reservation "c86-4g-m7-fpux8" "c86-4g-m7-fpu0*8|c86-4g-m7-fpu1*8|c86-4g-m7-fpu2*8|c86-4g-m7-fpu3*8")
- (define_reservation "c86-4g-m7-fpux6" "c86-4g-m7-fpu0*6|c86-4g-m7-fpu1*6|c86-4g-m7-fpu2*6|c86-4g-m7-fpu3*6")
- (define_reservation "c86-4g-m7-fpux16" "c86-4g-m7-fpu0*16|c86-4g-m7-fpu1*16|c86-4g-m7-fpu2*16|c86-4g-m7-fpu3*16")
- (define_reservation "c86-4g-m7-fvector" "c86-4g-m7-fpu0+c86-4g-m7-fpu1
- 					 +c86-4g-m7-fpu2+c86-4g-m7-fpu3
- 					 +c86-4g-m7-agu0+c86-4g-m7-agu1+c86-4g-m7-agu2")
- 
- ;; Two FP dividers.
- (define_cpu_unit "c86-4g-m7-fdiv1" "c86_4g_m7_fdiv")
- (define_cpu_unit "c86-4g-m7-fdiv3" "c86_4g_m7_fdiv")
- 
- (define_reservation "c86-4g-m7-fp1fdiv1x4" "(c86-4g-m7-fpu1+c86-4g-m7-fdiv1)*4")
- (define_reservation "c86-4g-m7-fp3fdiv3x4" "(c86-4g-m7-fpu3+c86-4g-m7-fdiv3)*4")
- (define_reservation "c86-4g-m7-fdiv13" "(c86-4g-m7-fdiv1+c86-4g-m7-fdiv3)")
- (define_reservation "c86-4g-m7-fp13div13" "(c86-4g-m7-fpu1+c86-4g-m7-fpu3+c86-4g-m7-fdiv1+c86-4g-m7-fdiv3)")
- (define_reservation "c86-4g-m7-fp13div13x4" "c86-4g-m7-fp13div13*4")
- (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x8" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*8)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*8)")
- (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x9" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*9)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*9)")
- (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x11" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*11)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*11)")
- (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x15" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*15)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*15)")
- (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x18" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*18)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*18)")
- 
- ;; IMOV/IMOVX
- (define_insn_reservation "c86_4g_m7_imov_xchg" 1
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imov")
- 				  (and (eq_attr "c86_decode" "vector")
- 				       (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-vector")
- 
- (define_insn_reservation "c86_4g_m7_imov_xchg_load" 5
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imov")
- 				  (and (eq_attr "c86_decode" "vector")
- 				       (eq_attr "memory" "!none"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load")
- 
- (define_insn_reservation "c86_4g_m7_imovx_cwde" 2
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imovx")
- 				  (and (eq_attr "c86_decode" "double")
- 				       (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_imov" 1
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imov,imovx")
- 				  (and (eq_attr "c86_decode" "direct")
- 				       (eq_attr "memory" "none"))))
- 	     "c86-4g-m7-direct,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_imov_load" 5
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imov,imovx")
- 				  (and (eq_attr "c86_decode" "!vector")
- 				       (eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_imov_store" 1
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imov,imovx")
- 				  (and (eq_attr "c86_decode" "!vector")
- 				       (eq_attr "memory" "store"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-ieu")
- 
- ;; PUSH
- (define_insn_reservation "c86_4g_m7_push" 1
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "push,sse")
- 				  (eq_attr "memory" "store")))
- 			 "c86-4g-m7-direct,c86-4g-m7-store")
- 
- (define_insn_reservation "c86_4g_m7_push_mem" 5
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 				 (and (eq_attr "type" "push")
- 				  (eq_attr "memory" "both")))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-store")
- 
- ;; POP
- (define_insn_reservation "c86_4g_m7_pop" 4
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "pop")
- 				  (eq_attr "memory" "load")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load")
- 
- (define_insn_reservation "c86_4g_m7_pop_mem" 5
- 	    (and (eq_attr "cpu" "c86_4g_m7")
- 		 (and (eq_attr "type" "pop")
- 		  (eq_attr "memory" "both")))
- 	     "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store")
- 
- ;; IMUL/IMULX
- (define_insn_reservation "c86_4g_m7_imul" 3
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imul,imulx")
- 				  (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu1")
- 
- (define_insn_reservation "c86_4g_m7_imul_load" 7
- 			(and (eq_attr "cpu" "c86_4g_m7")
- 			     (and (eq_attr "type" "imul")
- 				  (eq_attr "memory" "!none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu1")
- 
- ;; IDIV
- (define_insn_reservation "c86_4g_m7_idiv" 7
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "!QI")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-ieu3,c86-4g-m7-idiv*7")
- 
- (define_insn_reservation "c86_4g_m7_idiv_QI" 6
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "QI")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-ieu3,c86-4g-m7-idiv*6")
- 
- (define_insn_reservation "c86_4g_m7_idiv_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "!QI")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3,c86-4g-m7-idiv*7")
- 
- (define_insn_reservation "c86_4g_m7_idiv_QI_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "idiv")
- 				   (and (eq_attr "mode" "QI")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3,c86-4g-m7-idiv*6")
- 
- ;; Integer/general Instructions
- (define_insn_reservation "c86_4g_m7_insn" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu,negnot,rotate1,ishift1,test,incdec,icmp,
- 						    rotate,rotatex,ishift,ishiftx,icmov")
- 				   (eq_attr "memory" "none,unknown")))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_insn_load" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu,incdec,icmp,test,ishift,
- 						    ishiftx,icmov,rotate,rotatex")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_insn_store" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ishift1,rotate1,rotate,incdec,
- 						    alu,icmov,ishift,negnot,alu1")
- 				   (eq_attr "memory" "store")))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu,c86-4g-m7-store")
- 
- (define_insn_reservation "c86_4g_m7_insn2_store" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "icmp")
- 				   (eq_attr "memory" "store")))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu,c86-4g-m7-store")
- 
- (define_insn_reservation "c86_4g_m7_insn_both" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu,negnot,rotate1,ishift1,incdec,rotate,
- 						    rotatex,ishift,ishiftx,icmov")
- 				   (eq_attr "memory" "both")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu,c86-4g-m7-store")
- 
- (define_insn_reservation "c86_4g_m7_setcc" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "setcc")
- 				   (eq_attr "memory" "none,unknown")))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu0|c86-4g-m7-ieu3")
- 
- (define_insn_reservation "c86_4g_m7_setcc_load" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "setcc")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu0|c86-4g-m7-ieu3")
- 
- (define_insn_reservation "c86_4g_m7_setcc_store" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "setcc")
- 				   (eq_attr "memory" "store")))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-ieu0|c86-4g-m7-ieu3")
- 
- ;; ALU1
- (define_insn_reservation "c86_4g_m7_alu1_double" 2
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu1")
- 				   (and (eq_attr "c86_decode" "double")
- 					(eq_attr "memory" "none,unknown"))))
- 			 "c86-4g-m7-double,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_alu1_double_load" 6
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu1")
- 				   (and (eq_attr "c86_decode" "double")
- 					(eq_attr "memory" "both"))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_alu1_vector" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu1")
- 				   (and (eq_attr "c86_decode" "vector")
- 					(eq_attr "memory" "none,unknown"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-ivector*3")
- 
- (define_insn_reservation "c86_4g_m7_alu1_vector_load" 7
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu1")
- 				   (and (eq_attr "c86_decode" "vector")
- 					(eq_attr "memory" "both"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ivector*3")
- 
- (define_insn_reservation "c86_4g_m7_alu1_direct" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu1")
- 				   (and (eq_attr "c86_decode" "direct")
- 					(eq_attr "memory" "none,unknown"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
- 
- (define_insn_reservation "c86_4g_m7_alu1_direct_load" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "alu1")
- 				   (and (eq_attr "c86_decode" "direct")
- 					(eq_attr "memory" "both"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ieu")
- 
- ;; CALL/CALLV
- (define_insn_reservation "c86_4g_m7_call" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (eq_attr "type" "call,callv"))
- 			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-bru0")
- 
- ;; IBR
- (define_insn_reservation "c86_4g_m7_branch" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ibr")
- 				   (eq_attr "memory" "none")))
- 			  "c86-4g-m7-direct,c86-4g-m7-bru0")
- 
- (define_insn_reservation "c86_4g_m7_branch_load" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ibr")
- 				   (eq_attr "memory" "load")))
- 			  "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-bru0")
- 
- ;; LEA
- (define_insn_reservation "c86_4g_m7_lea" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (eq_attr "type" "lea"))
- 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
- 
- ;; LEAVE
- (define_insn_reservation "c86_4g_m7_leave" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (eq_attr "type" "leave"))
- 			 "c86-4g-m7-double,c86-4g-m7-ieu,c86-4g-m7-store")
- 
- ;; STR
- (define_insn_reservation "c86_4g_m7_str" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "str")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-vector,c86-4g-m7-ivector*3")
- 
- (define_insn_reservation "c86_4g_m7_str_load" 7
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "str")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-ivector*3")
- 
- 
- (define_insn_reservation "c86_4g_m7_ieu_vector" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "other,multi")
- 				   (and (eq_attr "unit" "!i387")
- 				       (eq_attr "memory" "none,unknown"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-ivector*5")
- 
- (define_insn_reservation "c86_4g_m7_ieu_vector_load" 9
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "other,multi")
- 				   (and (eq_attr "unit" "!i387")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-ivector*5")
- 
- ;; SSEINS
- (define_insn_reservation "c86_4g_m7_sse_insertimm" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseins")
- 				   (and (eq_attr "memory" "none")
- 					(eq_attr "length_immediate" "2"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_3,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_sse_insert" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseins")
- 				   (and (eq_attr "memory" "none")
- 					(eq_attr "length_immediate" "!2"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1*2")
- 
- ;; FCMOV
- (define_insn_reservation "c86_4g_m7_fp_cmov" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (eq_attr "type" "fcmov"))
- 			 "c86-4g-m7-vector,c86-4g-m7-fvector*3")
- 
- ;; FLD
- (define_insn_reservation "c86_4g_m7_fp_mov_direct_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "c86_decode" "direct")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
- 
- ;; FST
- (define_insn_reservation "c86_4g_m7_fp_mov_direct_store" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "c86_decode" "direct")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "store"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1,c86-4g-m7-store")
- 
- ;; FILD
- (define_insn_reservation "c86_4g_m7_fp_mov_double_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "c86_decode" "double")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
- 
- ;; FIST
- (define_insn_reservation "c86_4g_m7_fp_mov_double_store" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "c86_decode" "double")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "store"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-store")
- 
- (define_insn_reservation "c86_4g_m7_fp_mov_direct" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "c86_decode" "direct")
- 				   (and (eq_attr "type" "fmov")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
- 
- ;; FSQRT
- (define_insn_reservation "c86_4g_m7_fp_sqrt" 22
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fpspc")
- 				   (eq_attr "c86_attr" "sqrt")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x18")
- 
- ;; FPSPC
- (define_insn_reservation "c86_4g_m7_fp_spc_direct" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fpspc")
- 				   (and (eq_attr "c86_decode" "direct")
- 				    (and (eq_attr "c86_attr" "other")
- 					 (eq_attr "memory" "store")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu3")
- 
- (define_insn_reservation "c86_4g_m7_fp_spc" 6
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fpspc")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fvector*6")
- 
- (define_insn_reservation "c86_4g_m7_fp_op_mul" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fop,fmul")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_fp_op_mul_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fop,fmul")
- 				   (and (eq_attr "fp_int_src" "false")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_fp_op_imul_load" 16
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fmul")
- 				   (and (eq_attr "fp_int_src" "true")
- 					(eq_attr "memory" "!none"))))
- 			"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu0,c86-4g-m7-fpu_0_2")
- 
- ;; FDIV
- (define_insn_reservation "c86_4g_m7_fp_div" 15
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fdiv")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x11")
- 
- (define_insn_reservation "c86_4g_m7_fp_div_load" 22
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fdiv")
- 				   (and (eq_attr "fp_int_src" "false")
- 					(eq_attr "memory" "!none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x11")
- 
- (define_insn_reservation "c86_4g_m7_fp_idiv_load" 26
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fdiv")
- 				   (and (eq_attr "fp_int_src" "true")
- 					(eq_attr "memory" "!none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1*4,c86-4g-m7-fp1div1_fp3div3_x4x11")
- 
- (define_insn_reservation "c86_4g_m7_fp_fsgn" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (eq_attr "type" "fsgn"))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- ;; FCMP
- (define_insn_reservation "c86_4g_m7_fp_fcmp" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fcmp")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu0,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_fp_fcmp_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "fcmp")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu0,c86-4g-m7-fpu1")
- 
- ;; MMX
- (define_insn_reservation "c86_4g_m7_fp_mmx" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (eq_attr "type" "mmx"))
- 			 "c86-4g-m7-direct")
- 
- (define_insn_reservation "c86_4g_m7_mmx_add_cmp" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxadd,mmxcmp")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_mmx_add_cmp_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxadd,mmxcmp")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_mmx_cvt" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxcvt")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_cvt_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxcvt")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_shift" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxshft")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_shift_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxshft")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_shift_avg" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxshft")
- 				   (and (eq_attr "c86_attr" "avg")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_mmx_shift_avg_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxshft")
- 				   (and (eq_attr "c86_attr" "avg")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- ;; SADBW
- (define_insn_reservation "c86_4g_m7_mmx_shift_sadbw" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxshft")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu0")
- 
- (define_insn_reservation "c86_4g_m7_mmx_shift_sadbw_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxshft")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0")
- 
- (define_insn_reservation "c86_4g_m7_mmx_mov" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxmov")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_mov_store" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxmov")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "store"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_mov_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxmov")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_mmx_mul" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxmul")
- 				   (eq_attr "memory" "none")))
- 			  "c86-4g-m7-direct,c86-4g-m7-fpu0")
- 
- (define_insn_reservation "c86_4g_m7_mmx_mul_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mmxmul")
- 				   (eq_attr "memory" "load")))
- 			  "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0")
- 
- ;; PINSR
- (define_insn_reservation "c86_4g_m7_sse_pinsr_reg" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,mmxcvt")
- 				   (and (eq_attr "c86_attr" "insr")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_sse_pinsr_reg_load" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,mmxcvt")
- 				   (and (eq_attr "c86_attr" "insr")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx_vpinsr_reg" 2
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "insr")
- 				     (and (eq_attr "prefix" "!orig")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3x2")
- 
- (define_insn_reservation "c86_4g_m7_avx_vpinsr_reg_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "insr")
- 				     (and (eq_attr "prefix" "!orig")
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- ;; PERM
- (define_insn_reservation "c86_4g_m7_avx512_perm_xmm" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (ior (and (eq_attr "c86_attr" "perm2")
- 						  (eq_attr "mode" "V4SF,V2DF,TI"))
- 					     (and (eq_attr "c86_attr" "perm")
- 						  (eq_attr "mode" "V8SF,V4DF,TI,OI")))
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_perm_xmm_opload" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (ior (and (eq_attr "c86_attr" "perm2")
- 						  (eq_attr "mode" "V4SF,V2DF,TI"))
- 					     (and (eq_attr "c86_attr" "perm")
- 						  (eq_attr "mode" "V8SF,V4DF,TI,OI")))
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_permi2_ymm" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm2")
- 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpux4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_permi2_zmm" 16
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm2")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpux16")
- 
- (define_insn_reservation "c86_4g_m7_avx512_permi2_ymm_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm2")
- 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_permi2_zmm_load" 23
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm2")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux16")
- 
- (define_insn_reservation "c86_4g_m7_avx512_perm_zmm_imm" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				     (and (match_operand 2 "immediate_operand")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpux4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_perm_zmm_imm_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				     (and (match_operand 2 "immediate_operand")
- 					  (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpux4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_perm_zmm_noimm" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				     (and (match_operand 2 "nonimmediate_operand")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpux8")
- 
- (define_insn_reservation "c86_4g_m7_sse_perm_zmm_noimm_load" 15
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "perm")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				     (and (match_operand 2 "nonimmediate_operand")
- 					 (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux8")
- 
- ;; VINSERT
- (define_insn_reservation "c86_4g_m7_avx512_insertx_ymm" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
- 				     (and (eq_attr "prefix" "evex")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_insertx_ymem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
- 				     (and (eq_attr "prefix" "evex")
- 					  (eq_attr "memory" "load,both"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmm" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
- 					 (match_operand 2 "register_operand"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmem" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
- 					  (match_operand 2 "memory_operand"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_insertx_zymm" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==32")
- 					  (match_operand 2 "register_operand"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_insertx_zymem" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==32")
- 					  (match_operand 2 "memory_operand"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_insertx_ymm" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				     (and (eq_attr "prefix" "!evex")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu0*2")
- 
- (define_insn_reservation "c86_4g_m7_avx_insertx_ymem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1")
- 				   (and (eq_attr "c86_attr" "insertx")
- 				     (and (eq_attr "prefix" "!evex")
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0*2")
- 
- ;; SHUF/MULTISHIFTQB
- (define_insn_reservation "c86_4g_m7_avx512_shuf_xymm" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "shufx")
- 				     (and (not (eq_attr "mode" "V8DF,V16SF,XI"))
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_shuf_zmm" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "shufx")
- 				     (and (eq_attr "mode" "V8DF,V16SF,XI")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_0_2x4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_shuf_xymem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "shufx")
- 				     (and (not (eq_attr "mode" "V8DF,V16SF,XI"))
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_shuf_zmem" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "shufx")
- 				     (and (eq_attr "mode" "V8DF,V16SF,XI")
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4")
- 
- ;; SSELOGIC
- (define_insn_reservation "c86_4g_m7_sselogic_xymm" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1")
- 				   (and (eq_attr "c86_attr" "sselogic")
- 					 (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_sselogic_xymm_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1")
- 				   (and (eq_attr "c86_attr" "sselogic")
- 					 (eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- ;; CMPESTR
- (define_insn_reservation "c86_4g_m7_avx512_cmpestr" 6
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "cmpestr")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpux6")
- 
- (define_insn_reservation "c86_4g_m7_avx512_cmpestr_load" 13
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog")
- 				   (and (eq_attr "c86_attr" "cmpestr")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux6")
- 
- ;; SSELOG
- (define_insn_reservation "c86_4g_m7_avx512_log" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1")
- 				   (and (eq_attr "c86_attr" "other")
- 					  (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_log_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1")
- 				   (and (eq_attr "c86_attr" "other")
- 					 (eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- ;; SSELOG1
- ;; VDBPSADBW
- (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_xymm" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "mode" "OI,TI")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_xymem" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "mode" "OI,TI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_zmm" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "mode" "XI")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_zmem" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "mode" "XI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3x2")
- 
- ;; ABS
- (define_insn_reservation "c86_4g_m7_avx512_abs" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1,sse")
- 				   (and (eq_attr "c86_attr" "abs")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx512_abs_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1,sse")
- 				   (and (eq_attr "c86_attr" "abs")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load,both")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu")
- 
- ;; SIGN
- (define_insn_reservation "c86_4g_m7_avx_sign" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "sign")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_sign_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "sign")
- 					(eq_attr "memory" "!none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
- 
- ;; BLEND/ABS/AES
- (define_insn_reservation "c86_4g_m7_avx_blend" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "abs,blend,aes")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx_blend_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "abs,blend,aes")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx512_aes" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1,ssecvt,sse")
- 				   (and (eq_attr "c86_attr" "aes")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_aes_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1,ssecvt,sse")
- 				   (and (eq_attr "c86_attr" "aes")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_aes" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "aes")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx_aes_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1")
- 				   (and (eq_attr "c86_attr" "aes")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- ;; EXTR
- (define_insn_reservation "c86_4g_m7_extr" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1,sselog,mmxcvt")
- 				   (and (eq_attr "c86_attr" "extr")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_extr_store" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sselog1,sselog,mmxcvt")
- 				   (and (eq_attr "c86_attr" "extr")
- 					(eq_attr "memory" "store"))))
- 			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
- 
- ;; SSECOMI
- (define_insn_reservation "c86_4g_m7_avx_ssecomi_comi" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (and (eq_attr "prefix_extra" "0")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecomi_comi_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (and (eq_attr "prefix_extra" "0")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecomi_test" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (and (eq_attr "prefix_extra" "1")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecomi_test_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecomi")
- 				   (and (eq_attr "prefix_extra" "1")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
- 
- ;; SSEIMUL
- (define_insn_reservation "c86_4g_m7_avx512_imul" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "prefix" "evex")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_imul_mem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "prefix" "evex")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx_imul" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "prefix" "!evex")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_imul_mem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseimul")
- 				   (and (eq_attr "prefix" "!evex")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
- 
- ;; SSEMOV
- (define_insn_reservation "c86_4g_m7_avx512_mov_vmov" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov,sseiadd")
- 				    (and (eq_attr "c86_attr" "other,blend,maxmin")
- 					 (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mov_vmov_store" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "other")
- 					 (eq_attr "memory" "store"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mov_vmov_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov,sseiadd")
- 				   (and (eq_attr "c86_attr" "other,blend,maxmin")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vpmovx_y" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				    (and (eq_attr "prefix" "evex")
- 				     (and (eq_attr "mode" "OI,V8SF,V4DF")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vpmovx_y_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov,sselog1")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				    (and (eq_attr "prefix" "evex")
- 				     (and (eq_attr "mode" "OI,V8SF,V4DF")
- 					  (eq_attr "memory" "load,both"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu_0_2x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vpmovx_z" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				     (and (eq_attr "mode" "XI")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vpmovx_z_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				     (and (eq_attr "mode" "XI")
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vpmovx_x" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				    (and (eq_attr "prefix" "evex")
- 				     (and (eq_attr "mode" "TI,SI")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_vpmovx_x_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				    (and (eq_attr "prefix" "evex")
- 				     (and (eq_attr "mode" "TI,SI")
- 					  (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_vpmovx_xx" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
- 
- (define_insn_reservation "c86_4g_m7_avx_vpmovx_xx_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "vpmovx")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "load,both")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
- 
- ;; EXPAND
- (define_insn_reservation "c86_4g_m7_avx512_expand" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "expand,compress")
- 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_expand_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "expand,compress")
- 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_expand_z" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "expand,compress")
- 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_expand_z_load" 17
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "expand,compress")
- 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
- 
- ;; MOVNT
- (define_insn_reservation "c86_4g_m7_avx512_movnt_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "movnt")
- 				   (and (eq_attr "mode" "XI,V16SF,V8DF")
- 					(eq_attr "memory" "load")))))
- 			 "c86-4g-m7-double,c86-4g-m7-load")
- 
- (define_insn_reservation "c86_4g_m7_avx512_movnt_store" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "movnt")
- 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
- 					 (eq_attr "memory" "store")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1*2")
- 
- (define_insn_reservation "c86_4g_m7_sse_movnt_store" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov,mmxmov")
- 				   (and (eq_attr "c86_attr" "movnt")
- 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
- 					 (eq_attr "memory" "!none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_sse_movnt" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "movnt")
- 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- ;; BLENDV
- (define_insn_reservation "c86_4g_m7_avx512_blendv" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "blendv")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx512_blendv_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov")
- 				   (and (eq_attr "c86_attr" "blendv")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- ;; SSEMOV2
- (define_insn_reservation "c86_4g_m7_sse_mov2" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov2")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_sse_mov2_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemov2")
- 				   (eq_attr "memory" "!none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- ;; SSEISHFT
- (define_insn_reservation "c86_4g_m7_avx512_sseishft_aligr" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseishft")
- 				   (and (eq_attr "prefix_extra" "1")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseishft_aligr_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseishft")
- 				   (and (eq_attr "prefix_extra" "1")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseishft_vshift" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseishft")
- 				   (and (eq_attr "prefix_extra" "!1")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseishft_vshift_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseishft")
- 				   (and (eq_attr "prefix_extra" "!1")
- 					(eq_attr "memory" "!none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- 
- ;; SSEADD
- (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sse")
- 				   (and (eq_attr "c86_attr" "maxmin")
- 				    (and (eq_attr "prefix" "evex")
- 				      (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sse")
- 				   (and (eq_attr "c86_attr" "maxmin")
- 				    (and (eq_attr "prefix" "evex")
- 				      (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseadd_maxmin" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sse")
- 				   (and (eq_attr "c86_attr" "maxmin")
- 				    (and (eq_attr "prefix" "vex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseadd_maxmin_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sse")
- 				   (and (eq_attr "c86_attr" "maxmin")
- 				    (and (eq_attr "prefix" "vex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseadd_maxmin" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sse")
- 				   (and (eq_attr "c86_attr" "maxmin")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseadd_maxmin_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sse")
- 				   (and (eq_attr "c86_attr" "maxmin")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
- 
- ;; SUB/ADD
- (define_insn_reservation "c86_4g_m7_avx512_sseadd" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd")
- 				   (and (eq_attr "c86_attr" "other")
- 					  (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseadd_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd")
- 				   (and (eq_attr "c86_attr" "other")
- 					 (eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- ;; HADD/HSUB
- (define_insn_reservation "c86_4g_m7_avx_sseadd_hplus" 7
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sseadd1")
- 				   (and (eq_attr "c86_attr" "hplus")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-vector")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseadd_hplus_load" 14
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseadd,sseadd1")
- 				   (and (eq_attr "c86_attr" "hplus")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load")
- 
- ;; SSEIADD
- (define_insn_reservation "c86_4g_m7_avx512_sseiadd_madd" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "sadbw,madd")
- 					(and (ior (eq_attr "prefix" "evex")
- 						  (eq_attr "mode" "XI"))
- 					     (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseiadd_madd_mem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "sadbw,madd")
- 					(and (ior (eq_attr "prefix" "evex")
- 						  (eq_attr "mode" "XI"))
- 					     (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseiadd_sadbw" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "prefix" "vex,maybe_evex")
- 				     (and (eq_attr "mode" "TI,OI")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseiadd_sadbw_mem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "prefix" "vex,maybe_evex")
- 				     (and (eq_attr "mode" "TI,OI")
- 					  (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseiadd_sadbw" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseiadd_sadbw_mem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "sadbw")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseiadd_madd" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "madd")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu0")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseiadd_madd_mem" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "madd")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0")
- 
- ;; AVG
- (define_insn_reservation "c86_4g_m7_avx512_sseiadd_avg" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "avg")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sseiadd_avg_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd")
- 				   (and (eq_attr "c86_attr" "avg")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseiadd_hplus" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd,sseiadd1")
- 				   (and (eq_attr "c86_attr" "hplus")
- 				    (and (eq_attr "prefix" "vex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector")
- 
- (define_insn_reservation "c86_4g_m7_avx_sseiadd_hplus_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd,sseiadd1")
- 				   (and (eq_attr "c86_attr" "hplus")
- 				    (and (eq_attr "prefix" "vex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseiadd_hplus" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd,sseiadd1")
- 				   (and (eq_attr "c86_attr" "hplus")
- 				    (and (eq_attr "prefix" "orig")
- 				     (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpux2")
- 
- (define_insn_reservation "c86_4g_m7_sse_sseiadd_hplus_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sseiadd,sseiadd1")
- 				   (and (eq_attr "c86_attr" "hplus")
- 				    (and (eq_attr "prefix" "orig")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux2")
- 
- ;; SSEMUL
- (define_insn_reservation "c86_4g_m7_avx512_ssemul" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemul")
- 				   (eq_attr "memory" "none")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssemul_load" 10
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemul")
- 				   (eq_attr "memory" "load")))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- ;; SSEDIV
- (define_insn_reservation "c86_4g_m7_avx512_ssediv_x" 13
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x8")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssediv_xmem" 20
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x8")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssediv_y" 13
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V8SF,V4DF")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*8")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssediv_ymem" 20
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V8SF,V4DF")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*8")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssediv_z" 24
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*20")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssediv_zmem" 31
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssediv")
- 				   (and (eq_attr "mode" "V16SF,V8DF")
- 					 (eq_attr "memory" "load"))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*20")
- 
- ;; SSECMP
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "mode" "V2DF,V4DF,V8SF,V4SF,SF,DF")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "mode" "V2DF,V4DF,V8SF,V4SF,SF,DF")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_z" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				     (and (eq_attr "c86_attr" "other")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_z_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
- 				     (and (eq_attr "c86_attr" "other")
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "mode" "TI,OI")
- 				     (and (eq_attr "c86_attr" "other")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "mode" "TI,OI")
- 				     (and (eq_attr "c86_attr" "other")
- 					  (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_z" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "mode" "XI")
- 				     (and (eq_attr "c86_attr" "other,ptest")
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_z_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "mode" "XI")
- 				     (and (eq_attr "c86_attr" "other,ptest")
- 					  (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3x2")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecmp_vp" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "!evex")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecmp_vp_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				   (and (eq_attr "prefix" "!evex")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
- 
- ;; VPTEST
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_test" 6
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				    (and (eq_attr "mode" "TI,OI")
- 				     (and (eq_attr "c86_attr" "ptest")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecmp_test_load" 13
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecmp")
- 				    (and (eq_attr "mode" "TI,OI")
- 				     (and (eq_attr "c86_attr" "ptest")
- 					  (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
- 
- ;; SSECVT
- (define_insn_reservation "c86_4g_m7_avx512_ssecvt_xy" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "c86_attr" "other")
- 				    (and (eq_attr "prefix" "evex")
- 				     (and (eq_attr "mode" "TI,V4SF,V2DF,OI,V8SF,V4DF")
- 				      (and (not (ior (match_operand:V8DI 1 "register_operand")
- 						     (match_operand:V8DF 1 "register_operand")))
- 					   (eq_attr "memory" "none")))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecvt_xy_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "prefix" "evex")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (eq_attr "mode" "TI,V4SF,V2DF,OI,V8SF,V4DF")
- 				      (and (not (ior (match_operand:V8DI 1 "register_operand")
- 						     (match_operand:V8DF 1 "register_operand")))
- 					   (eq_attr "memory" "!none")))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecvt_y_z" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "OI,V8SF,V4DF")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (ior (match_operand:V8DI 1 "register_operand")
- 					       (match_operand:V8DF 1 "register_operand"))
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecvt_y_z_load" 15
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "OI,V8SF,V4DF")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (ior (match_operand:V8DI 1 "memory_operand")
- 					       (match_operand:V8DF 1 "memory_operand"))
- 					  (eq_attr "memory" "!none"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecvt_z" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "c86_attr" "other")
- 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_ssecvt_z_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "c86_attr" "other")
- 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
- 					 (eq_attr "memory" "!none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecvt" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "prefix" "!evex")
- 				     (and (eq_attr "mmx_isa" "base")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
- 
- (define_insn_reservation "c86_4g_m7_avx_ssecvt_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "prefix" "!evex")
- 				    (and (eq_attr "mmx_isa" "base")
- 					 (eq_attr "memory" "!none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
- 
- ;; CVTPI
- (define_insn_reservation "c86_4g_m7_sse_ssecvt_pspi" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "SF,DI")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_sse_ssecvt_pspi_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (eq_attr "mode" "SF,DI")
- 					 (eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
- 
- (define_insn_reservation "c86_4g_m7_sse_ssecvt_pi" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				    (and (not (eq_attr "mode" "SF,DI"))
- 				     (and (eq_attr "mmx_isa" "native")
- 					  (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_sse_ssecvt_pi_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssecvt")
- 				   (and (not (eq_attr "mode" "SF,DI"))
- 				    (and (eq_attr "mmx_isa" "native")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
- 
- ;; SSEMULADD
- (define_insn_reservation "c86_4g_m7_avx512_muladd" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemuladd")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "none"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_muladd_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemuladd")
- 				   (and (eq_attr "c86_attr" "other")
- 					(eq_attr "memory" "load"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_muladd_madd" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemuladd,sse")
- 				   (and (eq_attr "c86_attr" "madd,rcp")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_muladd_madd_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "ssemuladd,sse")
- 				   (and (eq_attr "c86_attr" "madd,rcp")
- 				    (and (eq_attr "prefix" "evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- ;; SSE
- (define_insn_reservation "c86_4g_m7_avx512_sse_range" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (eq_attr "length_immediate" "!1")
- 				      (and (eq_attr "prefix" "evex")
- 				       (and (eq_attr "c86_decode" "direct")
- 					   (eq_attr "memory" "none")))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_range_load" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (eq_attr "length_immediate" "!1")
- 				      (and (eq_attr "c86_decode" "direct")
- 				       (and (eq_attr "prefix" "evex")
- 					    (eq_attr "memory" "load")))))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_x" 2
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_decode" "vector")
- 				    (and (eq_attr "mode" "TI")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_x_load" 9
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_decode" "vector")
- 				    (and (eq_attr "mode" "TI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3x2")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_y" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_decode" "vector")
- 				    (and (eq_attr "mode" "OI")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3x3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_y_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_decode" "vector")
- 				    (and (eq_attr "mode" "OI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3x3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_z" 8
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_decode" "vector")
- 				    (and (eq_attr "mode" "XI")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3x6")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_z_load" 15
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_decode" "vector")
- 				    (and (eq_attr "mode" "XI")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3x6")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_class" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_attr" "other")
- 				    (and (eq_attr "length_immediate" "1")
- 				     (and (not (eq_attr "mode" "V32HF,V16SF,V8DF"))
- 					  (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_class_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (eq_attr "length_immediate" "1")
- 				      (and (not (eq_attr "mode" "V32HF,V16SF,V8DF"))
- 					   (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_class_z" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (eq_attr "length_immediate" "1")
- 				      (and (eq_attr "mode" "V32HF,V16SF,V8DF")
- 					   (eq_attr "memory" "none"))))))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_class_z_load" 11
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				    (and (eq_attr "c86_attr" "other")
- 				     (and (eq_attr "length_immediate" "1")
- 				      (and (eq_attr "mode" "V32HF,V16SF,V8DF")
- 					   (eq_attr "memory" "load"))))))
- 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx_sse" 5
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_attr" "rcp,other")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
- 
- (define_insn_reservation "c86_4g_m7_avx_sse_load" 12
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "c86_attr" "rcp,other")
- 				    (and (eq_attr "prefix" "!evex")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
- 
- ;; SSE SQRT
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_x" 14
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "SF,V4SF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x9")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_xload" 21
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "SF,V4SF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x9")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_y" 14
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V8SF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*9")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_yload" 21
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V8SF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*9")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_z" 26
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V16SF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*22")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_zload" 33
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V16SF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*22")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_x" 20
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "DF,V2DF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x15")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_xload" 27
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "DF,V2DF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x15")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_y" 20
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V4DF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*15")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_yload" 27
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V4DF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*15")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_z" 38
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V8DF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "none")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*34")
- 
- (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_zload" 45
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "sse")
- 				   (and (eq_attr "mode" "V8DF")
- 				    (and (eq_attr "c86_attr" "sqrt")
- 					 (eq_attr "memory" "load")))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*34")
- 
- ;; MSKLOG/MSKMOV
- (define_insn_reservation "c86_4g_m7_avx512_msklog" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "msklog")
- 				   (eq_attr "c86_decode" "direct")))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_msklog_vector" 4
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "msklog")
- 				   (eq_attr "c86_decode" "vector")))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mskmov_reg_k" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mskmov")
- 				  (and (match_operand 0 "register_operand" "r")
- 				       (eq_attr "memory" "none"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mskmov_xy_k" 2
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mskmov")
- 				   (ior (match_operand:V2DI 0 "register_operand" "v")
- 					(match_operand:V4DI 0 "register_operand" "v"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mskmov_z_k" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mskmov")
- 				   (match_operand:V8DI 0 "register_operand" "v")))
- 			 "c86-4g-m7-vector,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_k" 1
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mskmov")
- 				  (and (match_operand 0 "register_operand" "k")
- 				       (match_operand 1 "register_operand" "k"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_reg" 3
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mskmov")
- 				  (and (match_operand 0 "register_operand" "k")
- 				       (match_operand 1 "register_operand" "r"))))
- 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_1_3")
- 
- (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_m" 9
- 			 (and (eq_attr "cpu" "c86_4g_m7")
- 			      (and (eq_attr "type" "mskmov")
- 				  (and (match_operand 0 "register_operand" "k")
- 				       (match_operand 1 "memory_operand"))))
- 			 "c86-4g-m7-direct,c86-4g-m7-load")
--- 0 ----
diff -Nrcpad gcc-17-20260621/gcc/config/i386/c86-4g-m7m8.md gcc-17-20260628/gcc/config/i386/c86-4g-m7m8.md
*** gcc-17-20260621/gcc/config/i386/c86-4g-m7m8.md	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/config/i386/c86-4g-m7m8.md	Sun Jun 28 22:32:07 2026
***************
*** 0 ****
--- 1,2097 ----
+ ;; Copyright (C) 2026 Free Software Foundation, Inc.
+ ;;
+ ;; This file is part of GCC.
+ ;;
+ ;; GCC is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation; either version 3, or (at your option)
+ ;; any later version.
+ ;;
+ ;; GCC is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ ;; GNU General Public License for more details.
+ ;;
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with GCC; see the file COPYING3.  If not see
+ ;; <http://www.gnu.org/licenses/>.
+ ;;
+ 
+ ;; HYGON c86-4g-m7/m8 Scheduling
+ ;; Modeling automatons for decoders, integer execution pipes,
+ ;; AGU pipes, branch, floating point execution, fp store units,
+ ;; integer and floating point dividers.  Split fpu1 and fpu3
+ ;; into their own automata to keep these units independent
+ ;; without increasing the main c86_4g_m7_fpu state space.
+ (define_automaton "c86_4g_m7, c86_4g_m7_ieu, c86_4g_m7_agu, c86_4g_m7_fpu02, c86_4g_m7_fpu13, c86_4g_m7_idiv, c86_4g_m7_fdiv")
+ 
+ ;; Decoders unit has 4 decoders and all of them can decode fast path
+ ;; and vector type instructions.
+ (define_cpu_unit "c86-4g-m7-decode0" "c86_4g_m7")
+ (define_cpu_unit "c86-4g-m7-decode1" "c86_4g_m7")
+ (define_cpu_unit "c86-4g-m7-decode2" "c86_4g_m7")
+ (define_cpu_unit "c86-4g-m7-decode3" "c86_4g_m7")
+ 
+ ;; Currently blocking all decoders for vector path instructions as
+ ;; they are dispatched separately as microcode sequence.
+ (define_reservation "c86-4g-m7-vector" "c86-4g-m7-decode0+c86-4g-m7-decode1+c86-4g-m7-decode2+c86-4g-m7-decode3")
+ 
+ ;; Direct instructions can be issued to any of the four decoders.
+ (define_reservation "c86-4g-m7-direct" "c86-4g-m7-decode0|c86-4g-m7-decode1|c86-4g-m7-decode2|c86-4g-m7-decode3")
+ 
+ ;; Fix me: Need to revisit this later to simulate fast path double behavior.
+ (define_reservation "c86-4g-m7-double" "c86-4g-m7-direct")
+ 
+ ;; Integer unit 4 ALU pipes.
+ (define_cpu_unit "c86-4g-m7-ieu0" "c86_4g_m7_ieu")
+ (define_cpu_unit "c86-4g-m7-ieu1" "c86_4g_m7_ieu")
+ (define_cpu_unit "c86-4g-m7-ieu2" "c86_4g_m7_ieu")
+ (define_cpu_unit "c86-4g-m7-ieu3" "c86_4g_m7_ieu")
+ 
+ ;; One separated integer divider.
+ (define_cpu_unit "c86-4g-m7-idiv" "c86_4g_m7_idiv")
+ 
+ ;; c86-4g-m7 has an additional branch unit.
+ (define_cpu_unit "c86-4g-m7-bru0" "c86_4g_m7_ieu")
+ (define_reservation "c86-4g-m7-ieu" "c86-4g-m7-ieu0|c86-4g-m7-ieu1|c86-4g-m7-ieu2|c86-4g-m7-ieu3")
+ 
+ ;; 3 AGU pipes in c86-4g-m7
+ (define_cpu_unit "c86-4g-m7-agu0" "c86_4g_m7_agu")
+ (define_cpu_unit "c86-4g-m7-agu1" "c86_4g_m7_agu")
+ (define_cpu_unit "c86-4g-m7-agu2" "c86_4g_m7_agu")
+ (define_reservation "c86-4g-m7-agu-reserve" "c86-4g-m7-agu0|c86-4g-m7-agu1|c86-4g-m7-agu2")
+ 
+ ;; Load is 4 cycles.  We do not model reservation of load unit.
+ (define_reservation "c86-4g-m7-load" "c86-4g-m7-agu-reserve")
+ (define_reservation "c86-4g-m7-store" "c86-4g-m7-agu-reserve")
+ 
+ ;; vectorpath (microcoded) instructions are single issue instructions.
+ ;; So, they occupy all the integer units.
+ (define_reservation "c86-4g-m7-ivector" "c86-4g-m7-ieu0+c86-4g-m7-ieu1
+ 					 +c86-4g-m7-ieu2+c86-4g-m7-ieu3+c86-4g-m7-bru0
+ 					 +c86-4g-m7-agu0+c86-4g-m7-agu1+c86-4g-m7-agu2")
+ 
+ ;; Floating point unit 4 FP pipes.
+ (define_cpu_unit "c86-4g-m7-fpu0" "c86_4g_m7_fpu02")
+ (define_cpu_unit "c86-4g-m7-fpu1" "c86_4g_m7_fpu13")
+ (define_cpu_unit "c86-4g-m7-fpu2" "c86_4g_m7_fpu02")
+ (define_cpu_unit "c86-4g-m7-fpu3" "c86_4g_m7_fpu13")
+ 
+ (define_reservation "c86-4g-m7-fpu" "c86-4g-m7-fpu0|c86-4g-m7-fpu1|c86-4g-m7-fpu2|c86-4g-m7-fpu3")
+ (define_reservation "c86-4g-m7-fpu_0_1" "c86-4g-m7-fpu0|c86-4g-m7-fpu1")
+ (define_reservation "c86-4g-m7-fpu_0_2" "c86-4g-m7-fpu0|c86-4g-m7-fpu2")
+ (define_reservation "c86-4g-m7-fpu_0_2x2" "c86-4g-m7-fpu0*2|c86-4g-m7-fpu2*2")
+ (define_reservation "c86-4g-m7-fpu_0_2x4" "c86-4g-m7-fpu0*4|c86-4g-m7-fpu2*4")
+ (define_reservation "c86-4g-m7-fpu_0_3" "c86-4g-m7-fpu0|c86-4g-m7-fpu3")
+ (define_reservation "c86-4g-m7-fpu_1_3" "c86-4g-m7-fpu1|c86-4g-m7-fpu3")
+ (define_reservation "c86-4g-m7-fpu_1_3x2" "c86-4g-m7-fpu1*2|c86-4g-m7-fpu3*2")
+ (define_reservation "c86-4g-m7-fpu_1_3x3" "c86-4g-m7-fpu1*3|c86-4g-m7-fpu3*3")
+ (define_reservation "c86-4g-m7-fpu_1_3x6" "c86-4g-m7-fpu1*6|c86-4g-m7-fpu3*6")
+ (define_reservation "c86-4g-m7-fpux2" "c86-4g-m7-fpu0*2|c86-4g-m7-fpu1*2|c86-4g-m7-fpu2*2|c86-4g-m7-fpu3*2")
+ (define_reservation "c86-4g-m7-fpux4" "c86-4g-m7-fpu0*4|c86-4g-m7-fpu1*4|c86-4g-m7-fpu2*4|c86-4g-m7-fpu3*4")
+ (define_reservation "c86-4g-m7-fpux8" "c86-4g-m7-fpu0*8|c86-4g-m7-fpu1*8|c86-4g-m7-fpu2*8|c86-4g-m7-fpu3*8")
+ (define_reservation "c86-4g-m7-fpux6" "c86-4g-m7-fpu0*6|c86-4g-m7-fpu1*6|c86-4g-m7-fpu2*6|c86-4g-m7-fpu3*6")
+ (define_reservation "c86-4g-m7-fpux16" "c86-4g-m7-fpu0*16|c86-4g-m7-fpu1*16|c86-4g-m7-fpu2*16|c86-4g-m7-fpu3*16")
+ (define_reservation "c86-4g-m7-fvector" "c86-4g-m7-fpu0+c86-4g-m7-fpu1
+ 					 +c86-4g-m7-fpu2+c86-4g-m7-fpu3
+ 					 +c86-4g-m7-agu0+c86-4g-m7-agu1+c86-4g-m7-agu2")
+ 
+ ;; Two FP dividers.
+ (define_cpu_unit "c86-4g-m7-fdiv1" "c86_4g_m7_fdiv")
+ (define_cpu_unit "c86-4g-m7-fdiv3" "c86_4g_m7_fdiv")
+ 
+ (define_reservation "c86-4g-m7-fp1fdiv1x4" "(c86-4g-m7-fpu1+c86-4g-m7-fdiv1)*4")
+ (define_reservation "c86-4g-m7-fp3fdiv3x4" "(c86-4g-m7-fpu3+c86-4g-m7-fdiv3)*4")
+ (define_reservation "c86-4g-m7-fdiv13" "(c86-4g-m7-fdiv1+c86-4g-m7-fdiv3)")
+ (define_reservation "c86-4g-m7-fp13div13" "(c86-4g-m7-fpu1+c86-4g-m7-fpu3+c86-4g-m7-fdiv1+c86-4g-m7-fdiv3)")
+ (define_reservation "c86-4g-m7-fp13div13x4" "c86-4g-m7-fp13div13*4")
+ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x8" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*8)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*8)")
+ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x9" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*9)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*9)")
+ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x11" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*11)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*11)")
+ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x15" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*15)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*15)")
+ (define_reservation "c86-4g-m7-fp1div1_fp3div3_x4x18" "(c86-4g-m7-fp1fdiv1x4,c86-4g-m7-fdiv1*18)|(c86-4g-m7-fp3fdiv3x4,c86-4g-m7-fdiv3*18)")
+ 
+ ;; IMOV/IMOVX
+ 
+ ;; Some reservations keep the historical "m7" naming, while their CPU
+ ;; attributes include both m7 and m8.
+ (define_insn_reservation "c86_4g_m7_imov_xchg" 1
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imov")
+ 				  (and (eq_attr "c86_decode" "vector")
+ 				       (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-vector")
+ 
+ (define_insn_reservation "c86_4g_m7_imov_xchg_load" 5
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imov")
+ 				  (and (eq_attr "c86_decode" "vector")
+ 				       (eq_attr "memory" "!none"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load")
+ 
+ (define_insn_reservation "c86_4g_m7_imovx_cwde" 2
+ 			(and (eq_attr "cpu" "c86_4g_m7")
+ 			     (and (eq_attr "type" "imovx")
+ 				  (and (eq_attr "c86_decode" "double")
+ 				       (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m8_imovx_cwde" 1
+ 			(and (eq_attr "cpu" "c86_4g_m8")
+ 			     (and (eq_attr "type" "imovx")
+ 				  (and (eq_attr "c86_decode" "double")
+ 				       (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_imov" 1
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imov,imovx")
+ 				  (and (eq_attr "c86_decode" "direct")
+ 				       (eq_attr "memory" "none"))))
+ 	     "c86-4g-m7-direct,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_imov_load" 5
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imov,imovx")
+ 				  (and (eq_attr "c86_decode" "!vector")
+ 				       (eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_imov_store" 1
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imov,imovx")
+ 				  (and (eq_attr "c86_decode" "!vector")
+ 				       (eq_attr "memory" "store"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-ieu")
+ 
+ ;; PUSH
+ (define_insn_reservation "c86_4g_m7_push" 1
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "push,sse")
+ 				  (eq_attr "memory" "store")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store")
+ 
+ (define_insn_reservation "c86_4g_m7_push_mem" 5
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 				 (and (eq_attr "type" "push")
+ 				  (eq_attr "memory" "both")))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-store")
+ 
+ ;; POP
+ (define_insn_reservation "c86_4g_m7_pop" 4
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "pop")
+ 				  (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load")
+ 
+ (define_insn_reservation "c86_4g_m7_pop_mem" 5
+ 	    (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 		 (and (eq_attr "type" "pop")
+ 		  (eq_attr "memory" "both")))
+ 	     "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store")
+ 
+ ;; IMUL/IMULX
+ (define_insn_reservation "c86_4g_m7_imul" 3
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imul,imulx")
+ 				  (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu1")
+ 
+ (define_insn_reservation "c86_4g_m7_imul_load" 7
+ 			(and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			     (and (eq_attr "type" "imul")
+ 				  (eq_attr "memory" "!none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu1")
+ 
+ ;; IDIV
+ (define_insn_reservation "c86_4g_m7_idiv" 7
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "!QI")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-ieu3,c86-4g-m7-idiv*7")
+ 
+ (define_insn_reservation "c86_4g_m7_idiv_QI" 6
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-ieu3,c86-4g-m7-idiv*6")
+ 
+ (define_insn_reservation "c86_4g_m7_idiv_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "!QI")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3,c86-4g-m7-idiv*7")
+ 
+ (define_insn_reservation "c86_4g_m7_idiv_QI_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "idiv")
+ 				   (and (eq_attr "mode" "QI")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-ieu3,c86-4g-m7-idiv*6")
+ 
+ ;; Integer/general Instructions
+ (define_insn_reservation "c86_4g_m7_insn" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu,negnot,rotate1,ishift1,test,incdec,icmp,
+ 						    rotate,rotatex,ishift,ishiftx,icmov")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_insn_load" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu,incdec,icmp,test,ishift,
+ 						    ishiftx,icmov,rotate,rotatex")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_insn_store" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ishift1,rotate1,rotate,incdec,
+ 						    alu,icmov,ishift,negnot,alu1")
+ 				   (eq_attr "memory" "store")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu,c86-4g-m7-store")
+ 
+ (define_insn_reservation "c86_4g_m7_insn2_store" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "icmp")
+ 				   (eq_attr "memory" "store")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu,c86-4g-m7-store")
+ 
+ (define_insn_reservation "c86_4g_m7_insn_both" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu,negnot,rotate1,ishift1,incdec,rotate,
+ 						    rotatex,ishift,ishiftx,icmov")
+ 				   (eq_attr "memory" "both")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu,c86-4g-m7-store")
+ 
+ (define_insn_reservation "c86_4g_m7_setcc" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "setcc")
+ 				   (eq_attr "memory" "none,unknown")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu0|c86-4g-m7-ieu3")
+ 
+ (define_insn_reservation "c86_4g_m7_setcc_load" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "setcc")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-ieu0|c86-4g-m7-ieu3")
+ 
+ (define_insn_reservation "c86_4g_m7_setcc_store" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "setcc")
+ 				   (eq_attr "memory" "store")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-ieu0|c86-4g-m7-ieu3")
+ 
+ ;; ALU1
+ (define_insn_reservation "c86_4g_m7_alu1_double" 2
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu1")
+ 				   (and (eq_attr "c86_decode" "double")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_alu1_double_load" 6
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu1")
+ 				   (and (eq_attr "c86_decode" "double")
+ 					(eq_attr "memory" "both"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_alu1_vector" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu1")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-ivector*3")
+ 
+ (define_insn_reservation "c86_4g_m7_alu1_vector_load" 7
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu1")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 					(eq_attr "memory" "both"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ivector*3")
+ 
+ (define_insn_reservation "c86_4g_m7_alu1_direct" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu1")
+ 				   (and (eq_attr "c86_decode" "direct")
+ 					(eq_attr "memory" "none,unknown"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
+ 
+ (define_insn_reservation "c86_4g_m7_alu1_direct_load" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "alu1")
+ 				   (and (eq_attr "c86_decode" "direct")
+ 					(eq_attr "memory" "both"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-ieu")
+ 
+ ;; CALL/CALLV
+ (define_insn_reservation "c86_4g_m7_call" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (eq_attr "type" "call,callv"))
+ 			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-bru0")
+ 
+ ;; IBR
+ (define_insn_reservation "c86_4g_m7_branch" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ibr")
+ 				   (eq_attr "memory" "none")))
+ 			  "c86-4g-m7-direct,c86-4g-m7-bru0")
+ 
+ (define_insn_reservation "c86_4g_m7_branch_load" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ibr")
+ 				   (eq_attr "memory" "load")))
+ 			  "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-bru0")
+ 
+ ;; LEA
+ (define_insn_reservation "c86_4g_m7_lea" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (eq_attr "type" "lea"))
+ 			 "c86-4g-m7-direct,c86-4g-m7-ieu")
+ 
+ ;; LEAVE
+ (define_insn_reservation "c86_4g_m7_leave" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (eq_attr "type" "leave"))
+ 			 "c86-4g-m7-double,c86-4g-m7-ieu,c86-4g-m7-store")
+ 
+ ;; STR
+ (define_insn_reservation "c86_4g_m7_str" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "str")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-vector,c86-4g-m7-ivector*3")
+ 
+ (define_insn_reservation "c86_4g_m7_str_load" 7
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "str")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-ivector*3")
+ 
+ 
+ (define_insn_reservation "c86_4g_m7_ieu_vector" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "other,multi")
+ 				   (and (eq_attr "unit" "!i387")
+ 				       (eq_attr "memory" "none,unknown"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-ivector*5")
+ 
+ (define_insn_reservation "c86_4g_m7_ieu_vector_load" 9
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "other,multi")
+ 				   (and (eq_attr "unit" "!i387")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-ivector*5")
+ 
+ ;; SSEINS
+ (define_insn_reservation "c86_4g_m7_sse_insertimm" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseins")
+ 				   (and (eq_attr "memory" "none")
+ 					(eq_attr "length_immediate" "2"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_3,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_insert" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseins")
+ 				   (and (eq_attr "memory" "none")
+ 					(eq_attr "length_immediate" "!2"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1*2")
+ 
+ ;; FCMOV
+ (define_insn_reservation "c86_4g_m7_fp_cmov" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (eq_attr "type" "fcmov"))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fvector*3")
+ 
+ ;; FLD
+ (define_insn_reservation "c86_4g_m7_fp_mov_direct_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "c86_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
+ 
+ ;; FST
+ (define_insn_reservation "c86_4g_m7_fp_mov_direct_store" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "c86_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "store"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1,c86-4g-m7-store")
+ 
+ ;; FILD
+ (define_insn_reservation "c86_4g_m7_fp_mov_double_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "c86_decode" "double")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
+ 
+ ;; FIST
+ (define_insn_reservation "c86_4g_m7_fp_mov_double_store" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "c86_decode" "double")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "store"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-store")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_mov_direct" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "c86_decode" "direct")
+ 				   (and (eq_attr "type" "fmov")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
+ 
+ ;; FSQRT
+ (define_insn_reservation "c86_4g_m7_fp_sqrt" 22
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fpspc")
+ 				   (eq_attr "c86_attr" "sqrt")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x18")
+ 
+ ;; FPSPC
+ (define_insn_reservation "c86_4g_m7_fp_spc_direct" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fpspc")
+ 				   (and (eq_attr "c86_decode" "direct")
+ 				    (and (eq_attr "c86_attr" "other")
+ 					 (eq_attr "memory" "store")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu3")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_spc" 6
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fpspc")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fvector*6")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_op_mul" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fop,fmul")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_op_mul_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fop,fmul")
+ 				   (and (eq_attr "fp_int_src" "false")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_op_imul_load" 16
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fmul")
+ 				   (and (eq_attr "fp_int_src" "true")
+ 					(eq_attr "memory" "!none"))))
+ 			"c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu0,c86-4g-m7-fpu_0_2")
+ 
+ ;; FDIV
+ (define_insn_reservation "c86_4g_m7_fp_div" 15
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x11")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_div_load" 22
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (and (eq_attr "fp_int_src" "false")
+ 					(eq_attr "memory" "!none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x11")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_idiv_load" 26
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fdiv")
+ 				   (and (eq_attr "fp_int_src" "true")
+ 					(eq_attr "memory" "!none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1*4,c86-4g-m7-fp1div1_fp3div3_x4x11")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_fsgn" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (eq_attr "type" "fsgn"))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ ;; FCMP
+ (define_insn_reservation "c86_4g_m7_fp_fcmp" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu0,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_fp_fcmp_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "fcmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu0,c86-4g-m7-fpu1")
+ 
+ ;; MMX
+ (define_insn_reservation "c86_4g_m7_fp_mmx" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (eq_attr "type" "mmx"))
+ 			 "c86-4g-m7-direct")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_add_cmp" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxadd,mmxcmp")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_add_cmp_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxadd,mmxcmp")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_cvt" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxcvt")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_cvt_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxcvt")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_shift" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxshft")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_shift_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxshft")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_shift_avg" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxshft")
+ 				   (and (eq_attr "c86_attr" "avg")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_shift_avg_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxshft")
+ 				   (and (eq_attr "c86_attr" "avg")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ ;; SADBW
+ (define_insn_reservation "c86_4g_m7_mmx_shift_sadbw" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxshft")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu0")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_shift_sadbw_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxshft")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_mov" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_mov_store" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "store"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_mov_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxmov")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_mul" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxmul")
+ 				   (eq_attr "memory" "none")))
+ 			  "c86-4g-m7-direct,c86-4g-m7-fpu0")
+ 
+ (define_insn_reservation "c86_4g_m7_mmx_mul_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mmxmul")
+ 				   (eq_attr "memory" "load")))
+ 			  "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0")
+ 
+ ;; PINSR
+ (define_insn_reservation "c86_4g_m7_sse_pinsr_reg" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,mmxcvt")
+ 				   (and (eq_attr "c86_attr" "insr")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_pinsr_reg_load" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,mmxcvt")
+ 				   (and (eq_attr "c86_attr" "insr")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_vpinsr_reg" 2
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "insr")
+ 				     (and (eq_attr "prefix" "!orig")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_vpinsr_reg_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "insr")
+ 				     (and (eq_attr "prefix" "!orig")
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ ;; PERM
+ (define_insn_reservation "c86_4g_m7_avx512_perm_xmm" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (ior (and (eq_attr "c86_attr" "perm2")
+ 						  (eq_attr "mode" "V4SF,V2DF,TI"))
+ 					     (and (eq_attr "c86_attr" "perm")
+ 						  (eq_attr "mode" "V8SF,V4DF,TI,OI")))
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_perm_xmm_opload" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (ior (and (eq_attr "c86_attr" "perm2")
+ 						  (eq_attr "mode" "V4SF,V2DF,TI"))
+ 					     (and (eq_attr "c86_attr" "perm")
+ 						  (eq_attr "mode" "V8SF,V4DF,TI,OI")))
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_permi2_ymm" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm2")
+ 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpux4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_permi2_zmm" 16
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm2")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpux16")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_permi2_ymm_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm2")
+ 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_permi2_zmm_load" 23
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm2")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux16")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_perm_zmm_imm" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				     (and (match_operand 2 "immediate_operand")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpux4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_perm_zmm_imm_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				     (and (match_operand 2 "immediate_operand")
+ 					  (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpux4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_perm_zmm_noimm" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				     (and (match_operand 2 "nonimmediate_operand")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpux8")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_perm_zmm_noimm_load" 15
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "perm")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				     (and (match_operand 2 "nonimmediate_operand")
+ 					 (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux8")
+ 
+ ;; VINSERT
+ (define_insn_reservation "c86_4g_m7_avx512_insertx_ymm" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
+ 				     (and (eq_attr "prefix" "evex")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_insertx_ymem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				    (and (eq_attr "mode" "V8SF,V4DF,OI")
+ 				     (and (eq_attr "prefix" "evex")
+ 					  (eq_attr "memory" "load,both"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmm" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
+ 					 (match_operand 2 "register_operand"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_insertx_zxmem" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==16")
+ 					  (match_operand 2 "memory_operand"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_insertx_zymm" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==32")
+ 					  (match_operand 2 "register_operand"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_insertx_zymem" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				    (and (match_test "GET_MODE_SIZE (GET_MODE (operands[2]))==32")
+ 					  (match_operand 2 "memory_operand"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_insertx_ymm" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				     (and (eq_attr "prefix" "!evex")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu0*2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_insertx_ymem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (and (eq_attr "c86_attr" "insertx")
+ 				     (and (eq_attr "prefix" "!evex")
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0*2")
+ 
+ ;; SHUF/MULTISHIFTQB
+ (define_insn_reservation "c86_4g_m7_avx512_shuf_xymm" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "shufx")
+ 				     (and (not (eq_attr "mode" "V8DF,V16SF,XI"))
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_shuf_zmm" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "shufx")
+ 				     (and (eq_attr "mode" "V8DF,V16SF,XI")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_0_2x4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_shuf_xymem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "shufx")
+ 				     (and (not (eq_attr "mode" "V8DF,V16SF,XI"))
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_shuf_zmem" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "shufx")
+ 				     (and (eq_attr "mode" "V8DF,V16SF,XI")
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4")
+ 
+ ;; SSELOGIC
+ (define_insn_reservation "c86_4g_m7_sselogic_xymm" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (and (eq_attr "c86_attr" "sselogic")
+ 					 (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_sselogic_xymm_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1")
+ 				   (and (eq_attr "c86_attr" "sselogic")
+ 					 (eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ ;; CMPESTR
+ (define_insn_reservation "c86_4g_m7_avx512_cmpestr" 6
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "cmpestr")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpux6")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_cmpestr_load" 13
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog")
+ 				   (and (eq_attr "c86_attr" "cmpestr")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux6")
+ 
+ ;; SSELOG
+ (define_insn_reservation "c86_4g_m7_avx512_log" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					  (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_log_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog,sselog1,sseshuf,sseshuf1")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					 (eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ ;; SSELOG1
+ ;; VDBPSADBW
+ (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_xymm" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "mode" "OI,TI")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_xymem" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "mode" "OI,TI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_zmm" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "mode" "XI")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vdbpsadbw_zmem" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "mode" "XI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3x2")
+ 
+ ;; ABS
+ (define_insn_reservation "c86_4g_m7_avx512_abs" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1,sse")
+ 				   (and (eq_attr "c86_attr" "abs")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_abs_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1,sse")
+ 				   (and (eq_attr "c86_attr" "abs")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load,both")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu")
+ 
+ ;; SIGN
+ (define_insn_reservation "c86_4g_m7_avx_sign" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "sign")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sign_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "sign")
+ 					(eq_attr "memory" "!none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
+ 
+ ;; BLEND/ABS/AES
+ (define_insn_reservation "c86_4g_m7_avx_blend" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "abs,blend,aes")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_blend_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "abs,blend,aes")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_aes" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1,ssecvt,sse")
+ 				   (and (eq_attr "c86_attr" "aes")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_aes_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1,ssecvt,sse")
+ 				   (and (eq_attr "c86_attr" "aes")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_aes" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "aes")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_aes_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1")
+ 				   (and (eq_attr "c86_attr" "aes")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ ;; EXTR
+ (define_insn_reservation "c86_4g_m7_extr" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1,sselog,mmxcvt")
+ 				   (and (eq_attr "c86_attr" "extr")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_extr_store" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sselog1,sselog,mmxcvt")
+ 				   (and (eq_attr "c86_attr" "extr")
+ 					(eq_attr "memory" "store"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-store,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
+ 
+ ;; SSECOMI
+ (define_insn_reservation "c86_4g_m7_avx_ssecomi_comi" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (and (eq_attr "prefix_extra" "0")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecomi_comi_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (and (eq_attr "prefix_extra" "0")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecomi_test" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (and (eq_attr "prefix_extra" "1")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecomi_test_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecomi")
+ 				   (and (eq_attr "prefix_extra" "1")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
+ 
+ ;; SSEIMUL
+ (define_insn_reservation "c86_4g_m7_avx512_imul" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "prefix" "evex")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_imul_mem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "prefix" "evex")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_imul" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "prefix" "!evex")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_imul_mem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseimul")
+ 				   (and (eq_attr "prefix" "!evex")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
+ 
+ ;; SSEMOV
+ (define_insn_reservation "c86_4g_m7_avx512_mov_vmov" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov,sseiadd")
+ 				    (and (eq_attr "c86_attr" "other,blend,maxmin")
+ 					 (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mov_vmov_store" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "store"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mov_vmov_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov,sseiadd")
+ 				   (and (eq_attr "c86_attr" "other,blend,maxmin")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vpmovx_y" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				    (and (eq_attr "prefix" "evex")
+ 				     (and (eq_attr "mode" "OI,V8SF,V4DF")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vpmovx_y_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov,sselog1")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				    (and (eq_attr "prefix" "evex")
+ 				     (and (eq_attr "mode" "OI,V8SF,V4DF")
+ 					  (eq_attr "memory" "load,both"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu_0_2x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vpmovx_z" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				     (and (eq_attr "mode" "XI")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2x4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vpmovx_z_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				     (and (eq_attr "mode" "XI")
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2x4")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vpmovx_x" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				    (and (eq_attr "prefix" "evex")
+ 				     (and (eq_attr "mode" "TI,SI")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_vpmovx_x_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				    (and (eq_attr "prefix" "evex")
+ 				     (and (eq_attr "mode" "TI,SI")
+ 					  (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_vpmovx_xx" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_vpmovx_xx_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "vpmovx")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "load,both")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-store,c86-4g-m7-fpu1|c86-4g-m7-fpu2")
+ 
+ ;; EXPAND
+ (define_insn_reservation "c86_4g_m7_avx512_expand" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "expand,compress")
+ 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_expand_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "expand,compress")
+ 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_expand_z" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "expand,compress")
+ 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_expand_z_load" 17
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "expand,compress")
+ 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu3,c86-4g-m7-fpu_0_3")
+ 
+ ;; MOVNT
+ (define_insn_reservation "c86_4g_m7_avx512_movnt_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "movnt")
+ 				   (and (eq_attr "mode" "XI,V16SF,V8DF")
+ 					(eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_movnt_store" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "movnt")
+ 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
+ 					 (eq_attr "memory" "store")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1*2")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_movnt_store" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov,mmxmov")
+ 				   (and (eq_attr "c86_attr" "movnt")
+ 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
+ 					 (eq_attr "memory" "!none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-store,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_movnt" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "movnt")
+ 				    (and (not (eq_attr "mode" "XI,V16SF,V8DF"))
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ ;; BLENDV
+ (define_insn_reservation "c86_4g_m7_avx512_blendv" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "blendv")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_blendv_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov")
+ 				   (and (eq_attr "c86_attr" "blendv")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ ;; SSEMOV2
+ (define_insn_reservation "c86_4g_m7_sse_mov2" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov2")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_mov2_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemov2")
+ 				   (eq_attr "memory" "!none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ ;; SSEISHFT
+ (define_insn_reservation "c86_4g_m7_avx512_sseishft_aligr" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseishft")
+ 				   (and (eq_attr "prefix_extra" "1")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseishft_aligr_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseishft")
+ 				   (and (eq_attr "prefix_extra" "1")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseishft_vshift" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseishft")
+ 				   (and (eq_attr "prefix_extra" "!1")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseishft_vshift_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseishft")
+ 				   (and (eq_attr "prefix_extra" "!1")
+ 					(eq_attr "memory" "!none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ 
+ ;; SSEADD
+ (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sse")
+ 				   (and (eq_attr "c86_attr" "maxmin")
+ 				    (and (eq_attr "prefix" "evex")
+ 				         (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseadd_maxmin_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sse")
+ 				   (and (eq_attr "c86_attr" "maxmin")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseadd_maxmin" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sse")
+ 				   (and (eq_attr "c86_attr" "maxmin")
+ 				    (and (eq_attr "prefix" "vex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseadd_maxmin_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sse")
+ 				   (and (eq_attr "c86_attr" "maxmin")
+ 				    (and (eq_attr "prefix" "vex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseadd_maxmin" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sse")
+ 				   (and (eq_attr "c86_attr" "maxmin")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseadd_maxmin_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sse")
+ 				   (and (eq_attr "c86_attr" "maxmin")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
+ 
+ ;; SUB/ADD
+ (define_insn_reservation "c86_4g_m7_avx512_sseadd" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseadd_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ ;; HADD/HSUB
+ (define_insn_reservation "c86_4g_m7_avx_sseadd_hplus" 7
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sseadd1")
+ 				   (and (eq_attr "c86_attr" "hplus")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-vector")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseadd_hplus_load" 14
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseadd,sseadd1")
+ 				   (and (eq_attr "c86_attr" "hplus")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load")
+ 
+ ;; SSEIADD
+ (define_insn_reservation "c86_4g_m7_avx512_sseiadd_madd" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "sadbw,madd")
+ 					(and (ior (eq_attr "prefix" "evex")
+ 						  (eq_attr "mode" "XI"))
+ 					     (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseiadd_madd_mem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "sadbw,madd")
+ 					(and (ior (eq_attr "prefix" "evex")
+ 						  (eq_attr "mode" "XI"))
+ 					     (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseiadd_sadbw" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "prefix" "vex,maybe_evex")
+ 				     (and (eq_attr "mode" "TI,OI")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseiadd_sadbw_mem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "prefix" "vex,maybe_evex")
+ 				     (and (eq_attr "mode" "TI,OI")
+ 					  (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseiadd_sadbw" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseiadd_sadbw_mem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "sadbw")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_3")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseiadd_madd" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "madd")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu0")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseiadd_madd_mem" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "madd")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu0")
+ 
+ ;; AVG
+ (define_insn_reservation "c86_4g_m7_avx512_sseiadd_avg" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "avg")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sseiadd_avg_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd")
+ 				   (and (eq_attr "c86_attr" "avg")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseiadd_hplus" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd,sseiadd1")
+ 				   (and (eq_attr "c86_attr" "hplus")
+ 				    (and (eq_attr "prefix" "vex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sseiadd_hplus_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd,sseiadd1")
+ 				   (and (eq_attr "c86_attr" "hplus")
+ 				    (and (eq_attr "prefix" "vex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseiadd_hplus" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd,sseiadd1")
+ 				   (and (eq_attr "c86_attr" "hplus")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpux2")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_sseiadd_hplus_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sseiadd,sseiadd1")
+ 				   (and (eq_attr "c86_attr" "hplus")
+ 				    (and (eq_attr "prefix" "orig")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpux2")
+ 
+ ;; SSEMUL
+ (define_insn_reservation "c86_4g_m7_avx512_ssemul" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssemul_load" 10
+ 			 (and (eq_attr "cpu" "c86_4g_m7")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m8_avx512_ssemul" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (eq_attr "memory" "none")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m8_avx512_ssemul_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemul")
+ 				   (eq_attr "memory" "load")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ ;; SSEDIV
+ (define_insn_reservation "c86_4g_m7_avx512_ssediv_x" 13
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x8")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssediv_xmem" 20
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "SF,DF,V4SF,V2DF")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x8")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssediv_y" 13
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8SF,V4DF")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*8")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssediv_ymem" 20
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V8SF,V4DF")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*8")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssediv_z" 24
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*20")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssediv_zmem" 31
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssediv")
+ 				   (and (eq_attr "mode" "V16SF,V8DF")
+ 					 (eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*20")
+ 
+ ;; SSECMP
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "mode" "V2DF,V4DF,V8SF,V4SF,SF,DF")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "mode" "V2DF,V4DF,V8SF,V4SF,SF,DF")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_z" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				     (and (eq_attr "c86_attr" "other")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_z_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				    (and (eq_attr "mode" "V16SF,V8DF,XI")
+ 				     (and (eq_attr "c86_attr" "other")
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_0_2,c86-4g-m7-fpu_1_3x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "mode" "TI,OI")
+ 				     (and (eq_attr "c86_attr" "other")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "mode" "TI,OI")
+ 				     (and (eq_attr "c86_attr" "other")
+ 					  (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_z" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "mode" "XI")
+ 				     (and (eq_attr "c86_attr" "other,ptest")
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_vp_z_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "mode" "XI")
+ 				     (and (eq_attr "c86_attr" "other,ptest")
+ 					  (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecmp_vp" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "!evex")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecmp_vp_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				   (and (eq_attr "prefix" "!evex")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu")
+ 
+ ;; VPTEST
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_test" 6
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				    (and (eq_attr "mode" "TI,OI")
+ 				     (and (eq_attr "c86_attr" "ptest")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecmp_test_load" 13
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecmp")
+ 				    (and (eq_attr "mode" "TI,OI")
+ 				     (and (eq_attr "c86_attr" "ptest")
+ 					  (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu,c86-4g-m7-fpu_1_3")
+ 
+ ;; SSECVT
+ (define_insn_reservation "c86_4g_m7_avx512_ssecvt_xy" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "c86_attr" "other")
+ 				    (and (eq_attr "prefix" "evex")
+ 				     (and (eq_attr "mode" "TI,V4SF,V2DF,OI,V8SF,V4DF")
+ 				      (and (not (ior (match_operand:V8DI 1 "register_operand")
+ 						     (match_operand:V8DF 1 "register_operand")))
+ 					   (eq_attr "memory" "none")))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecvt_xy_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "prefix" "evex")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (eq_attr "mode" "TI,V4SF,V2DF,OI,V8SF,V4DF")
+ 				      (and (not (ior (match_operand:V8DI 1 "register_operand")
+ 						     (match_operand:V8DF 1 "register_operand")))
+ 					   (eq_attr "memory" "!none")))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecvt_y_z" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "OI,V8SF,V4DF")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (ior (match_operand:V8DI 1 "register_operand")
+ 					       (match_operand:V8DF 1 "register_operand"))
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecvt_y_z_load" 15
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "OI,V8SF,V4DF")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (ior (match_operand:V8DI 1 "memory_operand")
+ 					       (match_operand:V8DF 1 "memory_operand"))
+ 					  (eq_attr "memory" "!none"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecvt_z" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "c86_attr" "other")
+ 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_ssecvt_z_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "c86_attr" "other")
+ 				    (and (eq_attr "mode" "XI,V16SF,V8DF")
+ 					 (eq_attr "memory" "!none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecvt" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "prefix" "!evex")
+ 				     (and (eq_attr "mmx_isa" "base")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_ssecvt_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "prefix" "!evex")
+ 				    (and (eq_attr "mmx_isa" "base")
+ 					 (eq_attr "memory" "!none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu2|c86-4g-m7-fpu3")
+ 
+ ;; CVTPI
+ (define_insn_reservation "c86_4g_m7_sse_ssecvt_pspi" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "SF,DI")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_ssecvt_pspi_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (eq_attr "mode" "SF,DI")
+ 					 (eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_ssecvt_pi" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				    (and (not (eq_attr "mode" "SF,DI"))
+ 				     (and (eq_attr "mmx_isa" "native")
+ 					  (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_sse_ssecvt_pi_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssecvt")
+ 				   (and (not (eq_attr "mode" "SF,DI"))
+ 				    (and (eq_attr "mmx_isa" "native")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu1,c86-4g-m7-fpu_0_1")
+ 
+ ;; SSEMULADD
+ (define_insn_reservation "c86_4g_m7_avx512_muladd" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7")
+ 			      (and (eq_attr "type" "ssemuladd")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_muladd_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7")
+ 			      (and (eq_attr "type" "ssemuladd")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m8_avx512_muladd" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemuladd")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m8_avx512_muladd_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemuladd")
+ 				   (and (eq_attr "c86_attr" "other")
+ 					(eq_attr "memory" "load"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_muladd_madd" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemuladd,sse")
+ 				   (and (eq_attr "c86_attr" "madd,rcp")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_muladd_madd_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "ssemuladd,sse")
+ 				   (and (eq_attr "c86_attr" "madd,rcp")
+ 				    (and (eq_attr "prefix" "evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ ;; SSE
+ (define_insn_reservation "c86_4g_m7_avx512_sse_range" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (eq_attr "length_immediate" "!1")
+ 				      (and (eq_attr "prefix" "evex")
+ 				       (and (eq_attr "c86_decode" "direct")
+ 					   (eq_attr "memory" "none")))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_range_load" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (eq_attr "length_immediate" "!1")
+ 				      (and (eq_attr "c86_decode" "direct")
+ 				       (and (eq_attr "prefix" "evex")
+ 					    (eq_attr "memory" "load")))))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_x" 2
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 				    (and (eq_attr "mode" "TI")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_x_load" 9
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 				    (and (eq_attr "mode" "TI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3x2")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_y" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 				    (and (eq_attr "mode" "OI")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3x3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_y_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 				    (and (eq_attr "mode" "OI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3x3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_z" 8
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 				    (and (eq_attr "mode" "XI")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3x6")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_conflict_z_load" 15
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_decode" "vector")
+ 				    (and (eq_attr "mode" "XI")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3x6")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_class" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_attr" "other")
+ 				    (and (eq_attr "length_immediate" "1")
+ 				     (and (not (eq_attr "mode" "V32HF,V16SF,V8DF"))
+ 					  (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_class_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (eq_attr "length_immediate" "1")
+ 				      (and (not (eq_attr "mode" "V32HF,V16SF,V8DF"))
+ 					   (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-double,c86-4g-m7-load,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_class_z" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (eq_attr "length_immediate" "1")
+ 				      (and (eq_attr "mode" "V32HF,V16SF,V8DF")
+ 					   (eq_attr "memory" "none"))))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_class_z_load" 11
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				    (and (eq_attr "c86_attr" "other")
+ 				     (and (eq_attr "length_immediate" "1")
+ 				      (and (eq_attr "mode" "V32HF,V16SF,V8DF")
+ 					   (eq_attr "memory" "load"))))))
+ 			 "c86-4g-m7-vector,c86-4g-m7-load,c86-4g-m7-fpu_1_3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sse" 5
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_attr" "rcp,other")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_0_1")
+ 
+ (define_insn_reservation "c86_4g_m7_avx_sse_load" 12
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "c86_attr" "rcp,other")
+ 				    (and (eq_attr "prefix" "!evex")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fpu_0_1")
+ 
+ ;; SSE SQRT
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_x" 14
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "SF,V4SF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x9")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_xload" 21
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "SF,V4SF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x9")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_y" 14
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V8SF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*9")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_yload" 21
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V8SF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*9")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_z" 26
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V16SF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*22")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_sf_zload" 33
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V16SF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*22")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_x" 20
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "DF,V2DF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp1div1_fp3div3_x4x15")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_xload" 27
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "DF,V2DF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp1div1_fp3div3_x4x15")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_y" 20
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V4DF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*15")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_yload" 27
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V4DF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*15")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_z" 38
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V8DF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "none")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*34")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_sse_sqrt_df_zload" 45
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "sse")
+ 				   (and (eq_attr "mode" "V8DF")
+ 				    (and (eq_attr "c86_attr" "sqrt")
+ 					 (eq_attr "memory" "load")))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load,c86-4g-m7-fp13div13x4,c86-4g-m7-fdiv13*34")
+ 
+ ;; MSKLOG/MSKMOV
+ (define_insn_reservation "c86_4g_m7_avx512_msklog" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "msklog")
+ 				   (eq_attr "c86_decode" "direct")))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_msklog_vector" 4
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "msklog")
+ 				   (eq_attr "c86_decode" "vector")))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mskmov_reg_k" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mskmov")
+ 				  (and (match_operand 0 "register_operand" "r")
+ 				       (eq_attr "memory" "none"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mskmov_xy_k" 2
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mskmov")
+ 				   (ior (match_operand:V2DI 0 "register_operand" "v")
+ 					(match_operand:V4DI 0 "register_operand" "v"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mskmov_z_k" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mskmov")
+ 				   (match_operand:V8DI 0 "register_operand" "v")))
+ 			 "c86-4g-m7-vector,c86-4g-m7-fpu3,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_k" 1
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mskmov")
+ 				  (and (match_operand 0 "register_operand" "k")
+ 				       (match_operand 1 "register_operand" "k"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_reg" 3
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mskmov")
+ 				  (and (match_operand 0 "register_operand" "k")
+ 				       (match_operand 1 "register_operand" "r"))))
+ 			 "c86-4g-m7-double,c86-4g-m7-fpu1,c86-4g-m7-fpu_1_3")
+ 
+ (define_insn_reservation "c86_4g_m7_avx512_mskmov_k_m" 9
+ 			 (and (eq_attr "cpu" "c86_4g_m7,c86_4g_m8")
+ 			      (and (eq_attr "type" "mskmov")
+ 				  (and (match_operand 0 "register_operand" "k")
+ 				       (match_operand 1 "memory_operand"))))
+ 			 "c86-4g-m7-direct,c86-4g-m7-load")
diff -Nrcpad gcc-17-20260621/gcc/config/i386/driver-i386.cc gcc-17-20260628/gcc/config/i386/driver-i386.cc
*** gcc-17-20260621/gcc/config/i386/driver-i386.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/driver-i386.cc	Sun Jun 28 22:32:07 2026
*************** const char *host_detect_local_cpu (int a
*** 508,515 ****
  	processor = PROCESSOR_C86_4G_M4;
        else if (model == 6)
  	processor = PROCESSOR_C86_4G_M6;
!       else if (model >= 7)
  	processor = PROCESSOR_C86_4G_M7;
      }
    else if (vendor == VENDOR_CENTAUR)
      {
--- 508,517 ----
  	processor = PROCESSOR_C86_4G_M4;
        else if (model == 6)
  	processor = PROCESSOR_C86_4G_M6;
!       else if (model == 7)
  	processor = PROCESSOR_C86_4G_M7;
+       else if (model >= 8)
+ 	processor = PROCESSOR_C86_4G_M8;
      }
    else if (vendor == VENDOR_CENTAUR)
      {
*************** const char *host_detect_local_cpu (int a
*** 869,874 ****
--- 871,879 ----
      case PROCESSOR_C86_4G_M7:
        cpu = "c86-4g-m7";
        break;
+     case PROCESSOR_C86_4G_M8:
+       cpu = "c86-4g-m8";
+       break;
  
      default:
        /* Use something reasonable.  */
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386-c.cc gcc-17-20260628/gcc/config/i386/i386-c.cc
*** gcc-17-20260621/gcc/config/i386/i386-c.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386-c.cc	Sun Jun 28 22:32:07 2026
*************** ix86_target_macros_internal (HOST_WIDE_I
*** 315,320 ****
--- 315,324 ----
        def_or_undef (parse_in, "__c86_4g_m7");
        def_or_undef (parse_in, "__c86_4g_m7__");
        break;
+     case PROCESSOR_C86_4G_M8:
+       def_or_undef (parse_in, "__c86_4g_m8");
+       def_or_undef (parse_in, "__c86_4g_m8__");
+       break;
      /* use PROCESSOR_max to not set/unset the arch macro.  */
      case PROCESSOR_max:
        break;
*************** ix86_target_macros_internal (HOST_WIDE_I
*** 532,537 ****
--- 536,544 ----
      case PROCESSOR_C86_4G_M7:
        def_or_undef (parse_in, "__tune_c86_4g_m7__");
        break;
+     case PROCESSOR_C86_4G_M8:
+       def_or_undef (parse_in, "__tune_c86_4g_m8__");
+       break;
      case PROCESSOR_INTEL:
      case PROCESSOR_GENERIC:
        break;
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386-expand.cc gcc-17-20260628/gcc/config/i386/i386-expand.cc
*** gcc-17-20260621/gcc/config/i386/i386-expand.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386-expand.cc	Sun Jun 28 22:32:07 2026
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4462,4473 ****
    rtx (*gen) (rtx, rtx, rtx, rtx) = NULL;
    machine_mode blend_mode = mode;
  
-   if (GET_MODE_SIZE (mode) < 16
-       || !vector_operand (op_true, mode))
-     op_true = force_reg (mode, op_true);
- 
-   op_false = force_reg (mode, op_false);
- 
    switch (mode)
      {
      case E_V2SFmode:
--- 4462,4467 ----
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4580,4585 ****
--- 4574,4584 ----
  
    if (gen != NULL)
      {
+       if (GET_MODE_SIZE (mode) < 16
+ 	  || !vector_operand (op_true, mode))
+ 	op_true = force_reg (mode, op_true);
+       op_false = force_reg (mode, op_false);
+ 
        if (blend_mode == mode)
  	x = dest;
        else
*************** ix86_expand_sse_movcc (rtx dest, rtx cmp
*** 4595,4609 ****
        if (x != dest)
  	emit_move_insn (dest, gen_lowpart (mode, x));
      }
    else
      {
!       rtx t2, t3;
! 
!       t2 = expand_simple_binop (mode, AND, op_true, cmp,
! 				NULL, 1, OPTAB_DIRECT);
  
!       t3 = gen_reg_rtx (mode);
        x = gen_rtx_NOT (mode, cmp);
        ix86_emit_vec_binop (AND, mode, t3, x, op_false);
  
        x = expand_simple_binop (mode, IOR, t3, t2,
--- 4594,4617 ----
        if (x != dest)
  	emit_move_insn (dest, gen_lowpart (mode, x));
      }
+   else if (CONST_VECTOR_P (op_true) && CONST_VECTOR_P (op_false))
+     {
+       rtx tmp = simplify_const_binary_operation (XOR, mode, op_true, op_false);
+       tmp = expand_simple_binop (mode, AND, cmp, tmp,
+ 				 NULL, 1, OPTAB_DIRECT);
+       tmp = expand_simple_binop (mode, XOR, tmp, op_false,
+ 				 dest, 1, OPTAB_DIRECT);
+       if (tmp != dest)
+ 	emit_move_insn (dest, tmp);
+     }
    else
      {
!       rtx t2 = expand_simple_binop (mode, AND, cmp, op_true,
! 				    NULL, 1, OPTAB_DIRECT);
  
!       rtx t3 = gen_reg_rtx (mode);
        x = gen_rtx_NOT (mode, cmp);
+       op_false = force_reg (mode, op_false);
        ix86_emit_vec_binop (AND, mode, t3, x, op_false);
  
        x = expand_simple_binop (mode, IOR, t3, t2,
*************** ix86_expand_set_or_cpymem (rtx dst, rtx
*** 9539,9544 ****
--- 9547,9580 ----
  			   rtx max_size_exp, rtx probable_max_size_exp,
  			   bool issetmem)
  {
+   if (TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES)
+     {
+       /* Expand bounded memset and memcpy as memmove if misaligned moves
+ 	 are preferred.  Since
+ 
+ 	 commit b41f96465190751561f6909e858604ceab00595b
+ 	 Author: H.J. Lu <hjl.tools@gmail.com>
+ 	 Date:   Mon Oct 20 16:14:34 2025 +0800
+ 
+ 	 x86-64: Inline memmove with overlapping unaligned loads and stores.
+ 
+ 	 inlines memmove with overlapping unaligned and stores, which
+ 	 reduces the numbers of branches and memory moves, comparing
+ 	 against the regular memset and memcpy inlining.  */
+       rtx operands[9];
+       operands[0] = dst;
+       operands[1] = issetmem ? val_exp : src;
+       operands[2] = count_exp;
+       operands[3] = align_exp;
+       operands[4] = expected_align_exp;
+       operands[5] = expected_size_exp;
+       operands[6] = min_size_exp;
+       operands[7] = max_size_exp;
+       operands[8] = probable_max_size_exp;
+       if (ix86_expand_set_or_movmem (operands, !issetmem, issetmem))
+ 	return true;
+     }
+ 
    rtx destreg;
    rtx srcreg = NULL;
    rtx_code_label *label = NULL;
*************** ix86_expand_unroll_movmem (rtx dst, rtx
*** 10122,10155 ****
    return true;
  }
  
  /* Expand memmove of size with MOVES * mode size and MOVES <= 4.  If
     FORWARD is true, copy forward.  Otherwise copy backward.  */
  
  static void
! ix86_expand_n_move_movmem (rtx destmem, rtx srcmem, machine_mode mode,
! 			   unsigned int moves, bool forward)
  {
    gcc_assert (moves <= 4);
  
    unsigned int i;
    rtx tmp[8];
  
-   for (i = 0; i < moves; i++)
-     tmp[i] = gen_reg_rtx (mode);
- 
    rtx step;
    if (forward)
      step = GEN_INT (GET_MODE_SIZE (mode));
    else
      step = GEN_INT (-GET_MODE_SIZE (mode));
  
!   /* Load MOVES.  */
!   for (i = 0; i < moves - 1; i++)
      {
        emit_move_insn (tmp[i], srcmem);
-       srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
      }
-   emit_move_insn (tmp[i], srcmem);
  
    /* Store MOVES.  */
    for (i = 0; i < moves - 1; i++)
--- 10158,10248 ----
    return true;
  }
  
+ /* Value kind in MEMSET_VALS:
+ 
+    memset_val_byte:   The value rtx in QImode.
+    memset_val_word:   The value rtx in word_mode.
+    memset_val_vector: The value rtx in QI vector mode.
+ 
+  */
+ enum memset_val_kind
+ {
+   memset_val_byte = 0,
+   memset_val_word = 1,
+   memset_val_vector = 2,
+   memset_val_max = 3
+ };
+ 
+ /* Return a value rtx in MODE for memset from MEMSET_VALS.  */
+ 
+ static rtx
+ ix86_expand_memset_val (rtx *memset_vals, machine_mode mode)
+ {
+   rtx byte_val = memset_vals[memset_val_byte];
+ 
+   if (mode == QImode)
+     return byte_val;
+   else if (mode == word_mode)
+     return memset_vals[memset_val_word];
+ 
+   /* All-zero/all-ones is a property of the original byte value, so
+      detect it once here rather than re-deriving it from each slot.  */
+   if (byte_val == const0_rtx)
+     return CONST0_RTX (mode);
+   if (byte_val == constm1_rtx)
+     return CONSTM1_RTX (mode);
+ 
+   if (GET_MODE_CLASS (mode) == MODE_VECTOR_INT)
+     {
+       if (GET_MODE (memset_vals[memset_val_vector]) == mode)
+ 	return memset_vals[memset_val_vector];
+       return gen_rtx_SUBREG (mode, memset_vals[memset_val_vector], 0);
+     }
+ 
+   gcc_assert (mode == HImode || mode == SImode);
+   return gen_rtx_SUBREG (mode, memset_vals[memset_val_word], 0);
+ }
+ 
  /* Expand memmove of size with MOVES * mode size and MOVES <= 4.  If
     FORWARD is true, copy forward.  Otherwise copy backward.  */
  
  static void
! ix86_expand_n_move_set_or_movmem (rtx destmem, rtx srcmem,
! 				  rtx *memset_vals, machine_mode mode,
! 				  unsigned int moves, bool forward)
  {
    gcc_assert (moves <= 4);
  
    unsigned int i;
    rtx tmp[8];
  
    rtx step;
    if (forward)
      step = GEN_INT (GET_MODE_SIZE (mode));
    else
      step = GEN_INT (-GET_MODE_SIZE (mode));
  
!   if (memset_vals)
!     {
!       /* Expand memset.  */
!       rtx val = ix86_expand_memset_val (memset_vals, mode);
!       for (i = 0; i < moves; i++)
! 	tmp[i] = val;
!     }
!   else
      {
+       /* Expand memmove.  */
+       for (i = 0; i < moves; i++)
+ 	tmp[i] = gen_reg_rtx (mode);
+ 
+       /* Load MOVES.  */
+       for (i = 0; i < moves - 1; i++)
+ 	{
+ 	  emit_move_insn (tmp[i], srcmem);
+ 	  srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
+ 	}
        emit_move_insn (tmp[i], srcmem);
      }
  
    /* Store MOVES.  */
    for (i = 0; i < moves - 1; i++)
*************** ix86_expand_store_movmem (rtx dst, rtx d
*** 10226,10235 ****
     MOVES >= 2 and MOVES <= 8.  */
  
  static void
! ix86_expand_n_overlapping_move_movmem (rtx dst, rtx src, rtx destreg,
! 				       rtx srcreg, rtx count_exp,
! 				       machine_mode mode,
! 				       unsigned int moves)
  {
    gcc_assert (moves >= 2 && moves <= 8 && (moves & 1) == 0);
  
--- 10319,10330 ----
     MOVES >= 2 and MOVES <= 8.  */
  
  static void
! ix86_expand_n_overlapping_move_set_or_movmem (rtx dst, rtx src,
! 					      rtx *memset_vals,
! 					      rtx destreg, rtx srcreg,
! 					      rtx count_exp,
! 					      machine_mode mode,
! 					      unsigned int moves)
  {
    gcc_assert (moves >= 2 && moves <= 8 && (moves & 1) == 0);
  
*************** ix86_expand_n_overlapping_move_movmem (r
*** 10237,10271 ****
    unsigned int i, j;
    rtx tmp[8];
  
!   for (i = 0; i < moves; i++)
!     tmp[i] = gen_reg_rtx (mode);
  
!   rtx base_srcmem = change_address (src, mode, srcreg);
  
!   /* Load the first half.  */
!   rtx srcmem = base_srcmem;
!   for (i = 0; i < half_moves - 1; i++)
!     {
        emit_move_insn (tmp[i], srcmem);
-       srcmem = offset_address (srcmem,
- 			       GEN_INT (GET_MODE_SIZE (mode)),
- 			       GET_MODE_SIZE (mode));
-     }
-   emit_move_insn (tmp[i], srcmem);
  
!   /* Load the second half.  */
!   srcmem = offset_address (base_srcmem, count_exp, 1);
!   srcmem = offset_address (srcmem,
! 			   GEN_INT (-GET_MODE_SIZE (mode)),
! 			   GET_MODE_SIZE (mode));
!   for (j = half_moves, i = 0; i < half_moves - 1; i++, j++)
!     {
!       emit_move_insn (tmp[j], srcmem);
        srcmem = offset_address (srcmem,
  			       GEN_INT (-GET_MODE_SIZE (mode)),
  			       GET_MODE_SIZE (mode));
      }
-   emit_move_insn (tmp[j], srcmem);
  
    rtx base_destmem = change_address (dst, mode, destreg);
  
--- 10332,10377 ----
    unsigned int i, j;
    rtx tmp[8];
  
!   if (memset_vals)
!     {
!       /* Expand memset.  */
!       rtx val = ix86_expand_memset_val (memset_vals, mode);
!       for (i = 0; i < moves; i++)
! 	tmp[i] = val;
!     }
!   else
!     {
!       /* Expand memmove.  */
!       for (i = 0; i < moves; i++)
! 	tmp[i] = gen_reg_rtx (mode);
  
!       rtx base_srcmem = change_address (src, mode, srcreg);
  
!       /* Load the first half.  */
!       rtx srcmem = base_srcmem;
!       for (i = 0; i < half_moves - 1; i++)
! 	{
! 	  emit_move_insn (tmp[i], srcmem);
! 	  srcmem = offset_address (srcmem,
! 				   GEN_INT (GET_MODE_SIZE (mode)),
! 				   GET_MODE_SIZE (mode));
! 	}
        emit_move_insn (tmp[i], srcmem);
  
!       /* Load the second half.  */
!       srcmem = offset_address (base_srcmem, count_exp, 1);
        srcmem = offset_address (srcmem,
  			       GEN_INT (-GET_MODE_SIZE (mode)),
  			       GET_MODE_SIZE (mode));
+       for (j = half_moves, i = 0; i < half_moves - 1; i++, j++)
+ 	{
+ 	  emit_move_insn (tmp[j], srcmem);
+ 	  srcmem = offset_address (srcmem,
+ 				   GEN_INT (-GET_MODE_SIZE (mode)),
+ 				   GET_MODE_SIZE (mode));
+ 	}
+       emit_move_insn (tmp[j], srcmem);
      }
  
    rtx base_destmem = change_address (dst, mode, destreg);
  
*************** ix86_expand_n_overlapping_move_movmem (r
*** 10296,10306 ****
  /* Expand memmove of size < mode size which is <= 64.  */
  
  static void
! ix86_expand_less_move_movmem (rtx dst, rtx src, rtx destreg,
! 			      rtx srcreg, rtx count_exp,
! 			      unsigned HOST_WIDE_INT min_size,
! 			      machine_mode mode,
! 			      rtx_code_label *done_label)
  {
    bool skip = false;
    machine_mode count_mode = counter_mode (count_exp);
--- 10402,10413 ----
  /* Expand memmove of size < mode size which is <= 64.  */
  
  static void
! ix86_expand_less_move_set_or_movmem (rtx dst, rtx src, rtx *memset_vals,
! 				     rtx destreg, rtx srcreg,
! 				     rtx count_exp,
! 				     unsigned HOST_WIDE_INT min_size,
! 				     machine_mode mode,
! 				     rtx_code_label *done_label)
  {
    bool skip = false;
    machine_mode count_mode = counter_mode (count_exp);
*************** ix86_expand_less_move_movmem (rtx dst, r
*** 10402,10410 ****
  				 profile_probability::unlikely ());
  
        /* Move 1 byte.  */
!       rtx tmp0 = gen_reg_rtx (QImode);
!       rtx srcmem = change_address (src, QImode, srcreg);
!       emit_move_insn (tmp0, srcmem);
        rtx destmem = change_address (dst, QImode, destreg);
        emit_move_insn (destmem, tmp0);
  
--- 10509,10524 ----
  				 profile_probability::unlikely ());
  
        /* Move 1 byte.  */
!       rtx tmp0;
!       /* Use the value rtx in QImode for memset.  */
!       if (memset_vals)
! 	tmp0 = memset_vals[memset_val_byte];
!       else
! 	{
! 	  tmp0 = gen_reg_rtx (QImode);
! 	  rtx srcmem = change_address (src, QImode, srcreg);
! 	  emit_move_insn (tmp0, srcmem);
! 	}
        rtx destmem = change_address (dst, QImode, destreg);
        emit_move_insn (destmem, tmp0);
  
*************** ix86_expand_less_move_movmem (rtx dst, r
*** 10415,10464 ****
        emit_barrier ();
      }
  
!   if (between_32_63_label)
!     {
!       emit_label (between_32_63_label);
!       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
! 					     count_exp, OImode, 2);
!       emit_jump_insn (gen_jump (done_label));
!       emit_barrier ();
!     }
! 
!   if (between_16_31_label)
!     {
!       emit_label (between_16_31_label);
!       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
! 					     count_exp, TImode, 2);
!       emit_jump_insn (gen_jump (done_label));
!       emit_barrier ();
!     }
! 
!   if (between_8_15_label)
!     {
!       emit_label (between_8_15_label);
!       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
! 					     count_exp, DImode, 2);
!       emit_jump_insn (gen_jump (done_label));
!       emit_barrier ();
!     }
! 
!   if (between_4_7_label)
!     {
!       emit_label (between_4_7_label);
!       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
! 					     count_exp, SImode, 2);
!       emit_jump_insn (gen_jump (done_label));
!       emit_barrier ();
!     }
  
!   if (between_2_3_label)
!     {
!       emit_label (between_2_3_label);
!       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
! 					     count_exp, HImode, 2);
!       emit_jump_insn (gen_jump (done_label));
!       emit_barrier ();
!     }
  }
  
  /* Expand movmem with overlapping unaligned loads and stores:
--- 10529,10563 ----
        emit_barrier ();
      }
  
!   /* For each size band, memset uses a QI-vector mode above a word so it
!      can broadcast the fill value, while memmove uses the same-size
!      scalar integer mode; at and below a word both use the scalar
!      integer mode.  */
!   struct {
!     rtx_code_label *label;
!     machine_mode set_mode;
!     machine_mode move_mode;
!   } bands[] = {
!     { between_32_63_label, V32QImode, OImode },
!     { between_16_31_label, V16QImode, TImode },
!     { between_8_15_label,  DImode,    DImode },
!     { between_4_7_label,   SImode,    SImode },
!     { between_2_3_label,   HImode,    HImode },
!   };
  
!   for (auto &band : bands)
!     if (band.label)
!       {
!        emit_label (band.label);
!        machine_mode bmode = memset_vals ? band.set_mode : band.move_mode;
!        ix86_expand_n_overlapping_move_set_or_movmem (dst, src,
! 						     memset_vals,
! 						     destreg, srcreg,
! 						     count_exp, bmode,
! 						     2);
!        emit_jump_insn (gen_jump (done_label));
!        emit_barrier ();
!       }
  }
  
  /* Expand movmem with overlapping unaligned loads and stores:
*************** ix86_expand_less_move_movmem (rtx dst, r
*** 10483,10489 ****
   */
  
  bool
! ix86_expand_movmem (rtx operands[])
  {
    /* Since there are much less registers available in 32-bit mode, don't
       inline movmem in 32-bit mode.  */
--- 10582,10588 ----
   */
  
  bool
! ix86_expand_set_or_movmem (rtx operands[], bool iscpymem, bool issetmem)
  {
    /* Since there are much less registers available in 32-bit mode, don't
       inline movmem in 32-bit mode.  */
*************** ix86_expand_movmem (rtx operands[])
*** 10491,10509 ****
      return false;
  
    rtx dst = operands[0];
!   rtx src = operands[1];
    rtx count_exp = operands[2];
    rtx expected_size_exp = operands[5];
    rtx min_size_exp = operands[6];
    rtx probable_max_size_exp = operands[8];
    unsigned HOST_WIDE_INT count = HOST_WIDE_INT_0U;
    HOST_WIDE_INT expected_size = HOST_WIDE_INT_M1U;
    unsigned HOST_WIDE_INT min_size = HOST_WIDE_INT_0U;
    unsigned HOST_WIDE_INT probable_max_size = HOST_WIDE_INT_M1U;
  
    if (CONST_INT_P (count_exp))
      {
!       min_size = probable_max_size = count = expected_size
  	= INTVAL (count_exp);
        /* When COUNT is 0, there is nothing to do.  */
        if (!count)
--- 10590,10620 ----
      return false;
  
    rtx dst = operands[0];
!   rtx src, memset_val_exp;
!   if (issetmem)
!     {
!       src = nullptr;
!       memset_val_exp = operands[1];
!     }
!   else
!     {
!       src = operands[1];
!       memset_val_exp = nullptr;
!     }
    rtx count_exp = operands[2];
    rtx expected_size_exp = operands[5];
    rtx min_size_exp = operands[6];
+   rtx max_size_exp = operands[7];
    rtx probable_max_size_exp = operands[8];
    unsigned HOST_WIDE_INT count = HOST_WIDE_INT_0U;
    HOST_WIDE_INT expected_size = HOST_WIDE_INT_M1U;
    unsigned HOST_WIDE_INT min_size = HOST_WIDE_INT_0U;
+   unsigned HOST_WIDE_INT max_size = HOST_WIDE_INT_M1U;
    unsigned HOST_WIDE_INT probable_max_size = HOST_WIDE_INT_M1U;
  
    if (CONST_INT_P (count_exp))
      {
!       min_size = max_size = probable_max_size = count = expected_size
  	= INTVAL (count_exp);
        /* When COUNT is 0, there is nothing to do.  */
        if (!count)
*************** ix86_expand_movmem (rtx operands[])
*** 10513,10518 ****
--- 10624,10631 ----
      {
        if (min_size_exp)
  	min_size = INTVAL (min_size_exp);
+       if (max_size_exp)
+ 	max_size = INTVAL (max_size_exp);
        if (probable_max_size_exp)
  	probable_max_size = INTVAL (probable_max_size_exp);
        if (CONST_INT_P (expected_size_exp))
*************** ix86_expand_movmem (rtx operands[])
*** 10524,10541 ****
      return false;
  
    addr_space_t dst_as = MEM_ADDR_SPACE (dst);
!   addr_space_t src_as = MEM_ADDR_SPACE (src);
    int dynamic_check;
    bool noalign;
    enum stringop_alg alg = decide_alg (count, expected_size, min_size,
! 				      probable_max_size, false, false,
  				      dst_as, src_as, &dynamic_check,
  				      &noalign, false);
    if (alg == libcall)
      return false;
  
    rtx destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
!   rtx srcreg = ix86_copy_addr_to_reg (XEXP (src, 0));
  
    unsigned int move_max = MOVE_MAX;
    machine_mode mode = smallest_int_mode_for_size
--- 10637,10671 ----
      return false;
  
    addr_space_t dst_as = MEM_ADDR_SPACE (dst);
!   addr_space_t src_as = (issetmem
! 			 ? ADDR_SPACE_GENERIC
! 			 : MEM_ADDR_SPACE (src));
    int dynamic_check;
    bool noalign;
    enum stringop_alg alg = decide_alg (count, expected_size, min_size,
! 				      probable_max_size, issetmem,
! 				      (issetmem
! 				       && memset_val_exp == const0_rtx),
  				      dst_as, src_as, &dynamic_check,
  				      &noalign, false);
    if (alg == libcall)
      return false;
  
+   /* Expand memcpy and memset like memmove only for bounded size.  */
+   if (iscpymem || issetmem)
+     {
+        unsigned HOST_WIDE_INT unbounded
+ 	 = GET_MODE_MASK (counter_mode (count_exp));
+        if (count != 0				/* Fixed size.  */
+ 	  || max_size == 0			/* Unbounded size.  */
+ 	  || max_size == unbounded)		/* Unbounded size.  */
+ 	 return false;
+     }
+ 
    rtx destreg = ix86_copy_addr_to_reg (XEXP (dst, 0));
!   rtx srcreg = (issetmem
! 		? nullptr
! 		: ix86_copy_addr_to_reg (XEXP (src, 0)));
  
    unsigned int move_max = MOVE_MAX;
    machine_mode mode = smallest_int_mode_for_size
*************** ix86_expand_movmem (rtx operands[])
*** 10558,10563 ****
--- 10688,10740 ----
  				    mode))
      return true;
  
+   rtx memset_vals[memset_val_max];
+   rtx *memset_vals_p;
+   if (issetmem)
+     {
+       /* Use vector mode if MODE size > word size.  */
+       unsigned int size = GET_MODE_SIZE (mode);
+       poly_uint64 nunits;
+       if (size > UNITS_PER_WORD)
+ 	{
+ 	  nunits = size / GET_MODE_SIZE (QImode);
+ 	  mode = mode_for_vector (QImode, nunits).require ();
+ 	}
+ 
+       /* Populate MEMSET_VALS to expand memset.  */
+       rtx val_word;
+       memset_vals[memset_val_byte] = memset_val_exp;
+       if (memset_val_exp == const0_rtx || memset_val_exp == constm1_rtx)
+ 	val_word = memset_val_exp;
+       else
+ 	val_word = promote_duplicated_reg (word_mode, memset_val_exp);
+       memset_vals[memset_val_word] = val_word;
+       if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+ 	{
+ 	  if (memset_val_exp == const0_rtx)
+ 	    memset_vals[memset_val_vector] = CONST0_RTX (mode);
+ 	  else if (memset_val_exp == constm1_rtx)
+ 	    memset_vals[memset_val_vector] = CONSTM1_RTX (mode);
+ 	  else
+ 	    {
+ 	      /* Use the vector mode based on WORD_MODE to avoid extra
+ 		 GPR moves.  */
+ 	      nunits = size / GET_MODE_SIZE (word_mode);
+ 	      machine_mode vector_mode
+ 		= mode_for_vector (word_mode, nunits).require ();
+ 	      rtx vector = promote_duplicated_reg (vector_mode,
+ 						   val_word);
+ 	      memset_vals[memset_val_vector]
+ 		= convert_to_mode (mode, vector, 1);
+ 	    }
+ 	}
+       else
+ 	memset_vals[memset_val_vector] = nullptr;
+       memset_vals_p = memset_vals;
+     }
+   else
+     memset_vals_p = nullptr;
+ 
    rtx_code_label *done_label = gen_label_rtx ();
  
    rtx_code_label *less_vec_label = nullptr;
*************** ix86_expand_movmem (rtx operands[])
*** 10585,10592 ****
    if (min_size == 0 || min_size <= 2 * move_max)
      {
        /* Size >= MOVE_MAX and size <= 2 * MOVE_MAX.  */
!       ix86_expand_n_overlapping_move_movmem (dst, src, destreg, srcreg,
! 					     count_exp, mode, 2);
        emit_jump_insn (gen_jump (done_label));
        emit_barrier ();
      }
--- 10762,10771 ----
    if (min_size == 0 || min_size <= 2 * move_max)
      {
        /* Size >= MOVE_MAX and size <= 2 * MOVE_MAX.  */
!       ix86_expand_n_overlapping_move_set_or_movmem (dst, src,
! 						    memset_vals_p,
! 						    destreg, srcreg,
! 						    count_exp, mode, 2);
        emit_jump_insn (gen_jump (done_label));
        emit_barrier ();
      }
*************** ix86_expand_movmem (rtx operands[])
*** 10595,10603 ****
      {
        /* Size < MOVE_MAX.  */
        emit_label (less_vec_label);
!       ix86_expand_less_move_movmem (dst, src, destreg, srcreg,
! 				    count_exp, min_size, mode,
! 				    done_label);
        emit_jump_insn (gen_jump (done_label));
        emit_barrier ();
      }
--- 10774,10782 ----
      {
        /* Size < MOVE_MAX.  */
        emit_label (less_vec_label);
!       ix86_expand_less_move_set_or_movmem (dst, src, memset_vals_p,
! 					   destreg, srcreg, count_exp,
! 					   min_size, mode, done_label);
        emit_jump_insn (gen_jump (done_label));
        emit_barrier ();
      }
*************** ix86_expand_movmem (rtx operands[])
*** 10630,10638 ****
        if (probable_max_size == 0 || probable_max_size > 4 * move_max)
  	{
  	  /* Size > 4 * MOVE_MAX and size <= 8 * MOVE_MAX.  */
! 	  ix86_expand_n_overlapping_move_movmem (dst, src, destreg,
! 						 srcreg, count_exp,
! 						 mode, 8);
  	  emit_jump_insn (gen_jump (done_label));
  	  emit_barrier ();
  	}
--- 10809,10819 ----
        if (probable_max_size == 0 || probable_max_size > 4 * move_max)
  	{
  	  /* Size > 4 * MOVE_MAX and size <= 8 * MOVE_MAX.  */
! 	  ix86_expand_n_overlapping_move_set_or_movmem (dst, src,
! 							memset_vals_p,
! 							destreg, srcreg,
! 							count_exp, mode,
! 							8);
  	  emit_jump_insn (gen_jump (done_label));
  	  emit_barrier ();
  	}
*************** ix86_expand_movmem (rtx operands[])
*** 10641,10649 ****
  	{
  	  /* Size > 2 * MOVE_MAX and size <= 4 * MOVE_MAX.  */
  	  emit_label (last_4x_vec_label);
! 	  ix86_expand_n_overlapping_move_movmem (dst, src, destreg,
! 						 srcreg, count_exp,
! 						 mode, 4);
  	  emit_jump_insn (gen_jump (done_label));
  	  emit_barrier ();
  	}
--- 10822,10832 ----
  	{
  	  /* Size > 2 * MOVE_MAX and size <= 4 * MOVE_MAX.  */
  	  emit_label (last_4x_vec_label);
! 	  ix86_expand_n_overlapping_move_set_or_movmem (dst, src,
! 							memset_vals_p,
! 							destreg, srcreg,
! 							count_exp, mode,
! 							4);
  	  emit_jump_insn (gen_jump (done_label));
  	  emit_barrier ();
  	}
*************** ix86_expand_movmem (rtx operands[])
*** 10656,10689 ****
  	  rtx loop_count = gen_reg_rtx (count_mode);
  	  emit_move_insn (loop_count, count_exp);
  
! 	  /* Jump to MORE_8X_VEC_BACKWARD_LABEL if source address is
! 	     lower than destination address.  */
! 	  rtx_code_label *more_8x_vec_backward_label = gen_label_rtx ();
! 	  emit_cmp_and_jump_insns (srcreg, destreg, LTU, nullptr,
! 				   GET_MODE (destreg), 1,
! 				   more_8x_vec_backward_label);
  
! 	  /* Skip if source == destination which is less common.  */
! 	  emit_cmp_and_jump_insns (srcreg, destreg, EQ, nullptr,
! 				   GET_MODE (destreg), 1, done_label,
! 				   profile_probability::unlikely ());
  
! 	  rtx base_destreg = gen_reg_rtx (GET_MODE (destreg));
! 	  emit_move_insn (base_destreg, destreg);
  
! 	  /* Load the last 4 * MOVE_MAX.  */
! 	  rtx regs[4];
! 	  ix86_expand_load_movmem (src, srcreg, count_exp, mode,
! 				   ARRAY_SIZE (regs), regs, true);
  
- 	  rtx srcmem = change_address (src, mode, srcreg);
  	  rtx destmem = change_address (dst, mode, destreg);
  
  	  /* Copy forward with a 4 * MOVE_MAX loop.  */
  	  rtx_code_label *loop_4x_vec_forward_label = gen_label_rtx ();
  	  emit_label (loop_4x_vec_forward_label);
  
! 	  ix86_expand_n_move_movmem (destmem, srcmem, mode, 4, true);
  
  	  rtx tmp;
  	  rtx delta = GEN_INT (4 * MOVE_MAX);
--- 10839,10904 ----
  	  rtx loop_count = gen_reg_rtx (count_mode);
  	  emit_move_insn (loop_count, count_exp);
  
! 	  rtx_code_label *more_8x_vec_backward_label;
! 	  rtx base_destreg;
! 	  rtx srcmem;
! 	  rtx regs[4];
! 	  if (iscpymem || issetmem)
! 	    {
! 	      /* Always store forward for memcpy and memset.  */
! 	      more_8x_vec_backward_label = nullptr;
! 	      if (iscpymem)
! 		{
! 		  /* Load the last 4 * MOVE_MAX for memcpy.  */
! 		  ix86_expand_load_movmem (src, srcreg, count_exp, mode,
! 					   ARRAY_SIZE (regs), regs,
! 					   true);
! 		  srcmem = change_address (src, mode, srcreg);
! 		}
! 	      else
! 		{
! 		  /* Fill REGS with MEMSET_VALS for memset.  */
! 		  rtx val = ix86_expand_memset_val (memset_vals, mode);
! 		  for (unsigned int i = 0; i < 4; i++)
! 		    regs[i] = val;
! 		  srcmem = nullptr;
! 		}
! 	      base_destreg = gen_reg_rtx (GET_MODE (destreg));
! 	      emit_move_insn (base_destreg, destreg);
! 	    }
! 	  else
! 	    {
! 	      /* Jump to MORE_8X_VEC_BACKWARD_LABEL if source address is
! 		 lower than destination address.  */
! 	      more_8x_vec_backward_label = gen_label_rtx ();
! 	      emit_cmp_and_jump_insns (srcreg, destreg, LTU, nullptr,
! 				       GET_MODE (destreg), 1,
! 				       more_8x_vec_backward_label);
  
! 	      /* Skip if source == destination which is less common.  */
! 	      emit_cmp_and_jump_insns (srcreg, destreg, EQ, nullptr,
! 				       GET_MODE (destreg), 1, done_label,
! 				       profile_probability::unlikely ());
  
! 	      base_destreg = gen_reg_rtx (GET_MODE (destreg));
! 	      emit_move_insn (base_destreg, destreg);
  
! 	      /* Load the last 4 * MOVE_MAX.  */
! 	      ix86_expand_load_movmem (src, srcreg, count_exp, mode,
! 				       ARRAY_SIZE (regs), regs, true);
! 
! 	      srcmem = change_address (src, mode, srcreg);
! 	    }
  
  	  rtx destmem = change_address (dst, mode, destreg);
  
  	  /* Copy forward with a 4 * MOVE_MAX loop.  */
  	  rtx_code_label *loop_4x_vec_forward_label = gen_label_rtx ();
  	  emit_label (loop_4x_vec_forward_label);
  
! 	  ix86_expand_n_move_set_or_movmem (destmem, srcmem,
! 					    memset_vals_p, mode, 4,
! 					    true);
  
  	  rtx tmp;
  	  rtx delta = GEN_INT (4 * MOVE_MAX);
*************** ix86_expand_movmem (rtx operands[])
*** 10701,10710 ****
  				     OPTAB_DIRECT);
  	  if (tmp != destreg)
  	    emit_move_insn (destreg, tmp);
! 	  tmp = expand_simple_binop (GET_MODE (srcreg), PLUS, srcreg,
! 				     delta, nullptr, 1, OPTAB_DIRECT);
! 	  if (tmp != srcreg)
! 	    emit_move_insn (srcreg, tmp);
  
  	  /* Stop if LOOP_EXP <= 4 * MOVE_MAX.  */
  	  emit_cmp_and_jump_insns (loop_count, delta, GTU, nullptr,
--- 10916,10929 ----
  				     OPTAB_DIRECT);
  	  if (tmp != destreg)
  	    emit_move_insn (destreg, tmp);
! 	  if (!issetmem)
! 	    {
! 	      tmp = expand_simple_binop (GET_MODE (srcreg), PLUS,
! 					 srcreg, delta, nullptr, 1,
! 					 OPTAB_DIRECT);
! 	      if (tmp != srcreg)
! 		emit_move_insn (srcreg, tmp);
! 	    }
  
  	  /* Stop if LOOP_EXP <= 4 * MOVE_MAX.  */
  	  emit_cmp_and_jump_insns (loop_count, delta, GTU, nullptr,
*************** ix86_expand_movmem (rtx operands[])
*** 10718,10784 ****
  	  emit_jump_insn (gen_jump (done_label));
  	  emit_barrier ();
  
! 	  /* Copy backward with a 4 * MOVE_MAX loop.  */
! 	  emit_label (more_8x_vec_backward_label);
  
! 	  base_destreg = gen_reg_rtx (GET_MODE (destreg));
! 	  emit_move_insn (base_destreg, destreg);
  
! 	  /* Load the first 4 * MOVE_MAX.  */
! 	  ix86_expand_load_movmem (src, srcreg, count_exp, mode,
! 				   ARRAY_SIZE (regs), regs, false);
  
! 	  /* Increment DESTREG and SRCREG by COUNT_EXP.  */
! 	  tmp = expand_simple_binop (GET_MODE (destreg), PLUS,
! 				     destreg, count_exp, nullptr, 1,
! 				     OPTAB_DIRECT);
! 	  if (tmp != destreg)
! 	    emit_move_insn (destreg, tmp);
! 	  tmp = expand_simple_binop (GET_MODE (srcreg), PLUS, srcreg,
! 				     count_exp, nullptr, 1, OPTAB_DIRECT);
! 	  if (tmp != srcreg)
! 	    emit_move_insn (srcreg, tmp);
  
! 	  srcmem = change_address (src, mode, srcreg);
! 	  destmem = change_address (dst, mode, destreg);
! 	  rtx step = GEN_INT (-GET_MODE_SIZE (mode));
! 	  srcmem = offset_address (srcmem, step, GET_MODE_SIZE (mode));
! 	  destmem = offset_address (destmem, step, GET_MODE_SIZE (mode));
  
! 	  rtx_code_label *loop_4x_vec_backward_label = gen_label_rtx ();
! 	  emit_label (loop_4x_vec_backward_label);
  
! 	  ix86_expand_n_move_movmem (destmem, srcmem, mode, 4, false);
  
! 	  /* Decrement LOOP_COUNT by 4 * MOVE_MAX.  */
! 	  tmp = expand_simple_binop (GET_MODE (loop_count), MINUS,
! 				     loop_count, delta, nullptr, 1,
! 				     OPTAB_DIRECT);
! 	  if (tmp != loop_count)
! 	    emit_move_insn (loop_count, tmp);
  
! 	  /* Decrement DESTREG and SRCREG by 4 * MOVE_MAX.  */
! 	  tmp = expand_simple_binop (GET_MODE (destreg), MINUS,
! 				     destreg, delta, nullptr, 1,
! 				     OPTAB_DIRECT);
! 	  if (tmp != destreg)
! 	    emit_move_insn (destreg, tmp);
! 	  tmp = expand_simple_binop (GET_MODE (srcreg), MINUS, srcreg,
! 				     delta, nullptr, 1, OPTAB_DIRECT);
! 	  if (tmp != srcreg)
! 	    emit_move_insn (srcreg, tmp);
  
! 	  /* Stop if LOOP_EXP <= 4 * MOVE_MAX.  */
! 	  emit_cmp_and_jump_insns (loop_count, delta, GTU, nullptr,
! 				   GET_MODE (loop_count), 1,
! 				   loop_4x_vec_backward_label);
  
! 	  /* Store the first 4 * MOVE_MAX.  */
! 	  ix86_expand_store_movmem (dst, base_destreg, count_exp, mode,
! 				    ARRAY_SIZE (regs), regs, false);
  
! 	  emit_jump_insn (gen_jump (done_label));
! 	  emit_barrier ();
  	}
      }
  
--- 10937,11014 ----
  	  emit_jump_insn (gen_jump (done_label));
  	  emit_barrier ();
  
! 	  if (more_8x_vec_backward_label)
! 	    {
! 	      /* Copy backward with a 4 * MOVE_MAX loop.  */
! 	      emit_label (more_8x_vec_backward_label);
  
! 	      base_destreg = gen_reg_rtx (GET_MODE (destreg));
! 	      emit_move_insn (base_destreg, destreg);
  
! 	      /* Load the first 4 * MOVE_MAX.  */
! 	      ix86_expand_load_movmem (src, srcreg, count_exp, mode,
! 				       ARRAY_SIZE (regs), regs, false);
  
! 	      /* Increment DESTREG and SRCREG by COUNT_EXP.  */
! 	      tmp = expand_simple_binop (GET_MODE (destreg), PLUS,
! 					 destreg, count_exp, nullptr, 1,
! 					 OPTAB_DIRECT);
! 	      if (tmp != destreg)
! 		emit_move_insn (destreg, tmp);
! 	      tmp = expand_simple_binop (GET_MODE (srcreg), PLUS, srcreg,
! 					 count_exp, nullptr, 1,
! 					 OPTAB_DIRECT);
! 	      if (tmp != srcreg)
! 		emit_move_insn (srcreg, tmp);
  
! 	      srcmem = change_address (src, mode, srcreg);
! 	      destmem = change_address (dst, mode, destreg);
! 	      rtx step = GEN_INT (-GET_MODE_SIZE (mode));
! 	      srcmem = offset_address (srcmem, step,
! 				       GET_MODE_SIZE (mode));
! 	      destmem = offset_address (destmem, step,
! 					GET_MODE_SIZE (mode));
  
! 	      rtx_code_label *loop_4x_vec_backward_label
! 		= gen_label_rtx ();
! 	      emit_label (loop_4x_vec_backward_label);
  
! 	      ix86_expand_n_move_set_or_movmem (destmem, srcmem,
! 						memset_vals_p, mode, 4,
! 						false);
  
! 	      /* Decrement LOOP_COUNT by 4 * MOVE_MAX.  */
! 	      tmp = expand_simple_binop (GET_MODE (loop_count), MINUS,
! 					 loop_count, delta, nullptr, 1,
! 					 OPTAB_DIRECT);
! 	      if (tmp != loop_count)
! 		emit_move_insn (loop_count, tmp);
  
! 	      /* Decrement DESTREG and SRCREG by 4 * MOVE_MAX.  */
! 	      tmp = expand_simple_binop (GET_MODE (destreg), MINUS,
! 					 destreg, delta, nullptr, 1,
! 					 OPTAB_DIRECT);
! 	      if (tmp != destreg)
! 		emit_move_insn (destreg, tmp);
! 	      tmp = expand_simple_binop (GET_MODE (srcreg), MINUS,
! 					 srcreg, delta, nullptr, 1,
! 					 OPTAB_DIRECT);
! 	      if (tmp != srcreg)
! 		emit_move_insn (srcreg, tmp);
  
! 	      /* Stop if LOOP_EXP <= 4 * MOVE_MAX.  */
! 	      emit_cmp_and_jump_insns (loop_count, delta, GTU, nullptr,
! 				       GET_MODE (loop_count), 1,
! 				       loop_4x_vec_backward_label);
  
! 	      /* Store the first 4 * MOVE_MAX.  */
! 	      ix86_expand_store_movmem (dst, base_destreg, count_exp,
! 					mode, ARRAY_SIZE (regs), regs,
! 					false);
  
! 	      emit_jump_insn (gen_jump (done_label));
! 	      emit_barrier ();
! 	    }
  	}
      }
  
*************** ix86_expand_gfni_bitreverse (rtx dest, r
*** 28264,28267 ****
--- 28494,28656 ----
      emit_insn (gen_rtx_SET (dest, gen_rtx_BSWAP (mode, target)));
  }
  
+ /* Expand LCP stall or long immediate peephole for INSN.  Use the
+    previous scratch register if possible.  If USE_XOR is true,
+    generate "*movsi_xor".  */
+ 
+ void
+ ix86_expand_lcp_stall_peephole (rtx_insn *insn, rtx *operands,
+ 				bool use_xor)
+ {
+   rtx imm, scratch;
+   machine_mode mode = GET_MODE (operands[0]);
+ 
+   /* Get the immediate operand and the allocated scratch register.  */
+   if (use_xor)
+     {
+       imm = const0_rtx;
+       scratch = operands[1];
+     }
+   else
+     {
+       imm = operands[1];
+       scratch = operands[2];
+     }
+ 
+   df_ref def;
+   rtx_insn *prev, *prev_insn = nullptr;
+   rtx set, prev_scratch = nullptr;
+ 
+   /* Scan backward for the previous scratch register def with IMM in
+      the same basic block.  */
+   basic_block bb = BLOCK_FOR_INSN (insn);
+   for (prev = PREV_INSN (insn);
+        prev != BB_HEAD (bb);
+        prev = PREV_INSN (prev))
+     {
+       if (NONDEBUG_INSN_P (prev))
+ 	FOR_EACH_INSN_DEF (def, prev)
+ 	  if (!DF_REF_IS_ARTIFICIAL (def)
+ 	      && !DF_REF_FLAGS_IS_SET (def, DF_REF_MAY_CLOBBER)
+ 	      && !DF_REF_FLAGS_IS_SET (def, DF_REF_MUST_CLOBBER))
+ 	    {
+ 	      rtx reg = DF_REF_REG (def);
+ 	      if (HARD_REGISTER_P (reg) && REGNO (reg) != FLAGS_REG)
+ 		{
+ 		  set = single_set (prev);
+ 		  if (!set)
+ 		    continue;
+ 
+ 		  rtx dest = SET_DEST (set);
+ 
+ 		  /* Reject DEST if a register is not wide enough to
+ 		     supply MODE or invalid for QImode.  */
+ 		  if (!GENERAL_REG_P (dest)
+ 		      || (GET_MODE_SIZE (GET_MODE (dest))
+ 			  < GET_MODE_SIZE (mode))
+ 		      || (mode == QImode
+ 			  && !ANY_QI_REGNO_P (REGNO (dest))))
+ 		    continue;
+ 
+ 		  rtx src = SET_SRC (set);
+ 		  if (rtx_equal_p (src, imm))
+ 		    {
+ 		      /* A previous scratch register is found.  */
+ 		      prev_scratch = dest;
+ 		      prev_insn = prev;
+ 		      break;
+ 		    }
+ 		}
+ 	    }
+ 
+       if (prev_scratch)
+ 	break;
+     }
+ 
+   if (prev_scratch)
+     {
+       /* The previous scratch register is unusable if it is set between
+ 	 PREV_INSN and INSN.  */
+       unsigned int regno = REGNO (prev_scratch);
+ 
+       /* Scan backward for the previous scratch register def.  */
+       for (prev = PREV_INSN (insn);
+ 	   prev != prev_insn;
+ 	   prev = PREV_INSN (prev))
+ 	{
+ 	  if (NONDEBUG_INSN_P (prev))
+ 	    FOR_EACH_INSN_DEF (def, prev)
+ 	      if (HARD_REGISTER_P (DF_REF_REAL_REG (def))
+ 		  && DF_REF_REGNO (def) == regno)
+ 		{
+ 		  /* Since the previous scratch register is set, it is
+ 		     unusable.  */
+ 		  if (dump_file)
+ 		    {
+ 		      fprintf (dump_file,
+ 			       "\nThe previous scratch register:\n\n");
+ 		      print_rtl_single (dump_file, prev_scratch);
+ 		      fprintf (dump_file, "\nset in:\n\n");
+ 		      print_rtl_single (dump_file, prev_insn);
+ 		      fprintf (dump_file,
+ 			       "\nis unusable by:\n\n");
+ 		      print_rtl_single (dump_file, insn);
+ 		      fprintf (dump_file,
+ 			       "\nsince it is overridden by:\n\n");
+ 		      print_rtl_single (dump_file, prev);
+ 		      fprintf (dump_file, "\n");
+ 		    }
+ 		  prev_scratch = nullptr;
+ 		  break;
+ 		}
+ 
+ 	  if (!prev_scratch)
+ 	    break;
+ 	}
+ 
+       if (prev_scratch)
+ 	{
+ 	  /* Ignore the allocated scratch register and use the previous
+ 	     scratch register.  */
+ 	  if (dump_file)
+ 	    {
+ 	      fprintf (dump_file,
+ 		       "\nIgnore the allocated scratch register:\n\n");
+ 	      print_rtl_single (dump_file, scratch);
+ 	      fprintf (dump_file,
+ 		       "\nand use the previous scratch register:\n\n");
+ 	      print_rtl_single (dump_file, prev_scratch);
+ 	      fprintf (dump_file, "\nset in:\n\n");
+ 	      print_rtl_single (dump_file, prev_insn);
+ 	      fprintf (dump_file, "\nfor:\n\n");
+ 	      print_rtl_single (dump_file, insn);
+ 	      fprintf (dump_file, "\n");
+ 	    }
+ 	  scratch = gen_lowpart (mode, prev_scratch);
+ 	  set = gen_rtx_SET (operands[0], scratch);
+ 	  emit_insn (set);
+ 	  return;
+ 	}
+     }
+ 
+   /* If there is no usable previous scratch register, use the allocated
+      scratch register.  */
+   if (use_xor)
+     {
+       /* Generate "*movsi_xor".  */
+       rtx x = gen_lowpart (SImode, scratch);
+       rtvec p = rtvec_alloc (2);
+       set = gen_rtx_SET (x, const0_rtx);
+       RTVEC_ELT (p, 0) = set;
+       rtx clobber = gen_rtx_REG (CCmode, FLAGS_REG);
+       RTVEC_ELT (p, 1) = gen_rtx_CLOBBER (VOIDmode, clobber);
+       set = gen_rtx_PARALLEL (VOIDmode, p);
+     }
+   else
+     set = gen_rtx_SET (scratch, imm);
+   emit_insn (set);
+   set = gen_rtx_SET (operands[0], scratch);
+   emit_insn (set);
+ }
+ 
  #include "gt-i386-expand.h"
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386-features.cc gcc-17-20260628/gcc/config/i386/i386-features.cc
*** gcc-17-20260621/gcc/config/i386/i386-features.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386-features.cc	Sun Jun 28 22:32:07 2026
*************** pass_x86_cse::x86_cse (void)
*** 5053,5058 ****
--- 5053,5069 ----
  		    rtvec v = rtvec_alloc (nunits);
  		    for (int j = 0; j < nunits ; j++)
  		      RTVEC_ELT (v, j) = load->val;
+ 		    if (CONST_INT_P (load->val)
+ 			&& GET_MODE_CLASS (mode) != MODE_VECTOR_INT)
+ 		      {
+ 			gcc_assert (load->size <= UNITS_PER_WORD);
+ 			machine_mode imode = GET_MODE_INNER (mode);
+ 			class scalar_mode i_mode
+ 			  = int_mode_for_mode (imode).require ();
+ 			mode = mode_for_vector (i_mode,
+ 						nunits).require ();
+ 		      }
+ 
  		    broadcast_source = gen_rtx_CONST_VECTOR (mode, v);
  		  }
  
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386-options.cc gcc-17-20260628/gcc/config/i386/i386-options.cc
*** gcc-17-20260621/gcc/config/i386/i386-options.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386-options.cc	Sun Jun 28 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 188,194 ****
  #define m_C86_4G_M4 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M4)
  #define m_C86_4G_M6 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M6)
  #define m_C86_4G_M7 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M7)
! #define m_C86_4G (m_C86_4G_M4 | m_C86_4G_M6 | m_C86_4G_M7)
  
  #define m_GENERIC (HOST_WIDE_INT_1U<<PROCESSOR_GENERIC)
  
--- 188,196 ----
  #define m_C86_4G_M4 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M4)
  #define m_C86_4G_M6 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M6)
  #define m_C86_4G_M7 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M7)
! #define m_C86_4G_M8 (HOST_WIDE_INT_1U<<PROCESSOR_C86_4G_M8)
! #define m_C86_4G (m_C86_4G_M4 | m_C86_4G_M6 | m_C86_4G_M7 \
! 		  | m_C86_4G_M8)
  
  #define m_GENERIC (HOST_WIDE_INT_1U<<PROCESSOR_GENERIC)
  
*************** static const struct processor_costs *pro
*** 821,827 ****
    &znver5_cost,		/* PROCESSOR_ZNVER6.		*/
    &c86_4g_m4_cost,	/* PROCESSOR_C86_4G_M4.		*/
    &c86_4g_m6_cost,	/* PROCESSOR_C86_4G_M6.		*/
!   &c86_4g_m7_cost	/* PROCESSOR_C86_4G_M7.		*/
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
--- 823,830 ----
    &znver5_cost,		/* PROCESSOR_ZNVER6.		*/
    &c86_4g_m4_cost,	/* PROCESSOR_C86_4G_M4.		*/
    &c86_4g_m6_cost,	/* PROCESSOR_C86_4G_M6.		*/
!   &c86_4g_m7_cost,	/* PROCESSOR_C86_4G_M7.		*/
!   &c86_4g_m8_cost	/* PROCESSOR_C86_4G_M8.		*/
  };
  
  /* Guarantee that the array is aligned with enum processor_type.  */
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386-protos.h gcc-17-20260628/gcc/config/i386/i386-protos.h
*** gcc-17-20260621/gcc/config/i386/i386-protos.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386-protos.h	Sun Jun 28 22:32:07 2026
*************** extern void substitute_vpternlog_operand
*** 78,84 ****
  extern bool ix86_expand_strlen (rtx, rtx, rtx, rtx);
  extern bool ix86_expand_set_or_cpymem (rtx, rtx, rtx, rtx, rtx, rtx,
  				       rtx, rtx, rtx, rtx, bool);
! extern bool ix86_expand_movmem (rtx[]);
  extern bool ix86_expand_cmpstrn_or_cmpmem (rtx, rtx, rtx, rtx, rtx, bool);
  
  extern enum reg_class ix86_insn_base_reg_class (rtx_insn *);
--- 78,84 ----
  extern bool ix86_expand_strlen (rtx, rtx, rtx, rtx);
  extern bool ix86_expand_set_or_cpymem (rtx, rtx, rtx, rtx, rtx, rtx,
  				       rtx, rtx, rtx, rtx, bool);
! extern bool ix86_expand_set_or_movmem (rtx[], bool, bool);
  extern bool ix86_expand_cmpstrn_or_cmpmem (rtx, rtx, rtx, rtx, rtx, bool);
  
  extern enum reg_class ix86_insn_base_reg_class (rtx_insn *);
*************** extern bool ix86_expand_vector_init_one_
*** 314,319 ****
--- 314,321 ----
  						 rtx, int);
  extern bool ix86_extract_perm_from_pool_constant (int*, rtx);
  
+ extern void ix86_expand_lcp_stall_peephole (rtx_insn *, rtx *, bool);
+ 
  /* In i386-c.cc  */
  extern void ix86_target_macros (void);
  extern void ix86_register_pragmas (void);
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386.cc gcc-17-20260628/gcc/config/i386/i386.cc
*** gcc-17-20260621/gcc/config/i386/i386.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386.cc	Sun Jun 28 22:32:07 2026
*************** ix86_enum_va_list (int idx, const char *
*** 25842,25848 ****
     is passed in MODE.  */
  
  static int
! ix86_reassociation_width (unsigned int op, machine_mode mode)
  {
    int width = 1;
    /* Vector part.  */
--- 25842,25848 ----
     is passed in MODE.  */
  
  static int
! ix86_reassociation_width (tree_code op, machine_mode mode)
  {
    int width = 1;
    /* Vector part.  */
*************** ix86_reassociation_width (unsigned int o
*** 25863,25875 ****
  	   || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4
  	   || ix86_tune == PROCESSOR_C86_4G_M4
  	   || ix86_tune == PROCESSOR_C86_4G_M6
! 	   || ix86_tune == PROCESSOR_C86_4G_M7)
!    	  && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS)
  	return 1;
        /* Znver5 can do 2 integer multiplications per cycle with latency
  	 of 3.  */
        if ((ix86_tune == PROCESSOR_ZNVER5 || ix86_tune == PROCESSOR_ZNVER6)
! 	  && INTEGRAL_MODE_P (mode) && op != PLUS && op != MINUS)
  	width = 6;
  
        /* Account for targets that splits wide vectors into multiple parts.  */
--- 25863,25876 ----
  	   || ix86_tune == PROCESSOR_ZNVER3 || ix86_tune == PROCESSOR_ZNVER4
  	   || ix86_tune == PROCESSOR_C86_4G_M4
  	   || ix86_tune == PROCESSOR_C86_4G_M6
! 	   || ix86_tune == PROCESSOR_C86_4G_M7
! 	   || ix86_tune == PROCESSOR_C86_4G_M8)
! 	  && INTEGRAL_MODE_P (mode) && op != PLUS_EXPR && op != MINUS_EXPR)
  	return 1;
        /* Znver5 can do 2 integer multiplications per cycle with latency
  	 of 3.  */
        if ((ix86_tune == PROCESSOR_ZNVER5 || ix86_tune == PROCESSOR_ZNVER6)
! 	  && INTEGRAL_MODE_P (mode) && op != PLUS_EXPR && op != MINUS_EXPR)
  	width = 6;
  
        /* Account for targets that splits wide vectors into multiple parts.  */
*************** ix86_vector_costs::add_stmt_cost (int co
*** 26514,26521 ****
  	  break;
  
  	default:
! 	  if (truth_value_p (subcode))
  	    {
  	      if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode))
  		/* CMPccS? insructions are cheap, so use sse_op.  While they
  		   produce a mask which may need to be turned to 0/1 by and,
--- 26515,26529 ----
  	  break;
  
  	default:
! 	  if (TREE_CODE_CLASS (subcode) == tcc_comparison)
  	    {
+ 	      tree op_type;
+ 	      if (kind == vector_stmt)
+ 		op_type = SLP_TREE_VECTYPE (SLP_TREE_CHILDREN (node)[0]);
+ 	      else
+ 		op_type = vect_comparison_type (stmt_info);
+ 	      mode = TYPE_MODE (op_type);
+ 
  	      if (SSE_FLOAT_MODE_SSEMATH_OR_HFBF_P (mode))
  		/* CMPccS? insructions are cheap, so use sse_op.  While they
  		   produce a mask which may need to be turned to 0/1 by and,
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386.h gcc-17-20260628/gcc/config/i386/i386.h
*** gcc-17-20260621/gcc/config/i386/i386.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386.h	Sun Jun 28 22:32:07 2026
*************** enum processor_type
*** 2396,2401 ****
--- 2396,2402 ----
    PROCESSOR_C86_4G_M4,
    PROCESSOR_C86_4G_M6,
    PROCESSOR_C86_4G_M7,
+   PROCESSOR_C86_4G_M8,
    PROCESSOR_max
  };
  
*************** constexpr wide_int_bitmask PTA_C86_4G_M7
*** 2573,2578 ****
--- 2574,2580 ----
    | PTA_AVX512VNNI | PTA_AVX512BITALG | PTA_AVX512VPOPCNTDQ
    | PTA_AVX512VP2INTERSECT | PTA_VAES | PTA_AVXVNNI | PTA_VPCLMULQDQ
    | PTA_WBNOINVD | PTA_CLWB;
+ constexpr wide_int_bitmask PTA_C86_4G_M8 = PTA_C86_4G_M7;
  
  #ifndef GENERATOR_FILE
  
*************** struct GTY(()) machine_frame_state
*** 2803,2827 ****
       value within the frame.  If false then the offset above should be
       ignored.  Note that DRAP, if valid, *always* points to the CFA and
       thus has an offset of zero.  */
!   BOOL_BITFIELD sp_valid : 1;
!   BOOL_BITFIELD fp_valid : 1;
!   BOOL_BITFIELD drap_valid : 1;
  
    /* Indicate whether the local stack frame has been re-aligned.  When
       set, the SP/FP offsets above are relative to the aligned frame
       and not the CFA.  */
!   BOOL_BITFIELD realigned : 1;
  
    /* Indicates whether the stack pointer has been re-aligned.  When set,
       SP/FP continue to be relative to the CFA, but the stack pointer
       should only be used for offsets > sp_realigned_offset, while
       the frame pointer should be used for offsets <= sp_realigned_fp_last.
       The flags realigned and sp_realigned are mutually exclusive.  */
!   BOOL_BITFIELD sp_realigned : 1;
  
    /* When APX_PPX used in prologue, force epilogue to emit
    popp instead of move and leave.  */
!   BOOL_BITFIELD apx_ppx_used : 1;
  
    /* If sp_realigned is set, this is the last valid offset from the CFA
       that can be used for access with the frame pointer.  */
--- 2805,2829 ----
       value within the frame.  If false then the offset above should be
       ignored.  Note that DRAP, if valid, *always* points to the CFA and
       thus has an offset of zero.  */
!   bool sp_valid : 1;
!   bool fp_valid : 1;
!   bool drap_valid : 1;
  
    /* Indicate whether the local stack frame has been re-aligned.  When
       set, the SP/FP offsets above are relative to the aligned frame
       and not the CFA.  */
!   bool realigned : 1;
  
    /* Indicates whether the stack pointer has been re-aligned.  When set,
       SP/FP continue to be relative to the CFA, but the stack pointer
       should only be used for offsets > sp_realigned_offset, while
       the frame pointer should be used for offsets <= sp_realigned_fp_last.
       The flags realigned and sp_realigned are mutually exclusive.  */
!   bool sp_realigned : 1;
  
    /* When APX_PPX used in prologue, force epilogue to emit
    popp instead of move and leave.  */
!   bool apx_ppx_used : 1;
  
    /* If sp_realigned is set, this is the last valid offset from the CFA
       that can be used for access with the frame pointer.  */
*************** struct GTY(()) machine_function {
*** 2898,2912 ****
    ENUM_BITFIELD(calling_abi) call_abi : 8;
  
    /* Nonzero if the function accesses a previous frame.  */
!   BOOL_BITFIELD accesses_prev_frame : 1;
  
    /* Set by ix86_compute_frame_layout and used by prologue/epilogue
       expander to determine the style used.  */
!   BOOL_BITFIELD use_fast_prologue_epilogue : 1;
  
    /* Nonzero if the current function calls pc thunk and
       must not use the red zone.  */
!   BOOL_BITFIELD pc_thunk_call_expanded : 1;
  
    /* If true, the current function needs the default PIC register, not
       an alternate register (on x86) and must not use the red zone (on
--- 2900,2914 ----
    ENUM_BITFIELD(calling_abi) call_abi : 8;
  
    /* Nonzero if the function accesses a previous frame.  */
!   bool accesses_prev_frame : 1;
  
    /* Set by ix86_compute_frame_layout and used by prologue/epilogue
       expander to determine the style used.  */
!   bool use_fast_prologue_epilogue : 1;
  
    /* Nonzero if the current function calls pc thunk and
       must not use the red zone.  */
!   bool pc_thunk_call_expanded : 1;
  
    /* If true, the current function needs the default PIC register, not
       an alternate register (on x86) and must not use the red zone (on
*************** struct GTY(()) machine_function {
*** 2917,2933 ****
       if all such instructions are optimized away.  Use the
       ix86_current_function_calls_tls_descriptor macro for a better
       approximation.  */
!   BOOL_BITFIELD tls_descriptor_call_expanded_p : 1;
  
    /* True if TLS descriptor is called more than once.  */
!   BOOL_BITFIELD tls_descriptor_call_multiple_p : 1;
  
    /* If true, the current function has a STATIC_CHAIN is placed on the
       stack below the return address.  */
!   BOOL_BITFIELD static_chain_on_stack : 1;
  
    /* If true, it is safe to not save/restore DRAP register.  */
!   BOOL_BITFIELD no_drap_save_restore : 1;
  
    /* Function type.  */
    ENUM_BITFIELD(function_type) func_type : 2;
--- 2919,2935 ----
       if all such instructions are optimized away.  Use the
       ix86_current_function_calls_tls_descriptor macro for a better
       approximation.  */
!   bool tls_descriptor_call_expanded_p : 1;
  
    /* True if TLS descriptor is called more than once.  */
!   bool tls_descriptor_call_multiple_p : 1;
  
    /* If true, the current function has a STATIC_CHAIN is placed on the
       stack below the return address.  */
!   bool static_chain_on_stack : 1;
  
    /* If true, it is safe to not save/restore DRAP register.  */
!   bool no_drap_save_restore : 1;
  
    /* Function type.  */
    ENUM_BITFIELD(function_type) func_type : 2;
*************** struct GTY(()) machine_function {
*** 2937,2943 ****
  
    /* If true, the current function has local indirect jumps, like
       "indirect_jump" or "tablejump".  */
!   BOOL_BITFIELD has_local_indirect_jump : 1;
  
    /* How to generate function return.  */
    ENUM_BITFIELD(indirect_branch) function_return_type : 3;
--- 2939,2945 ----
  
    /* If true, the current function has local indirect jumps, like
       "indirect_jump" or "tablejump".  */
!   bool has_local_indirect_jump : 1;
  
    /* How to generate function return.  */
    ENUM_BITFIELD(indirect_branch) function_return_type : 3;
*************** struct GTY(()) machine_function {
*** 2950,2964 ****
       if there is scratch register available for indirect sibcall.  In
       64-bit, rax, r10 and r11 are scratch registers which aren't used to
       pass arguments and can be used for indirect sibcall.  */
!   BOOL_BITFIELD arg_reg_available : 1;
  
    /* If true, we're out-of-lining reg save/restore for regs clobbered
       by 64-bit ms_abi functions calling a sysv_abi function.  */
!   BOOL_BITFIELD call_ms2sysv : 1;
  
    /* If true, the incoming 16-byte aligned stack has an offset (of 8) and
       needs padding prior to out-of-line stub save/restore area.  */
!   BOOL_BITFIELD call_ms2sysv_pad_in : 1;
  
    /* This is the number of extra registers saved by stub (valid range is
       0-6). Each additional register is only saved/restored by the stubs
--- 2952,2966 ----
       if there is scratch register available for indirect sibcall.  In
       64-bit, rax, r10 and r11 are scratch registers which aren't used to
       pass arguments and can be used for indirect sibcall.  */
!   bool arg_reg_available : 1;
  
    /* If true, we're out-of-lining reg save/restore for regs clobbered
       by 64-bit ms_abi functions calling a sysv_abi function.  */
!   bool call_ms2sysv : 1;
  
    /* If true, the incoming 16-byte aligned stack has an offset (of 8) and
       needs padding prior to out-of-line stub save/restore area.  */
!   bool call_ms2sysv_pad_in : 1;
  
    /* This is the number of extra registers saved by stub (valid range is
       0-6). Each additional register is only saved/restored by the stubs
*************** struct GTY(()) machine_function {
*** 2967,2998 ****
    unsigned int call_ms2sysv_extra_regs:3;
  
    /* Nonzero if the function places outgoing arguments on stack.  */
!   BOOL_BITFIELD outgoing_args_on_stack : 1;
  
    /* If true, ENDBR or patchable area is queued at function entrance.  */
    ENUM_BITFIELD(queued_insn_type) insn_queued_at_entrance : 2;
  
    /* If true, the function label has been emitted.  */
!   BOOL_BITFIELD function_label_emitted : 1;
  
    /* True if the function needs a stack frame.  */
!   BOOL_BITFIELD stack_frame_required : 1;
  
    /* True if we should act silently, rather than raise an error for
       invalid calls.  */
!   BOOL_BITFIELD silent_p : 1;
  
    /* True if red zone is used.  */
!   BOOL_BITFIELD red_zone_used : 1;
  
    /* True if inline asm with redzone clobber has been seen.  */
!   BOOL_BITFIELD asm_redzone_clobber_seen : 1;
  
    /* True if this is a recursive function.  */
!   BOOL_BITFIELD recursive_function : 1;
  
    /* True if by_pieces op is currently in use.  */
!   BOOL_BITFIELD by_pieces_in_use : 1;
  
    /* The largest alignment, in bytes, of stack slot actually used.  */
    unsigned int max_used_stack_alignment;
--- 2969,3000 ----
    unsigned int call_ms2sysv_extra_regs:3;
  
    /* Nonzero if the function places outgoing arguments on stack.  */
!   bool outgoing_args_on_stack : 1;
  
    /* If true, ENDBR or patchable area is queued at function entrance.  */
    ENUM_BITFIELD(queued_insn_type) insn_queued_at_entrance : 2;
  
    /* If true, the function label has been emitted.  */
!   bool function_label_emitted : 1;
  
    /* True if the function needs a stack frame.  */
!   bool stack_frame_required : 1;
  
    /* True if we should act silently, rather than raise an error for
       invalid calls.  */
!   bool silent_p : 1;
  
    /* True if red zone is used.  */
!   bool red_zone_used : 1;
  
    /* True if inline asm with redzone clobber has been seen.  */
!   bool asm_redzone_clobber_seen : 1;
  
    /* True if this is a recursive function.  */
!   bool recursive_function : 1;
  
    /* True if by_pieces op is currently in use.  */
!   bool by_pieces_in_use : 1;
  
    /* The largest alignment, in bytes, of stack slot actually used.  */
    unsigned int max_used_stack_alignment;
diff -Nrcpad gcc-17-20260621/gcc/config/i386/i386.md gcc-17-20260628/gcc/config/i386/i386.md
*** gcc-17-20260621/gcc/config/i386/i386.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/i386.md	Sun Jun 28 22:32:07 2026
***************
*** 530,536 ****
  (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem,
  		    atom,slm,glm,haswell,generic,lujiazui,yongfeng,amdfam10,bdver1,
  		    bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4,
! 		    znver5,znver6,c86_4g_m4,c86_4g_m6,c86_4g_m7"
    (const (symbol_ref "ix86_schedule")))
  
  ;; A basic instruction type.  Refinements due to arguments to be
--- 530,536 ----
  (define_attr "cpu" "none,pentium,pentiumpro,geode,k6,athlon,k8,core2,nehalem,
  		    atom,slm,glm,haswell,generic,lujiazui,yongfeng,amdfam10,bdver1,
  		    bdver2,bdver3,bdver4,btver2,znver1,znver2,znver3,znver4,
! 		    znver5,znver6,c86_4g_m4,c86_4g_m6,c86_4g_m7,c86_4g_m8"
    (const (symbol_ref "ix86_schedule")))
  
  ;; A basic instruction type.  Refinements due to arguments to be
***************
*** 583,589 ****
  		    sse_noavx,sse2,sse2_noavx,sse3,sse3_noavx,sse4,sse4_noavx,
  		    avx,noavx,avx2,noavx2,bmi,bmi2,fma4,fma,avx512f,noavx512f,
  		    avx512bw,noavx512bw,avx512dq,noavx512dq,fma_or_avx512vl,
! 		    avx512vl,noavx512vl,avxvnni,avx512vnnivl,avx512fp16,avxifma,
  		    avx512ifmavl,avxneconvert,avx512bf16vl,vpclmulqdqvl,
  		    avx_noavx512f,avx_noavx512vl,vaes_avx512vl,noapx_nf,avx10_2"
    (const_string "base"))
--- 583,589 ----
  		    sse_noavx,sse2,sse2_noavx,sse3,sse3_noavx,sse4,sse4_noavx,
  		    avx,noavx,avx2,noavx2,bmi,bmi2,fma4,fma,avx512f,noavx512f,
  		    avx512bw,noavx512bw,avx512dq,noavx512dq,fma_or_avx512vl,
! 		    avx512vl,noavx512vl,avxvnni,avxvnniint8,avx512vnnivl,avx512fp16,avxifma,
  		    avx512ifmavl,avxneconvert,avx512bf16vl,vpclmulqdqvl,
  		    avx_noavx512f,avx_noavx512vl,vaes_avx512vl,noapx_nf,avx10_2"
    (const_string "base"))
***************
*** 967,972 ****
--- 967,973 ----
  	 (eq_attr "isa" "avx512vl") (symbol_ref "TARGET_AVX512VL")
  	 (eq_attr "isa" "noavx512vl") (symbol_ref "!TARGET_AVX512VL")
  	 (eq_attr "isa" "avxvnni") (symbol_ref "TARGET_AVXVNNI")
+ 	 (eq_attr "isa" "avxvnniint8") (symbol_ref "TARGET_AVXVNNIINT8")
  	 (eq_attr "isa" "avx512vnnivl")
  	   (symbol_ref "TARGET_AVX512VNNI && TARGET_AVX512VL")
  	 (eq_attr "isa" "avx512fp16")
***************
*** 1431,1437 ****
  (include "lujiazui.md")
  (include "yongfeng.md")
  (include "c86-4g.md")
! (include "c86-4g-m7.md")
  
  
  ;; Operand and operator predicates and constraints
--- 1432,1438 ----
  (include "lujiazui.md")
  (include "yongfeng.md")
  (include "c86-4g.md")
! (include "c86-4g-m7m8.md")
  
  
  ;; Operand and operator predicates and constraints
***************
*** 26546,26552 ****
     (use (match_operand:SI 8 ""))]
    ""
  {
!   if (ix86_expand_movmem (operands))
      DONE;
    FAIL;
  })
--- 26547,26553 ----
     (use (match_operand:SI 8 ""))]
    ""
  {
!   if (ix86_expand_set_or_movmem (operands, false, false))
      DONE;
    FAIL;
  })
***************
*** 29004,29013 ****
            && TARGET_SPLIT_LONG_MOVES
            && get_attr_length (insn) >= ix86_cur_cost ()->large_insn))
     && peep2_regno_dead_p (0, FLAGS_REG)"
!   [(parallel [(set (match_dup 2) (const_int 0))
! 	      (clobber (reg:CC FLAGS_REG))])
!    (set (match_dup 0) (match_dup 1))]
!   "operands[2] = gen_lowpart (SImode, operands[1]);")
  
  (define_peephole2
    [(match_scratch:SWI124 2 "<r>")
--- 29005,29015 ----
            && TARGET_SPLIT_LONG_MOVES
            && get_attr_length (insn) >= ix86_cur_cost ()->large_insn))
     && peep2_regno_dead_p (0, FLAGS_REG)"
!   [(const_int 0)]
! {
!   ix86_expand_lcp_stall_peephole (curr_insn, operands, true);
!   DONE;
! })
  
  (define_peephole2
    [(match_scratch:SWI124 2 "<r>")
***************
*** 29018,29025 ****
         && TARGET_LCP_STALL)
         || (TARGET_SPLIT_LONG_MOVES
            && get_attr_length (insn) >= ix86_cur_cost ()->large_insn))"
!   [(set (match_dup 2) (match_dup 1))
!    (set (match_dup 0) (match_dup 2))])
  
  ;; Don't compare memory with zero, load and use a test instead.
  (define_peephole2
--- 29020,29030 ----
         && TARGET_LCP_STALL)
         || (TARGET_SPLIT_LONG_MOVES
            && get_attr_length (insn) >= ix86_cur_cost ()->large_insn))"
!   [(const_int 0)]
! {
!   ix86_expand_lcp_stall_peephole (curr_insn, operands, false);
!   DONE;
! })
  
  ;; Don't compare memory with zero, load and use a test instead.
  (define_peephole2
diff -Nrcpad gcc-17-20260621/gcc/config/i386/mmx.md gcc-17-20260628/gcc/config/i386/mmx.md
*** gcc-17-20260621/gcc/config/i386/mmx.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/mmx.md	Sun Jun 28 22:32:07 2026
***************
*** 2313,2320 ****
  (define_expand "vcond_mask_<mode>v4hi"
    [(set (match_operand:V4F_64 0 "register_operand")
  	(vec_merge:V4F_64
! 	  (match_operand:V4F_64 1 "register_operand")
! 	  (match_operand:V4F_64 2 "register_operand")
  	  (match_operand:V4HI 3  "register_operand")))]
    "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
  {
--- 2313,2320 ----
  (define_expand "vcond_mask_<mode>v4hi"
    [(set (match_operand:V4F_64 0 "register_operand")
  	(vec_merge:V4F_64
! 	  (match_operand:V4F_64 1 "vector_or_const_vector_operand")
! 	  (match_operand:V4F_64 2 "vector_or_const_vector_operand")
  	  (match_operand:V4HI 3  "register_operand")))]
    "TARGET_MMX_WITH_SSE && TARGET_SSE4_1"
  {
***************
*** 2362,2369 ****
  (define_expand "vcond_mask_<mode>v2hi"
    [(set (match_operand:V2F_32 0 "register_operand")
  	(vec_merge:V2F_32
! 	  (match_operand:V2F_32 1 "register_operand")
! 	  (match_operand:V2F_32 2 "register_operand")
  	  (match_operand:V2HI 3 "register_operand")))]
    "TARGET_SSE4_1"
  {
--- 2362,2369 ----
  (define_expand "vcond_mask_<mode>v2hi"
    [(set (match_operand:V2F_32 0 "register_operand")
  	(vec_merge:V2F_32
! 	  (match_operand:V2F_32 1 "vector_or_const_vector_operand")
! 	  (match_operand:V2F_32 2 "vector_or_const_vector_operand")
  	  (match_operand:V2HI 3 "register_operand")))]
    "TARGET_SSE4_1"
  {
***************
*** 4313,4320 ****
  (define_expand "vcond_mask_<mode><mmxintvecmodelower>"
    [(set (match_operand:MMXMODE124 0 "register_operand")
  	(vec_merge:MMXMODE124
! 	  (match_operand:MMXMODE124 1 "register_operand")
! 	  (match_operand:MMXMODE124 2 "register_operand")
  	  (match_operand:<mmxintvecmode> 3 "register_operand")))]
    "TARGET_MMX_WITH_SSE"
  {
--- 4313,4320 ----
  (define_expand "vcond_mask_<mode><mmxintvecmodelower>"
    [(set (match_operand:MMXMODE124 0 "register_operand")
  	(vec_merge:MMXMODE124
! 	  (match_operand:MMXMODE124 1 "vector_or_const_vector_operand")
! 	  (match_operand:MMXMODE124 2 "vector_or_const_vector_operand")
  	  (match_operand:<mmxintvecmode> 3 "register_operand")))]
    "TARGET_MMX_WITH_SSE"
  {
***************
*** 4326,4333 ****
  (define_expand "vcond_mask_<mode><mode>"
    [(set (match_operand:VI_16_32 0 "register_operand")
  	(vec_merge:VI_16_32
! 	  (match_operand:VI_16_32 1 "register_operand")
! 	  (match_operand:VI_16_32 2 "register_operand")
  	  (match_operand:VI_16_32 3 "register_operand")))]
    "TARGET_SSE2"
  {
--- 4326,4333 ----
  (define_expand "vcond_mask_<mode><mode>"
    [(set (match_operand:VI_16_32 0 "register_operand")
  	(vec_merge:VI_16_32
! 	  (match_operand:VI_16_32 1 "vector_or_const_vector_operand")
! 	  (match_operand:VI_16_32 2 "vector_or_const_vector_operand")
  	  (match_operand:VI_16_32 3 "register_operand")))]
    "TARGET_SSE2"
  {
diff -Nrcpad gcc-17-20260621/gcc/config/i386/predicates.md gcc-17-20260628/gcc/config/i386/predicates.md
*** gcc-17-20260621/gcc/config/i386/predicates.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/predicates.md	Sun Jun 28 22:32:07 2026
***************
*** 1288,1301 ****
         (match_operand 0 "vector_memory_operand")
         (match_code "const_vector")))
  
- ; Return true when OP is register_operand, vector_memory_operand,
- ; const_vector zero or const_vector all ones.
- (define_predicate "vector_or_0_or_1s_operand"
-   (ior (match_operand 0 "register_operand")
-        (match_operand 0 "vector_memory_operand")
-        (match_operand 0 "const0_operand")
-        (match_operand 0 "int_float_vector_all_ones_operand")))
- 
  (define_predicate "bcst_mem_operand"
    (and (match_code "vec_duplicate")
         (and (match_test "TARGET_AVX512F")
--- 1288,1293 ----
diff -Nrcpad gcc-17-20260621/gcc/config/i386/prfchwintrin.h gcc-17-20260628/gcc/config/i386/prfchwintrin.h
*** gcc-17-20260621/gcc/config/i386/prfchwintrin.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/prfchwintrin.h	Sun Jun 28 22:32:07 2026
***************
*** 29,37 ****
  #define _PRFCHWINTRIN_H_INCLUDED
  
  extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
! _m_prefetchw (void *__P)
  {
!   __builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */);
  }
  
  #endif /* _PRFCHWINTRIN_H_INCLUDED */
--- 29,37 ----
  #define _PRFCHWINTRIN_H_INCLUDED
  
  extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
! _m_prefetchw (volatile const void *__P)
  {
!   __builtin_prefetch ((const void *) __P, 1, 3 /* _MM_HINT_T0 */);
  }
  
  #endif /* _PRFCHWINTRIN_H_INCLUDED */
diff -Nrcpad gcc-17-20260621/gcc/config/i386/sol2.h gcc-17-20260628/gcc/config/i386/sol2.h
*** gcc-17-20260621/gcc/config/i386/sol2.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/sol2.h	Sun Jun 28 22:32:07 2026
*************** along with GCC; see the file COPYING3.
*** 26,42 ****
  #undef STACK_REALIGN_DEFAULT
  #define STACK_REALIGN_DEFAULT (TARGET_64BIT ? 0 : 1)
  
- /* Old versions of the Solaris assembler cannot handle the difference of
-    labels in different sections, so force DW_EH_PE_datarel if so.  */
- #ifndef HAVE_AS_IX86_DIFF_SECT_DELTA
- #undef ASM_PREFERRED_EH_DATA_FORMAT
- #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL)			\
-   (flag_pic ? ((GLOBAL ? DW_EH_PE_indirect : 0)				\
- 	       | (TARGET_64BIT ? DW_EH_PE_pcrel | DW_EH_PE_sdata4	\
- 		  : DW_EH_PE_datarel))					\
-    : DW_EH_PE_absptr)
- #endif
- 
  /* The Solaris linker will not merge a read-only .eh_frame section
     with a read-write .eh_frame section.  None of the encodings used
     with non-PIC code require runtime relocations.  In 64-bit mode,
--- 26,31 ----
*************** along with GCC; see the file COPYING3.
*** 105,132 ****
  #undef LOCAL_LABEL_PREFIX
  #define LOCAL_LABEL_PREFIX "."
  
- /* The 32-bit Solaris assembler does not support .quad.  Do not use it.  */
- #ifndef HAVE_AS_IX86_QUAD
- #undef ASM_QUAD
- #endif
- 
- /* The native Solaris assembler can't calculate the difference between
-    symbols in different sections, which causes problems for -fPIC jump
-    tables in .rodata.  */
- #ifndef HAVE_AS_IX86_DIFF_SECT_DELTA
- #undef JUMP_TABLES_IN_TEXT_SECTION
- #define JUMP_TABLES_IN_TEXT_SECTION 1
- 
- /* The native Solaris assembler cannot handle the SYMBOL-. syntax, but
-    requires SYMBOL@rel/@rel64 instead.  */
- #define ASM_OUTPUT_DWARF_PCREL(FILE, SIZE, LABEL)	\
-   do {							\
-     fputs (integer_asm_op (SIZE, FALSE), FILE);		\
-     assemble_name (FILE, LABEL);			\
-     fputs (SIZE == 8 ? "@rel64" : "@rel", FILE);	\
-   } while (0)
- #endif
- 
  /* The Solaris assembler wants a .local for non-exported aliases.  */
  #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET)	\
    do {							\
--- 94,99 ----
diff -Nrcpad gcc-17-20260621/gcc/config/i386/sse.md gcc-17-20260628/gcc/config/i386/sse.md
*** gcc-17-20260621/gcc/config/i386/sse.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/sse.md	Sun Jun 28 22:32:07 2026
***************
*** 5530,5537 ****
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VI_256_AVX2 0 "register_operand")
  	(vec_merge:VI_256_AVX2
! 	  (match_operand:VI_256_AVX2 1 "nonimm_or_0_or_1s_operand")
! 	  (match_operand:VI_256_AVX2 2 "nonimm_or_0_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_AVX"
  {
--- 5530,5537 ----
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VI_256_AVX2 0 "register_operand")
  	(vec_merge:VI_256_AVX2
! 	  (match_operand:VI_256_AVX2 1 "vector_or_const_vector_operand")
! 	  (match_operand:VI_256_AVX2 2 "vector_or_const_vector_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_AVX"
  {
***************
*** 5543,5550 ****
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VI_128 0 "register_operand")
  	(vec_merge:VI_128
! 	  (match_operand:VI_128 1 "vector_or_0_or_1s_operand")
! 	  (match_operand:VI_128 2 "nonimm_or_0_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_SSE2"
  {
--- 5543,5550 ----
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VI_128 0 "register_operand")
  	(vec_merge:VI_128
! 	  (match_operand:VI_128 1 "vector_or_const_vector_operand")
! 	  (match_operand:VI_128 2 "vector_or_const_vector_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_SSE2"
  {
***************
*** 5556,5563 ****
  (define_expand "vcond_mask_v1tiv1ti"
    [(set (match_operand:V1TI 0 "register_operand")
  	(vec_merge:V1TI
! 	  (match_operand:V1TI 1 "vector_or_0_or_1s_operand")
! 	  (match_operand:V1TI 2 "nonimm_or_0_operand")
  	  (match_operand:V1TI 3 "register_operand")))]
    "TARGET_SSE2"
  {
--- 5556,5563 ----
  (define_expand "vcond_mask_v1tiv1ti"
    [(set (match_operand:V1TI 0 "register_operand")
  	(vec_merge:V1TI
! 	  (match_operand:V1TI 1 "vector_or_const_vector_operand")
! 	  (match_operand:V1TI 2 "vector_or_const_vector_operand")
  	  (match_operand:V1TI 3 "register_operand")))]
    "TARGET_SSE2"
  {
***************
*** 5569,5576 ****
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VF_256 0 "register_operand")
  	(vec_merge:VF_256
! 	  (match_operand:VF_256 1 "nonimm_or_0_or_1s_operand")
! 	  (match_operand:VF_256 2 "nonimm_or_0_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_AVX"
  {
--- 5569,5576 ----
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VF_256 0 "register_operand")
  	(vec_merge:VF_256
! 	  (match_operand:VF_256 1 "vector_or_const_vector_operand")
! 	  (match_operand:VF_256 2 "vector_or_const_vector_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_AVX"
  {
***************
*** 5582,5589 ****
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VF_128 0 "register_operand")
  	(vec_merge:VF_128
! 	  (match_operand:VF_128 1 "vector_or_0_or_1s_operand")
! 	  (match_operand:VF_128 2 "nonimm_or_0_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_SSE"
  {
--- 5582,5589 ----
  (define_expand "vcond_mask_<mode><sseintvecmodelower>"
    [(set (match_operand:VF_128 0 "register_operand")
  	(vec_merge:VF_128
! 	  (match_operand:VF_128 1 "vector_or_const_vector_operand")
! 	  (match_operand:VF_128 2 "vector_or_const_vector_operand")
  	  (match_operand:<sseintvecmode> 3 "register_operand")))]
    "TARGET_SSE"
  {
***************
*** 13810,13827 ****
     (set_attr "mode" "V2DF,V2DF,V1DF,V1DF,V1DF")])
  
  (define_insn "avx512f_movddup512<mask_name>"
!   [(set (match_operand:V8DF 0 "register_operand" "=v")
  	(vec_select:V8DF
  	  (vec_concat:V16DF
! 	    (match_operand:V8DF 1 "nonimmediate_operand" "m")
  	    (match_dup 1))
  	  (parallel [(const_int 0) (const_int 8)
  		     (const_int 2) (const_int 10)
  		     (const_int 4) (const_int 12)
  		     (const_int 6) (const_int 14)])))]
    "TARGET_AVX512F"
!   "vmovddup\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
!   [(set_attr "type" "ssemov")
     (set_attr "prefix" "evex")
     (set_attr "mode" "V8DF")])
  
--- 13810,13829 ----
     (set_attr "mode" "V2DF,V2DF,V1DF,V1DF,V1DF")])
  
  (define_insn "avx512f_movddup512<mask_name>"
!   [(set (match_operand:V8DF 0 "register_operand" "=v,v")
  	(vec_select:V8DF
  	  (vec_concat:V16DF
! 	    (match_operand:V8DF 1 "nonimmediate_operand" "v,m")
  	    (match_dup 1))
  	  (parallel [(const_int 0) (const_int 8)
  		     (const_int 2) (const_int 10)
  		     (const_int 4) (const_int 12)
  		     (const_int 6) (const_int 14)])))]
    "TARGET_AVX512F"
!   "@
!    vunpcklpd\t{%1, %1, %0<mask_operand2>|%0<mask_operand2>, %1, %1}
!    vmovddup\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
!   [(set_attr "type" "sselog1,ssemov")
     (set_attr "prefix" "evex")
     (set_attr "mode" "V8DF")])
  
***************
*** 13843,13858 ****
  
  ;; Recall that the 256-bit unpck insns only shuffle within their lanes.
  (define_insn "avx_movddup256<mask_name>"
!   [(set (match_operand:V4DF 0 "register_operand" "=v")
  	(vec_select:V4DF
  	  (vec_concat:V8DF
! 	    (match_operand:V4DF 1 "nonimmediate_operand" "m")
  	    (match_dup 1))
  	  (parallel [(const_int 0) (const_int 4)
  		     (const_int 2) (const_int 6)])))]
    "TARGET_AVX && <mask_avx512vl_condition>"
!   "vmovddup\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
!   [(set_attr "type" "ssemov")
     (set_attr "prefix" "<mask_prefix>")
     (set_attr "mode" "V4DF")])
  
--- 13845,13862 ----
  
  ;; Recall that the 256-bit unpck insns only shuffle within their lanes.
  (define_insn "avx_movddup256<mask_name>"
!   [(set (match_operand:V4DF 0 "register_operand" "=v,v")
  	(vec_select:V4DF
  	  (vec_concat:V8DF
! 	    (match_operand:V4DF 1 "nonimmediate_operand" "v,m")
  	    (match_dup 1))
  	  (parallel [(const_int 0) (const_int 4)
  		     (const_int 2) (const_int 6)])))]
    "TARGET_AVX && <mask_avx512vl_condition>"
!   "@
!    vunpcklpd\t{%1, %1, %0<mask_operand2>|%0<mask_operand2>, %1, %1}
!    vmovddup\t{%1, %0<mask_operand2>|%0<mask_operand2>, %1}"
!   [(set_attr "type" "sselog1,ssemov")
     (set_attr "prefix" "<mask_prefix>")
     (set_attr "mode" "V4DF")])
  
***************
*** 29765,29770 ****
--- 29769,29846 ----
    DONE;
  })
  
+ ;; vec_cbranch modes with fewer than 8 elements (integer + floating-point).
+ ;; Limited to AVX512VL+DQ so that kortestb is available for the QImode mask.
+ (define_mode_iterator V_ANY_CBRANCH
+    [(V4SI "TARGET_AVX512VL && TARGET_AVX512DQ")
+     (V2DI "TARGET_AVX512VL && TARGET_AVX512DQ")
+     (V4DI "TARGET_AVX512VL && TARGET_AVX512DQ")
+     (V4SF "TARGET_AVX512VL && TARGET_AVX512DQ")
+     (V4DF "TARGET_AVX512VL && TARGET_AVX512DQ")
+     (V2DF "TARGET_AVX512VL && TARGET_AVX512DQ")])
+ 
+ ;; Masked variant of vec_cbranch_any.  Eliminates the redundant kmov + and
+ ;; + test sequence the vectorizer would otherwise emit when an early-break
+ ;; is guarded by a loop mask.
+ (define_expand "cond_vec_cbranch_any<mode>"
+   [(set (pc)
+ 	(if_then_else
+ 	  (match_operator 0 ""
+ 	    [(match_operand:<avx512fmaskmode> 1 "register_operand")
+ 	     (match_operand:V_ANY_CBRANCH 2 "register_operand")
+ 	     (match_operand:V_ANY_CBRANCH 3 "nonimmediate_operand")])
+ 	  (label_ref (match_operand 4 ""))
+ 	  (pc)))]
+  ""
+ {
+   machine_mode mask_mode = <avx512fmaskmode>mode;
+   rtx cmp_mask = gen_reg_rtx (mask_mode);
+   rtx and_mask = gen_reg_rtx (mask_mode);
+ 
+   emit_insn (gen_vec_cmp<mode><avx512fmaskmodelower> (cmp_mask,
+ 						      operands[0],
+ 						      operands[2],
+ 						      operands[3]));
+   and_mask = expand_simple_binop (mask_mode, AND, cmp_mask, operands[1],
+ 				  and_mask, 1, OPTAB_DIRECT);
+ 
+   rtx cc_reg = gen_rtx_REG (CCZmode, FLAGS_REG);
+   emit_insn (gen_rtx_SET (cc_reg,
+ 			  gen_rtx_COMPARE (CCZmode, and_mask, const0_rtx)));
+   ix86_expand_branch (NE, cc_reg, const0_rtx, operands[4]);
+   DONE;
+ })
+ 
+ ;; Reached when the middle-end reverses an NE comparison to EQ and swaps the
+ ;; branch labels.
+ (define_expand "cond_vec_cbranch_all<mode>"
+   [(set (pc)
+ 	(if_then_else
+ 	  (match_operator 0 ""
+ 	    [(match_operand:<avx512fmaskmode> 1 "register_operand")
+ 	     (match_operand:V_ANY_CBRANCH 2 "register_operand")
+ 	     (match_operand:V_ANY_CBRANCH 3 "nonimmediate_operand")])
+ 	  (label_ref (match_operand 4 ""))
+ 	  (pc)))]
+  ""
+ {
+   machine_mode mask_mode = <avx512fmaskmode>mode;
+   rtx cmp_mask = gen_reg_rtx (mask_mode);
+   rtx and_mask = gen_reg_rtx (mask_mode);
+ 
+   emit_insn (gen_vec_cmp<mode><avx512fmaskmodelower> (cmp_mask,
+ 						      operands[0],
+ 						      operands[2],
+ 						      operands[3]));
+   and_mask = expand_simple_binop (mask_mode, AND, cmp_mask, operands[1],
+ 				  and_mask, 1, OPTAB_DIRECT);
+ 
+   rtx cc_reg = gen_rtx_REG (CCZmode, FLAGS_REG);
+   emit_insn (gen_rtx_SET (cc_reg,
+ 			  gen_rtx_COMPARE (CCZmode, and_mask, const0_rtx)));
+   ix86_expand_branch (EQ, cc_reg, const0_rtx, operands[4]);
+   DONE;
+ })
  
  (define_insn_and_split "avx_<castmode><avxsizesuffix>_<castmode>"
    [(set (match_operand:AVX256MODE2P 0 "nonimmediate_operand" "=x,m")
***************
*** 32548,32562 ****
  })
  
  (define_insn "vpdp<vpdotprodtype>_<mode>"
!   [(set (match_operand:VI4_AVX 0 "register_operand" "=v")
  	(unspec:VI4_AVX
! 	  [(match_operand:VI4_AVX 1 "register_operand" "0")
! 	   (match_operand:VI4_AVX 2 "register_operand" "v")
! 	   (match_operand:VI4_AVX 3 "nonimmediate_operand" "vm")]
  	  VPDOTPROD))]
    "TARGET_AVXVNNIINT8 || TARGET_AVX10_2"
    "vpdp<vpdotprodtype>\t{%3, %2, %0|%0, %2, %3}"
!    [(set_attr "prefix" "maybe_evex")])
  
  (define_insn "vpdp<vpdotprodtype>_v16si"
    [(set (match_operand:V16SI 0 "register_operand" "=v")
--- 32624,32640 ----
  })
  
  (define_insn "vpdp<vpdotprodtype>_<mode>"
!   [(set (match_operand:VI4_AVX 0 "register_operand" "=x,v")
  	(unspec:VI4_AVX
! 	  [(match_operand:VI4_AVX 1 "register_operand" "0,0")
! 	   (match_operand:VI4_AVX 2 "register_operand" "x,v")
! 	   (match_operand:VI4_AVX 3 "nonimmediate_operand" "xjm,vm")]
  	  VPDOTPROD))]
    "TARGET_AVXVNNIINT8 || TARGET_AVX10_2"
    "vpdp<vpdotprodtype>\t{%3, %2, %0|%0, %2, %3}"
!    [(set_attr "prefix" "maybe_evex")
!     (set_attr "addr" "gpr16,*")
!     (set_attr "isa" "avxvnniint8,avx10_2")])
  
  (define_insn "vpdp<vpdotprodtype>_v16si"
    [(set (match_operand:V16SI 0 "register_operand" "=v")
diff -Nrcpad gcc-17-20260621/gcc/config/i386/x86-tune-costs.h gcc-17-20260628/gcc/config/i386/x86-tune-costs.h
*** gcc-17-20260621/gcc/config/i386/x86-tune-costs.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/x86-tune-costs.h	Sun Jun 28 22:32:07 2026
*************** struct processor_costs generic_cost = {
*** 4274,4280 ****
    "16",					/* Func alignment.  */
    4,					/* Small unroll limit.  */
    2,					/* Small unroll factor.  */
!   COSTS_N_INSNS (2),			/* Branch mispredict scale.  */
  };
  
  /* core_cost should produce code tuned for Core family of CPUs.  */
--- 4274,4280 ----
    "16",					/* Func alignment.  */
    4,					/* Small unroll limit.  */
    2,					/* Small unroll factor.  */
!   COSTS_N_INSNS (2) + 3,		/* Branch mispredict scale.  */
  };
  
  /* core_cost should produce code tuned for Core family of CPUs.  */
*************** struct processor_costs c86_4g_m7_cost =
*** 4720,4722 ****
--- 4720,4724 ----
    2,					/* Small unroll factor.  */
    COSTS_N_INSNS (2),			/* Branch mispredict scale.  */
  };
+ 
+ struct processor_costs c86_4g_m8_cost = c86_4g_m7_cost;
diff -Nrcpad gcc-17-20260621/gcc/config/i386/x86-tune-sched.cc gcc-17-20260628/gcc/config/i386/x86-tune-sched.cc
*** gcc-17-20260621/gcc/config/i386/x86-tune-sched.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/x86-tune-sched.cc	Sun Jun 28 22:32:07 2026
*************** ix86_issue_rate (void)
*** 94,99 ****
--- 94,100 ----
      case PROCESSOR_C86_4G_M4:
      case PROCESSOR_C86_4G_M6:
      case PROCESSOR_C86_4G_M7:
+     case PROCESSOR_C86_4G_M8:
        return 4;
  
      case PROCESSOR_ICELAKE_CLIENT:
*************** ix86_adjust_cost (rtx_insn *insn, int de
*** 446,451 ****
--- 447,453 ----
      case PROCESSOR_C86_4G_M4:
      case PROCESSOR_C86_4G_M6:
      case PROCESSOR_C86_4G_M7:
+     case PROCESSOR_C86_4G_M8:
        /* Stack engine allows to execute push&pop instructions in parall.  */
        if ((insn_type == TYPE_PUSH || insn_type == TYPE_POP)
  	  && (dep_insn_type == TYPE_PUSH || dep_insn_type == TYPE_POP))
diff -Nrcpad gcc-17-20260621/gcc/config/i386/x86-tune.def gcc-17-20260628/gcc/config/i386/x86-tune.def
*** gcc-17-20260621/gcc/config/i386/x86-tune.def	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/i386/x86-tune.def	Sun Jun 28 22:32:07 2026
*************** DEF_TUNE (X86_TUNE_USE_GATHER_2PARTS, "u
*** 549,555 ****
  /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts",
! 	  ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7))
  
  
  /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4
--- 549,555 ----
  /* X86_TUNE_USE_SCATTER_2PARTS: Use scater instructions for vectors with 2
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_2PARTS, "use_scatter_2parts",
! 	  ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7 | m_C86_4G_M8))
  
  
  /* X86_TUNE_USE_GATHER_4PARTS: Use gather instructions for vectors with 4
*************** DEF_TUNE (X86_TUNE_USE_GATHER_4PARTS, "u
*** 562,568 ****
  /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts",
! 	  ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7))
  
  /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more
     elements.  */
--- 562,568 ----
  /* X86_TUNE_USE_SCATTER_4PARTS: Use scater instructions for vectors with 4
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_4PARTS, "use_scatter_4parts",
! 	  ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7 | m_C86_4G_M8))
  
  /* X86_TUNE_USE_GATHER: Use gather instructions for vectors with 8 or more
     elements.  */
*************** DEF_TUNE (X86_TUNE_USE_GATHER_8PARTS, "u
*** 573,579 ****
  /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts",
! 	  ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7))
  
  /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or
     smaller FMA chain.  */
--- 573,579 ----
  /* X86_TUNE_USE_SCATTER: Use scater instructions for vectors with 8 or more
     elements.  */
  DEF_TUNE (X86_TUNE_USE_SCATTER_8PARTS, "use_scatter_8parts",
! 	  ~(m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7 | m_C86_4G_M8))
  
  /* X86_TUNE_AVOID_128FMA_CHAINS: Avoid creating loops with tight 128bit or
     smaller FMA chain.  */
*************** DEF_TUNE (X86_TUNE_SSE_MOVCC_USE_BLENDV,
*** 608,614 ****
  /* X86_TUNE_V4SI_REDUCTION_PREFER_SHUFD: Prefer pshuf to reduce V16QI,
     V8HI, V8HI, V4SI, V4FI, V2DI modes when lshr are costlier. */
  DEF_TUNE (X86_TUNE_SSE_REDUCTION_PREFER_PSHUF,
!    "sse_reduction_prefer_pshuf", m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7)
  
  /*****************************************************************************/
  /* AVX instruction selection tuning (some of SSE flags affects AVX, too)     */
--- 608,615 ----
  /* X86_TUNE_V4SI_REDUCTION_PREFER_SHUFD: Prefer pshuf to reduce V16QI,
     V8HI, V8HI, V4SI, V4FI, V2DI modes when lshr are costlier. */
  DEF_TUNE (X86_TUNE_SSE_REDUCTION_PREFER_PSHUF,
!    "sse_reduction_prefer_pshuf", m_ZNVER4 | m_ZNVER5 | m_ZNVER6
! 				  | m_C86_4G_M7 | m_C86_4G_M8)
  
  /*****************************************************************************/
  /* AVX instruction selection tuning (some of SSE flags affects AVX, too)     */
*************** DEF_TUNE (X86_TUNE_AVX256_AVOID_VEC_PERM
*** 644,654 ****
  
  /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX512 ops are split into two AVX256 ops.  */
  DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, "avx512_split_regs", m_ZNVER4
! 	  | m_C86_4G_M7)
  
  /* X86_TUNE_AVX512_AVOID_VEC_PERM: Avoid using 512-bit cross-lane
     vector permutation instructions in the auto-vectorizer.  */
! DEF_TUNE (X86_TUNE_AVX512_AVOID_VEC_PERM, "avx512_avoid_vec_perm", m_C86_4G_M7)
  
  /* It's better to align MOVE_MAX with prefer_vector_width to reduce
     risk of STLF stalls(small store followed by big load.)  */
--- 645,656 ----
  
  /* X86_TUNE_AVX256_SPLIT_REGS: if true, AVX512 ops are split into two AVX256 ops.  */
  DEF_TUNE (X86_TUNE_AVX512_SPLIT_REGS, "avx512_split_regs", m_ZNVER4
! 	  | m_C86_4G_M7 | m_C86_4G_M8)
  
  /* X86_TUNE_AVX512_AVOID_VEC_PERM: Avoid using 512-bit cross-lane
     vector permutation instructions in the auto-vectorizer.  */
! DEF_TUNE (X86_TUNE_AVX512_AVOID_VEC_PERM, "avx512_avoid_vec_perm",
! 	  m_C86_4G_M7 | m_C86_4G_M8)
  
  /* It's better to align MOVE_MAX with prefer_vector_width to reduce
     risk of STLF stalls(small store followed by big load.)  */
*************** DEF_TUNE (X86_TUNE_AVX256_MOVE_BY_PIECES
*** 661,667 ****
  /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces",
! 	   m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7)
  
  /* X86_TUNE_AVX512_TWO_EPILOGUES: Use two vector epilogues for 512-bit
     vectorized loops.  */
--- 663,669 ----
  /* X86_TUNE_AVX512_MOVE_BY_PIECES: Optimize move_by_pieces with 512-bit
     AVX instructions.  */
  DEF_TUNE (X86_TUNE_AVX512_MOVE_BY_PIECES, "avx512_move_by_pieces",
! 	   m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7 | m_C86_4G_M8)
  
  /* X86_TUNE_AVX512_TWO_EPILOGUES: Use two vector epilogues for 512-bit
     vectorized loops.  */
*************** DEF_TUNE (X86_TUNE_AVX512_TWO_EPILOGUES,
*** 671,677 ****
  /* X86_TUNE_AVX512_MAKED_EPILOGUES: Use two masked vector epilogues
     when fit.  */
  DEF_TUNE (X86_TUNE_AVX512_MASKED_EPILOGUES, "avx512_masked_epilogues",
! 	  m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7)
  
  /*****************************************************************************/
  /*****************************************************************************/
--- 673,679 ----
  /* X86_TUNE_AVX512_MAKED_EPILOGUES: Use two masked vector epilogues
     when fit.  */
  DEF_TUNE (X86_TUNE_AVX512_MASKED_EPILOGUES, "avx512_masked_epilogues",
! 	  m_ZNVER4 | m_ZNVER5 | m_ZNVER6 | m_C86_4G_M7 | m_C86_4G_M8)
  
  /*****************************************************************************/
  /*****************************************************************************/
diff -Nrcpad gcc-17-20260621/gcc/config/loongarch/loongarch.cc gcc-17-20260628/gcc/config/loongarch/loongarch.cc
*** gcc-17-20260621/gcc/config/loongarch/loongarch.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/loongarch/loongarch.cc	Sun Jun 28 22:32:07 2026
*************** loongarch_vectorize_vec_perm_const (mach
*** 9999,10009 ****
  
  static int
  loongarch_cpu_sched_reassociation_width (struct loongarch_target *target,
! 					 unsigned int opc, machine_mode mode)
  {
-   /* unreferenced argument */
-   (void) opc;
- 
    switch (target->cpu_tune)
      {
      case TUNE_GENERIC:
--- 9999,10006 ----
  
  static int
  loongarch_cpu_sched_reassociation_width (struct loongarch_target *target,
! 					 tree_code opc, machine_mode mode)
  {
    switch (target->cpu_tune)
      {
      case TUNE_GENERIC:
*************** loongarch_cpu_sched_reassociation_width
*** 10041,10047 ****
  /* Implement TARGET_SCHED_REASSOCIATION_WIDTH.  */
  
  static int
! loongarch_sched_reassociation_width (unsigned int opc, machine_mode mode)
  {
    return loongarch_cpu_sched_reassociation_width (&la_target, opc, mode);
  }
--- 10038,10044 ----
  /* Implement TARGET_SCHED_REASSOCIATION_WIDTH.  */
  
  static int
! loongarch_sched_reassociation_width (tree_code opc, machine_mode mode)
  {
    return loongarch_cpu_sched_reassociation_width (&la_target, opc, mode);
  }
diff -Nrcpad gcc-17-20260621/gcc/config/mips/mips.cc gcc-17-20260628/gcc/config/mips/mips.cc
*** gcc-17-20260621/gcc/config/mips/mips.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/mips/mips.cc	Sun Jun 28 22:32:07 2026
*************** mips_expand_msa_reduc (rtx (*fn) (rtx, r
*** 22328,22334 ****
  /* Implement TARGET_SCHED_REASSOCIATION_WIDTH.  */
  
  static int
! mips_sched_reassociation_width (unsigned int opc ATTRIBUTE_UNUSED,
  				machine_mode mode)
  {
    if (MSA_SUPPORTED_MODE_P (mode))
--- 22328,22334 ----
  /* Implement TARGET_SCHED_REASSOCIATION_WIDTH.  */
  
  static int
! mips_sched_reassociation_width (tree_code opc ATTRIBUTE_UNUSED,
  				machine_mode mode)
  {
    if (MSA_SUPPORTED_MODE_P (mode))
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/arch-canonicalize gcc-17-20260628/gcc/config/riscv/arch-canonicalize
*** gcc-17-20260621/gcc/config/riscv/arch-canonicalize	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/arch-canonicalize	Sun Jun 28 22:32:07 2026
*************** def evaluate_conditional_dependency(ext,
*** 226,234 ****
    else:
      # Report error for unhandled conditional dependencies
      import sys
!     print(f"ERROR: Unhandled conditional dependency: '{ext_name}' with condition:", file=sys.stderr)
!     print(f"  Condition code: {condition[:100]}...", file=sys.stderr)
!     print(f"  Current context: xlen={xlen}, exts={sorted(current_exts)}", file=sys.stderr)
      # For now, return False to be safe
      return False
  
--- 226,234 ----
    else:
      # Report error for unhandled conditional dependencies
      import sys
!     print("ERROR: Unhandled conditional dependency: '%s' with condition:" % (ext_name,), file=sys.stderr)
!     print("  Condition code: %s..." % (condition[:100],), file=sys.stderr)
!     print("  Current context: xlen=%s, exts=%s" % (xlen, sorted(current_exts)), file=sys.stderr)
      # For now, return False to be safe
      return False
  
*************** def dump_all_extensions():
*** 479,492 ****
          if dep['type'] == 'simple':
            dep_strs.append(dep['ext'])
          else:
!           dep_strs.append(f"{dep['ext']}*")  # Mark conditional deps with *
!       print(f"{ext_name:15} -> {', '.join(dep_strs)}")
      else:
!       print(f"{ext_name:15} -> (no dependencies)")
  
!   print(f"\nTotal extensions: {len(all_extensions)}")
!   print(f"Extensions with dependencies: {len(implied_ext)}")
!   print(f"Extensions without dependencies: {len(all_extensions) - len(implied_ext)}")
  
  def run_unit_tests():
    """Run unit tests using pytest dynamically imported."""
--- 479,492 ----
          if dep['type'] == 'simple':
            dep_strs.append(dep['ext'])
          else:
!           dep_strs.append("%s*" % (dep['ext'],))  # Mark conditional deps with *
!       print("%s -> %s" % (ext_name[:15], ', '.join(dep_strs)))
      else:
!       print("%s -> (no dependencies)" % (ext_name[:15],))
  
!   print("\nTotal extensions: %s" % (len(all_extensions),))
!   print("Extensions with dependencies: %s" % (len(implied_ext),))
!   print("Extensions without dependencies: %s" % (len(all_extensions) - len(implied_ext),))
  
  def run_unit_tests():
    """Run unit tests using pytest dynamically imported."""
*************** def run_unit_tests():
*** 589,609 ****
  
    for i, test_func in enumerate(test_functions):
      try:
!       print(f"  Running {test_func.__name__}...", end=" ")
        test_func()
        print("PASSED")
        passed += 1
      except Exception as e:
!       print(f"FAILED: {e}")
        failed += 1
  
!   print(f"\nTest Summary: {passed} passed, {failed} failed")
  
    if failed == 0:
      print("\nAll tests passed!")
      return 0
    else:
!     print(f"\n{failed} test(s) failed!")
      return 1
  
  if __name__ == "__main__":
--- 589,609 ----
  
    for i, test_func in enumerate(test_functions):
      try:
!       print("  Running %s..." % (test_func.__name__,), end=" ")
        test_func()
        print("PASSED")
        passed += 1
      except Exception as e:
!       print("FAILED: %s" % (e,))
        failed += 1
  
!   print("\nTest Summary: %s passed, %s failed" % (passed, failed))
  
    if failed == 0:
      print("\nAll tests passed!")
      return 0
    else:
!     print("\n%s test(s) failed!" % (failed,))
      return 1
  
  if __name__ == "__main__":
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/autovec-opt.md gcc-17-20260628/gcc/config/riscv/autovec-opt.md
*** gcc-17-20260621/gcc/config/riscv/autovec-opt.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/autovec-opt.md	Sun Jun 28 22:32:07 2026
***************
*** 684,689 ****
--- 684,732 ----
  }
  [(set_attr "type" "viwalu")])
  
+ (define_insn_and_split "*vwabda<su><mode>"
+   [(set (match_operand:VWEXTI 0 "register_operand" "+&vr")
+ 	(plus:VWEXTI
+ 	  (zero_extend:VWEXTI
+ 	    (unspec:<V_DOUBLE_TRUNC>
+ 	      [(match_operand:<V_DOUBLE_TRUNC> 1 "register_operand" "vr")
+ 	       (match_operand:<V_DOUBLE_TRUNC> 2 "register_operand" "vr")]
+ 	      UNSPEC_VABD))
+ 	  (match_operand:VWEXTI 3 "register_operand" "0")))]
+   "TARGET_ZVABD && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+ {
+   rtx ops[] = {operands[0], operands[1], operands[2]};
+   riscv_vector::emit_vlmax_insn (CODE_FOR_pred_widen_abd_plus<su><mode>,
+ 				 riscv_vector::BINARY_OP, ops);
+   DONE;
+ }
+ [(set_attr "type" "viwalu")])
+ 
+ ;; have this since we don't canonicalize the plus in the presence of an unspec.
+ (define_insn_and_split "*vwabda_right<su><mode>"
+   [(set (match_operand:VWEXTI 0 "register_operand" "+&vr")
+ 	(plus:VWEXTI
+ 	  (match_operand:VWEXTI 1 "register_operand" "0")
+ 	  (zero_extend:VWEXTI
+ 	    (unspec:<V_DOUBLE_TRUNC>
+ 	      [(match_operand:<V_DOUBLE_TRUNC> 2 "register_operand" "vr")
+ 	       (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "vr")]
+ 	      UNSPEC_VABD))))]
+   "TARGET_ZVABD && can_create_pseudo_p ()"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+ {
+   rtx ops[] = {operands[0], operands[2], operands[3]};
+   riscv_vector::emit_vlmax_insn (CODE_FOR_pred_widen_abd_plus<su><mode>,
+ 				 riscv_vector::BINARY_OP, ops);
+   DONE;
+ }
+ [(set_attr "type" "viwalu")])
+ 
  ;; This combine pattern does not correspond to a single instruction,
  ;; i.e. there is no vwmul.wv instruction. This is a temporary pattern
  ;; produced by a combine pass and if there is no further combine into
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/autovec.md gcc-17-20260628/gcc/config/riscv/autovec.md
*** gcc-17-20260621/gcc/config/riscv/autovec.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/autovec.md	Sun Jun 28 22:32:07 2026
***************
*** 1115,1131 ****
  [(set_attr "type" "vialu")])
  
  ;; -------------------------------------------------------------------------------
! ;; - [INT] ABS expansion to vneg and vmax.
  ;; -------------------------------------------------------------------------------
  
  (define_expand "abs<mode>2"
    [(set (match_operand:V_VLSI 0 "register_operand")
!     (smax:V_VLSI
!      (match_dup 0)
!      (neg:V_VLSI
!        (match_operand:V_VLSI 1 "register_operand"))))]
    "TARGET_VECTOR"
  {
    DONE;
  })
  
--- 1115,1144 ----
  [(set_attr "type" "vialu")])
  
  ;; -------------------------------------------------------------------------------
! ;; - [INT] ABS expansion
  ;; -------------------------------------------------------------------------------
  
  (define_expand "abs<mode>2"
    [(set (match_operand:V_VLSI 0 "register_operand")
! 	(abs:V_VLSI
! 	  (match_operand:V_VLSI 1 "register_operand")))]
    "TARGET_VECTOR"
  {
+   if (TARGET_ZVABD)
+     {
+       riscv_vector::emit_vlmax_insn (CODE_FOR_pred_abs<mode>,
+ 				     riscv_vector::UNARY_OP, operands);
+       DONE;
+     }
+ 
+   rtx neg = gen_reg_rtx (<MODE>mode);
+   rtx ops1[] = {neg, operands[1]};
+   riscv_vector::emit_vlmax_insn (CODE_FOR_pred_neg<mode>,
+ 				 riscv_vector::UNARY_OP, ops1);
+ 
+   rtx ops2[] = {operands[0], operands[1], neg};
+   riscv_vector::emit_vlmax_insn (CODE_FOR_pred_smax<mode>,
+ 				 riscv_vector::BINARY_OP, ops2);
    DONE;
  })
  
***************
*** 3066,3091 ****
  ; ========
  ; == Absolute difference (not including sum)
  ; ========
! (define_expand "uabd<mode>3"
!   [(match_operand:V_VLSI 0 "register_operand")
!    (match_operand:V_VLSI 1 "register_operand")
!    (match_operand:V_VLSI 2 "register_operand")]
!   ;; Disabled until PR119224 is resolved
!   "TARGET_VECTOR && 0"
!   {
!     rtx max = gen_reg_rtx (<MODE>mode);
!     insn_code icode = code_for_pred (UMAX, <MODE>mode);
!     rtx ops1[] = {max, operands[1], operands[2]};
!     riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, ops1);
! 
!     rtx min = gen_reg_rtx (<MODE>mode);
!     icode = code_for_pred (UMIN, <MODE>mode);
!     rtx ops2[] = {min, operands[1], operands[2]};
!     riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, ops2);
! 
!     icode = code_for_pred (MINUS, <MODE>mode);
!     rtx ops3[] = {operands[0], max, min};
!     riscv_vector::emit_vlmax_insn (icode, riscv_vector::BINARY_OP, ops3);
! 
!     DONE;
!   });
--- 3079,3097 ----
  ; ========
  ; == Absolute difference (not including sum)
  ; ========
! (define_insn_and_split "<su>abd<mode>3"
!   [(set (match_operand:V_VLSI 0 "register_operand" "=vr")
!        (unspec:V_VLSI
! 	 [(match_operand:V_VLSI 1 "register_operand" "vr")
! 	  (match_operand:V_VLSI 2 "register_operand" "vr")]
! 	 UNSPEC_VABD))]
!   "TARGET_ZVABD && can_create_pseudo_p ()"
!   "#"
!   "&& 1"
!   [(const_int 0)]
! {
!   riscv_vector::emit_vlmax_insn (CODE_FOR_pred_vabd<su><mode>,
! 				 riscv_vector::BINARY_OP, operands);
!   DONE;
! }
! [(set_attr "type" "vialu")])
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/bitmanip.md gcc-17-20260628/gcc/config/riscv/bitmanip.md
*** gcc-17-20260621/gcc/config/riscv/bitmanip.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/bitmanip.md	Sun Jun 28 22:32:07 2026
***************
*** 783,788 ****
--- 783,831 ----
    { operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); }
    [(set_attr "type" "bitmanip")])
  
+ ;; The goal here is to utilize the Zbs extension on SImode values when doing
+ ;; so is safe.  The problem is if we change the SI sign bit, the sign bit
+ ;; does not propagate to bits 32..63.  That makes preserving semantics of
+ ;; this kind of RTL harder and more generally makes using the Zbs extension
+ ;; harder.
+ ;;
+ ;; However, if we know the *other* operand has at least 33 sign bit copies,
+ ;; then we can use the Zbs intruction followed by an sign extension.  So the
+ ;; result is a 3->2 split and we'll still have a chance to eliminate the
+ ;; trailing sign extension.
+ (define_split
+   [(set (match_operand:DI 0 "register_operand")
+ 	(any_or:DI
+ 	  (sign_extend:DI
+ 	    (ashift:SI
+ 	      (const_int 1)
+ 	      (match_operand:QI 1 "register_operand")))
+ 	  (match_operand:DI 2 "register_operand")))]
+   "(TARGET_64BIT
+     && TARGET_ZBS
+     && num_sign_bit_copies (operands[2], DImode) >= 33)"
+   [(set (match_dup 0) (any_or:DI (ashift:DI (const_int 1) (match_dup 1))
+ 				 (match_dup 2)))
+    (set (match_dup 0)
+ 	(sign_extend:DI (subreg:SI (match_dup 0) 0)))])
+ 
+ (define_split
+   [(set (match_operand:DI 0 "register_operand")
+ 	(and:DI (not:DI
+ 	  (sign_extend:DI
+ 	    (ashift:SI
+ 	      (const_int 1)
+ 	      (match_operand:QI 1 "register_operand"))))
+ 	 (match_operand:DI 2 "register_operand")))]
+   "(TARGET_64BIT
+     && TARGET_ZBS
+     && num_sign_bit_copies (operands[2], DImode) >= 33)"
+   [(set (match_dup 0) (and:DI (rotate:DI (const_int -2) (match_dup 1))
+ 			      (match_dup 2)))
+    (set (match_dup 0)
+ 	(sign_extend:DI (subreg:SI (match_dup 0) 0)))])
+ 
+ 
  ;; Similarly two patterns for AND generating bclr to
  ;; manipulate a bit in a register
  (define_insn_and_split ""
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/constraints.md gcc-17-20260628/gcc/config/riscv/constraints.md
*** gcc-17-20260621/gcc/config/riscv/constraints.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/constraints.md	Sun Jun 28 22:32:07 2026
***************
*** 184,189 ****
--- 184,197 ----
  (define_register_constraint "vm" "TARGET_VECTOR ? VM_REGS : NO_REGS"
    "A vector mask register (if available).")
  
+ ;; Dependent (dynamic) constraint:
+ ;; "The source group must overlap the highest-numbered part of the
+ ;; "destination group", i.e. this operand depends on operand 0.
+ (define_register_constraint "Wtt" "TARGET_VECTOR ? V_REGS : NO_REGS"
+   "Vector widening overlap"
+   "riscv_widen_overlap_ok (regno, mode, ref_regno, ref_mode)"
+   "0")
+ 
  ;; This constraint is used to match instruction "csrr %0, vlenb" which is generated in "mov<mode>".
  ;; VLENB is a run-time constant which represent the vector register length in bytes.
  ;; BYTES_PER_RISCV_VECTOR represent runtime invariant of vector register length in bytes.
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/riscv-ext.def gcc-17-20260628/gcc/config/riscv/riscv-ext.def
*** gcc-17-20260621/gcc/config/riscv/riscv-ext.def	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/riscv-ext.def	Sun Jun 28 22:32:07 2026
*************** DEFINE_RISCV_EXT(
*** 1585,1590 ****
--- 1585,1603 ----
    /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
    /* EXTRA_EXTENSION_FLAGS */ 0)
  
+ DEFINE_RISCV_EXT (
+   /* NAME.  */ zvabd,
+   /* UPPERCASE_NAME.  */ ZVABD,
+   /* FULL_NAME.  */ "Vector absolute difference extension.",
+   /* DESC.  */ "",
+   /* URL.  */ ,
+   /* DEP_EXTS.  */ ({"v"}),
+   /* SUPPORTED_VERSIONS.  */ ({{0, 7}}),
+   /* FLAG_GROUP.  */ zvabd,
+   /* BITMASK_GROUP_ID.  */ BITMASK_NOT_YET_ALLOCATED,
+   /* BITMASK_BIT_POSITION.  */ BITMASK_NOT_YET_ALLOCATED,
+   /* EXTRA_EXTENSION_FLAGS.  */ 0)
+ 
  DEFINE_RISCV_EXT(
    /* NAME */ sdtrig,
    /* UPPERCASE_NAME */ SDTRIG,
*************** DEFINE_RISCV_EXT(
*** 2108,2113 ****
--- 2121,2127 ----
    /* BITMASK_BIT_POSITION*/ BITMASK_NOT_YET_ALLOCATED,
    /* EXTRA_EXTENSION_FLAGS */ 0)
  
+ 
  #include "riscv-ext-corev.def"
  #include "riscv-ext-sifive.def"
  #include "riscv-ext-thead.def"
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/riscv-ext.opt gcc-17-20260628/gcc/config/riscv/riscv-ext.opt
*** gcc-17-20260621/gcc/config/riscv/riscv-ext.opt	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/riscv-ext.opt	Sun Jun 28 22:32:07 2026
*************** int riscv_zvk_subext
*** 106,111 ****
--- 106,114 ----
  TargetVariable
  int riscv_zvl_subext
  
+ TargetVariable
+ int riscv_zvabd_subext
+ 
  Mask(RVE) Var(riscv_base_subext)
  
  Mask(RVI) Var(riscv_base_subext)
*************** Mask(ZHINX) Var(riscv_zinx_subext)
*** 330,335 ****
--- 333,340 ----
  
  Mask(ZHINXMIN) Var(riscv_zinx_subext)
  
+ Mask(ZVABD) Var(riscv_zvabd_subext)
+ 
  Mask(SDTRIG) Var(riscv_sd_subext)
  
  Mask(SHA) Var(riscv_sh_subext)
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/riscv-protos.h gcc-17-20260628/gcc/config/riscv/riscv-protos.h
*** gcc-17-20260621/gcc/config/riscv/riscv-protos.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/riscv-protos.h	Sun Jun 28 22:32:07 2026
*************** extern poly_uint64 riscv_regmode_natural
*** 175,180 ****
--- 175,182 ----
  extern bool riscv_vla_mode_p (machine_mode);
  extern bool riscv_tuple_mode_p (machine_mode);
  extern bool riscv_vls_mode_p (machine_mode);
+ extern bool riscv_widen_overlap_ok (unsigned int, machine_mode,
+ 				    unsigned int, machine_mode);
  extern int riscv_get_v_regno_alignment (machine_mode);
  extern bool riscv_shamt_matches_mask_p (int, HOST_WIDE_INT);
  extern void riscv_subword_address (rtx, rtx *, rtx *, rtx *, rtx *);
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/riscv.cc gcc-17-20260628/gcc/config/riscv/riscv.cc
*** gcc-17-20260621/gcc/config/riscv/riscv.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/riscv.cc	Sun Jun 28 22:32:07 2026
*************** riscv_hard_regno_nregs (unsigned int reg
*** 11217,11222 ****
--- 11217,11259 ----
    return (GET_MODE_SIZE (mode).to_constant () + UNITS_PER_WORD - 1) / UNITS_PER_WORD;
  }
  
+ /* Return true if REGNO in MODE can be used as source in a widening
+    instruction with destination WIDE_REGNO in WIDE_MODE.
+    This is true if either there is no overlap at all, or the overlap
+    is in the highest-numbered part of the destination group.  */
+ 
+ bool
+ riscv_widen_overlap_ok (unsigned int regno, machine_mode mode,
+ 			unsigned int wide_regno, machine_mode wide_mode)
+ {
+   /* If the referenced regno is no hard reg, allow everything.  */
+   if (wide_regno == INVALID_REGNUM)
+     return true;
+ 
+   if (!V_REG_P (regno) || !V_REG_P (wide_regno))
+     return false;
+ 
+   gcc_checking_assert (riscv_vector_mode_p (mode)
+ 		       && riscv_vector_mode_p (wide_mode));
+ 
+   unsigned int wide_nregs = riscv_hard_regno_nregs (wide_regno, wide_mode);
+   unsigned int nregs = riscv_hard_regno_nregs (regno, mode);
+ 
+   /* Overlap is only allowed in the highest-numbered part of the wider
+      destination.  */
+   if (regno == wide_regno)
+     return false;
+ 
+   if (regno >= wide_regno + (wide_nregs - nregs))
+     return true;
+ 
+   /* No overlap is OK.  */
+   if (regno < wide_regno)
+     return true;
+ 
+   return false;
+ }
+ 
  /* Implement TARGET_HARD_REGNO_MODE_OK.  */
  
  static bool
*************** riscv_memtag_tag_bitsize ()
*** 16384,16389 ****
--- 16421,16429 ----
  #undef TARGET_FNTYPE_ABI
  #define TARGET_FNTYPE_ABI riscv_fntype_abi
  
+ # undef  TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P
+ # define TARGET_SETJMP_PRESERVES_NONVOLATILE_REGS_P hook_bool_void_true
+ 
  #undef TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS
  #define TARGET_SHRINK_WRAP_GET_SEPARATE_COMPONENTS \
    riscv_get_separate_components
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/riscv.md gcc-17-20260628/gcc/config/riscv/riscv.md
*** gcc-17-20260621/gcc/config/riscv/riscv.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/riscv.md	Sun Jun 28 22:32:07 2026
***************
*** 5356,5361 ****
--- 5356,5404 ----
     (set (match_dup 0) (any_eq:X (match_dup 0) (const_int 0)))]
  { operands[2] = GEN_INT (-UINTVAL (operands[2])); })
  
+ ;; So the idea here is to realize that with a single insn we
+ ;; can mask off all the relevant bits in the source operand.
+ ;; A second insn generates zero/non-zero
+ ;; The third and final insn canonicalizes that result to 0/1.
+ ;;
+ ;; There's probably some HImode cases we could handle too.  I haven't
+ ;; thought hard about them.
+ (define_insn_and_split "*seq_sne_qi"
+   [(set (match_operand:X 0 "register_operand" "=r")
+ 	(any_eq:X (subreg:QI
+ 		   (ashift:X (match_operand:X 1 "register_operand" "r")
+ 			     (match_operand 2 "const_int_operand")) 0)
+ 		  (match_operand 3 "const_int_operand")))]
+   "(INTVAL (operands[2]) > 0 && INTVAL (operands[2]) < 8
+     && INTVAL (operands[3]) >= -128 && INTVAL (operands[3]) <= 127
+     && (INTVAL (operands[3])
+ 	& ((HOST_WIDE_INT_1U << INTVAL (operands[2])) - 1)) == 0)"
+   "#"
+   "&& 1"
+   [(const_int 0)]
+ {
+   operands[3] = GEN_INT (-((INTVAL (operands[3]) & 0xff)
+ 			   >> INTVAL (operands[2])));
+   operands[2] = GEN_INT (0xff >> INTVAL (operands[2]));
+ 
+   /* We generate code here rather than in the split RTL template so that we
+      can elide the PLUS if it is not needed.  */
+   rtx x = gen_rtx_AND (word_mode, operands[1], operands[2]);
+   emit_insn (gen_rtx_SET (operands[0], x));
+ 
+   if (operands[3] != CONST0_RTX (word_mode))
+     {
+       x = gen_rtx_PLUS (word_mode, operands[0], operands[3]);
+       emit_insn (gen_rtx_SET (operands[0], x));
+     }
+ 
+   x = gen_rtx_fmt_ee (<CODE>, word_mode, operands[0], CONST0_RTX (word_mode));
+   emit_insn (gen_rtx_SET (operands[0], x));
+   DONE;
+ }
+   [(set_attr "type" "slt")
+    (set_attr "mode" "<X:MODE>")])
+ 
  (include "bitmanip.md")
  (include "crypto.md")
  (include "sync.md")
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/vector-iterators.md gcc-17-20260628/gcc/config/riscv/vector-iterators.md
*** gcc-17-20260621/gcc/config/riscv/vector-iterators.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/vector-iterators.md	Sun Jun 28 22:32:07 2026
***************
*** 122,127 ****
--- 122,134 ----
    UNSPEC_SF_VFNRCLIP
    UNSPEC_SF_VFNRCLIPU
    UNSPEC_SF_CV
+ 
+   ;; abd
+   UNSPEC_VSABD
+   UNSPEC_VUABD
+   ;; abda
+   UNSPEC_VSABDA
+   UNSPEC_VUABDA
  ])
  
  (define_c_enum "unspecv" [
***************
*** 6520,6522 ****
--- 6527,6547 ----
    (V32DI "V32HI") (V64DI "V64HI") (V128DI "V128HI") (V256DI "V256HI")
    (V512DI "V512HI")
  ])
+ 
+ (define_int_iterator UNSPEC_VABD[
+   UNSPEC_VSABD UNSPEC_VUABD
+ ])
+ 
+ (define_int_iterator UNSPEC_VABDA[
+   UNSPEC_VSABDA UNSPEC_VUABDA
+ ])
+ 
+ (define_int_attr su[
+   (UNSPEC_VSABD "s") (UNSPEC_VUABD "u")
+   (UNSPEC_VSABDA "s") (UNSPEC_VUABDA "u")
+ ])
+ 
+ (define_int_attr u[
+   (UNSPEC_VSABD "") (UNSPEC_VUABD "u")
+   (UNSPEC_VSABDA "") (UNSPEC_VUABDA "u")
+ ])
diff -Nrcpad gcc-17-20260621/gcc/config/riscv/vector.md gcc-17-20260628/gcc/config/riscv/vector.md
*** gcc-17-20260621/gcc/config/riscv/vector.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/riscv/vector.md	Sun Jun 28 22:32:07 2026
***************
*** 4090,4108 ****
  
  ;; Vector Double-Widening Sign-extend and Zero-extend.
  (define_insn "@pred_<optab><mode>_vf2"
!   [(set (match_operand:VWEXTI 0 "register_operand"            "=&vr,&vr")
  	(if_then_else:VWEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"         "vmWc1,vmWc1")
! 	     (match_operand 4 "vector_length_operand"            "  rvl,  rvl")
! 	     (match_operand 5 "const_int_operand"                "    i,    i")
! 	     (match_operand 6 "const_int_operand"                "    i,    i")
! 	     (match_operand 7 "const_int_operand"                "    i,    i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (any_extend:VWEXTI
! 	    (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "   vr,   vr"))
! 	  (match_operand:VWEXTI 2 "vector_merge_operand"         "   vu,    0")))]
    "TARGET_VECTOR && !TARGET_XTHEADVECTOR"
    "v<sz>ext.vf2\t%0,%3%p1"
    [(set_attr "type" "vext")
--- 4090,4108 ----
  
  ;; Vector Double-Widening Sign-extend and Zero-extend.
  (define_insn "@pred_<optab><mode>_vf2"
!   [(set (match_operand:VWEXTI 0 "register_operand"		 "=vr, vr, vd, vd")
  	(if_then_else:VWEXTI
  	  (unspec:<VM>
! 	    [(match_operand:<VM> 1 "vector_mask_operand"         "Wc1,Wc1, vm, vm")
! 	     (match_operand 4 "vector_length_operand"            "rvl,rvl,rvl,rvl")
! 	     (match_operand 5 "const_int_operand"                "  i,  i,  i,  i")
! 	     (match_operand 6 "const_int_operand"                "  i,  i,  i,  i")
! 	     (match_operand 7 "const_int_operand"                "  i,  i,  i,  i")
  	     (reg:SI VL_REGNUM)
  	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
  	  (any_extend:VWEXTI
! 	    (match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "Wtt,Wtt,Wtt,Wtt"))
! 	  (match_operand:VWEXTI 2 "vector_merge_operand"         " vu,  0, vu,  0")))]
    "TARGET_VECTOR && !TARGET_XTHEADVECTOR"
    "v<sz>ext.vf2\t%0,%3%p1"
    [(set_attr "type" "vext")
***************
*** 9230,9235 ****
--- 9230,9311 ----
      riscv_vector::prepare_ternary_operands (operands);
    })
  
+ ;; ------------------------------------
+ ;; ---- Vector absolute difference extension
+ ;; ----------------------------------------------------------------
+ ;; Includes:
+ ;; - vabs: Vector Single-Width Signed Integer Absolute
+ ;; - vabd/vabdu: Vector Single-Width Signed Integer Absolute Difference
+ ;; - vwabda/vwabdau: Vector Widening Signed Integer Absolute
+ ;;   Difference and Accumulate
+ ;; ------------------------------------
+ 
+ (define_insn "@pred_abs<mode>"
+   [(set (match_operand:V_VLSI 0 "register_operand"	 "=vd, vd, vr, vr")
+ 	(if_then_else:V_VLSI
+ 	  (unspec:<VM>
+ 	    [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm, Wc1, Wc1")
+ 	     (match_operand 4 "vector_length_operand"	 " rK, rK, rK, rK")
+ 	     (match_operand 5 "const_int_operand"	 " i, i, i, i")
+ 	     (match_operand 6 "const_int_operand"	 " i, i, i, i")
+ 	     (match_operand 7 "const_int_operand"	 " i, i, i, i")
+ 	     (reg:SI VL_REGNUM)
+ 	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
+ 	  (abs:V_VLSI
+ 	    (match_operand:V_VLSI 3 "register_operand" "vr,vr,vr,vr"))
+ 	  (match_operand:V_VLSI 2 "vector_merge_operand" "vu,0,vu,0")))]
+   "TARGET_ZVABD"
+   "vabs.v\t%0,%3%p1"
+   [(set_attr "type" "vialu")
+    (set_attr "mode" "<MODE>")
+    (set_attr "vl_op_idx" "4")
+    (set (attr "ta") (symbol_ref "riscv_vector::get_ta (operands[5])"))
+    (set (attr "ma") (symbol_ref "riscv_vector::get_ma (operands[6])"))
+    (set (attr "avl_type_idx") (const_int 7))])
+ 
+ (define_insn "@pred_vabd<su><mode>"
+   [(set (match_operand:V_VLSI 0 "register_operand"	    "=vd, vd, vr, vr")
+ 	(if_then_else:V_VLSI
+ 	  (unspec:<VM>
+ 	    [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm, Wc1, Wc1")
+ 	     (match_operand 5 "vector_length_operand"	 " rK, rK, rK, rK")
+ 	     (match_operand 6 "const_int_operand"	 " i, i, i, i")
+ 	     (match_operand 7 "const_int_operand"	 " i, i, i, i")
+ 	     (match_operand 8 "const_int_operand"	 " i, i, i, i")
+ 	     (reg:SI VL_REGNUM)
+ 	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
+ 	  (unspec:V_VLSI
+ 	    [(match_operand:V_VLSI 3 "register_operand" "vr,vr,vr,vr")
+ 	     (match_operand:V_VLSI 4 "register_operand" "vr,vr,vr,vr")]
+ 	    UNSPEC_VABD)
+ 	  (match_operand:V_VLSI 2 "vector_merge_operand" "vu,0,vu,0")))]
+   "TARGET_ZVABD"
+   "vabd<u>.vv\t%0,%3,%4%p1"
+   [(set_attr "type" "vialu")
+    (set_attr "mode" "<MODE>")])
+ 
+ (define_insn "@pred_widen_abd_plus<su><mode>"
+   [(set (match_operand:VWEXTI 0 "register_operand"      "+&vd,&vd,&vr,&vr")
+ 	(if_then_else:VWEXTI
+ 	  (unspec:<VM>
+ 	    [(match_operand:<VM> 1 "vector_mask_operand" "vm,vm,Wc1,Wc1")
+ 	     (match_operand 5 "vector_length_operand"    "rK,rK,rK,rK")
+ 	     (match_operand 6 "const_int_operand"      "i,i,i,i")
+ 	     (match_operand 7 "const_int_operand"      "i,i,i,i")
+ 	     (match_operand 8 "const_int_operand"      "i,i,i,i")
+ 	     (reg:SI VL_REGNUM)
+ 	     (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
+ 	  (unspec:VWEXTI
+ 	    [(match_operand:<V_DOUBLE_TRUNC> 3 "register_operand" "vr,vr,vr,vr")
+ 	     (match_operand:<V_DOUBLE_TRUNC> 4 "register_operand" "vr,vr,vr,vr")
+ 	     (match_dup 0)]
+ 	    UNSPEC_VABDA)
+ 	  (match_operand:VWEXTI 2 "vector_merge_operand" "vu,0,vu,0")))]
+   "TARGET_ZVABD"
+   "vwabda<u>.vv\t%0,%3,%4%p1"
+   [(set_attr "type" "viwalu")
+    (set_attr "mode" "<V_DOUBLE_TRUNC>")])
+ 
  (include "autovec.md")
  (include "autovec-opt.md")
  (include "sifive-vector.md")
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/altivec.md gcc-17-20260628/gcc/config/rs6000/altivec.md
*** gcc-17-20260621/gcc/config/rs6000/altivec.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/altivec.md	Sun Jun 28 22:32:07 2026
***************
*** 238,243 ****
--- 238,245 ----
  ;; Vector negate
  (define_mode_iterator VNEG [V4SI V2DI])
  
+ (define_mode_iterator V16QI_V2DI [V16QI V2DI])
+ 
  ;; Vector move instructions.
  (define_insn "*altivec_mov<mode>"
    [(set (match_operand:VM2 0 "nonimmediate_operand" "=Z,v,v,?Y,?*r,?*r,v,v,?*r")
***************
*** 505,517 ****
  
  ;; add
  (define_insn "add<mode>3"
!   [(set (match_operand:VI2 0 "register_operand" "=v")
!         (plus:VI2 (match_operand:VI2 1 "register_operand" "v")
! 		  (match_operand:VI2 2 "register_operand" "v")))]
    "<VI_unit>"
    "vaddu<VI_char>m %0,%1,%2"
    [(set_attr "type" "vecsimple")])
  
  (define_insn "*altivec_addv4sf3"
    [(set (match_operand:V4SF 0 "register_operand" "=v")
          (plus:V4SF (match_operand:V4SF 1 "register_operand" "v")
--- 507,530 ----
  
  ;; add
  (define_insn "add<mode>3"
!   [(set (match_operand:V16QI_V2DI 0 "register_operand" "=v")
!         (plus:V16QI_V2DI (match_operand:V16QI_V2DI 1 "register_operand" "v")
!                          (match_operand:V16QI_V2DI 2 "register_operand" "v")))]
    "<VI_unit>"
    "vaddu<VI_char>m %0,%1,%2"
    [(set_attr "type" "vecsimple")])
  
+ (define_insn "add<mode>3"
+   [(set (match_operand:VIArith 0 "register_operand" "=wa,v")
+         (plus:VIArith (match_operand:VIArith 1 "register_operand" "wa,v")
+                       (match_operand:VIArith 2 "register_operand" "wa,v")))]
+   "<VI_unit>"
+   "@
+    xvaddu<VI_char>m %x0,%x1,%x2
+    vaddu<VI_char>m %0,%1,%2"
+   [(set_attr "type" "vecsimple")
+    (set_attr "isa" "future,*")])
+ 
  (define_insn "*altivec_addv4sf3"
    [(set (match_operand:V4SF 0 "register_operand" "=v")
          (plus:V4SF (match_operand:V4SF 1 "register_operand" "v")
***************
*** 549,561 ****
  
  ;; sub
  (define_insn "sub<mode>3"
!   [(set (match_operand:VI2 0 "register_operand" "=v")
!         (minus:VI2 (match_operand:VI2 1 "register_operand" "v")
! 		   (match_operand:VI2 2 "register_operand" "v")))]
    "<VI_unit>"
    "vsubu<VI_char>m %0,%1,%2"
    [(set_attr "type" "vecsimple")])
  
  (define_insn "*altivec_subv4sf3"
    [(set (match_operand:V4SF 0 "register_operand" "=v")
          (minus:V4SF (match_operand:V4SF 1 "register_operand" "v")
--- 562,585 ----
  
  ;; sub
  (define_insn "sub<mode>3"
!   [(set (match_operand:V16QI_V2DI 0 "register_operand" "=v")
!         (minus:V16QI_V2DI (match_operand:V16QI_V2DI 1 "register_operand" "v")
!                           (match_operand:V16QI_V2DI 2 "register_operand" "v")))]
    "<VI_unit>"
    "vsubu<VI_char>m %0,%1,%2"
    [(set_attr "type" "vecsimple")])
  
+ (define_insn "sub<mode>3"
+   [(set (match_operand:VIArith 0 "register_operand" "=wa,v")
+         (minus:VIArith (match_operand:VIArith 1 "register_operand" "wa,v")
+                        (match_operand:VIArith 2 "register_operand" "wa,v")))]
+   "<VI_unit>"
+   "@
+    xvsubu<VI_char>m %x0,%x1,%x2
+    vsubu<VI_char>m %0,%1,%2"
+   [(set_attr "type" "vecsimple")
+    (set_attr "isa" "future,*")])
+ 
  (define_insn "*altivec_subv4sf3"
    [(set (match_operand:V4SF 0 "register_operand" "=v")
          (minus:V4SF (match_operand:V4SF 1 "register_operand" "v")
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/predicates.md gcc-17-20260628/gcc/config/rs6000/predicates.md
*** gcc-17-20260621/gcc/config/rs6000/predicates.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/predicates.md	Sun Jun 28 22:32:07 2026
***************
*** 312,317 ****
--- 312,322 ----
    (and (match_code "const_int")
         (match_test "IN_RANGE (INTVAL (op), 2, 3)")))
  
+ ;; Match op = 0..6.
+ (define_predicate "const_0_to_6_operand"
+   (and (match_code "const_int")
+        (match_test "IN_RANGE (INTVAL (op), 0, 6)")))
+ 
  ;; Match op = 0..7.
  (define_predicate "const_0_to_7_operand"
    (and (match_code "const_int")
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/rs6000-builtin.cc gcc-17-20260628/gcc/config/rs6000/rs6000-builtin.cc
*** gcc-17-20260621/gcc/config/rs6000/rs6000-builtin.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/rs6000-builtin.cc	Sun Jun 28 22:32:07 2026
*************** rs6000_invalid_builtin (enum rs6000_gen_
*** 142,147 ****
--- 142,155 ----
      case ENB_FUTURE:
        error ("%qs requires the %qs option", name, "-mcpu=future");
        break;
+     case ENB_FUTURE_ALTIVEC:
+       error ("%qs requires the %qs and %qs options", name, "-mcpu=future",
+ 	     "-maltivec");
+       break;
+     case ENB_FUTURE_VSX:
+       error ("%qs requires the %qs and %qs options", name, "-mcpu=future",
+ 	     "-mvsx");
+       break;
      default:
      case ENB_ALWAYS:
        gcc_unreachable ();
*************** rs6000_builtin_is_supported (enum rs6000
*** 199,204 ****
--- 207,216 ----
        return TARGET_MMA;
      case ENB_FUTURE:
        return TARGET_FUTURE;
+     case ENB_FUTURE_ALTIVEC:
+       return TARGET_FUTURE && TARGET_ALTIVEC;
+     case ENB_FUTURE_VSX:
+       return TARGET_FUTURE && TARGET_VSX;
      default:
        gcc_unreachable ();
      }
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/rs6000-builtins.def gcc-17-20260628/gcc/config/rs6000/rs6000-builtins.def
*** gcc-17-20260621/gcc/config/rs6000/rs6000-builtins.def	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/rs6000-builtins.def	Sun Jun 28 22:32:07 2026
***************
*** 3970,3972 ****
--- 3970,4044 ----
  
    const vuc __builtin_galois_field_mult_xts (vuc, vuc);
      XXGFMUL128XTS xxgfmul128xts {}
+ 
+ [future-vsx]
+   const vus __builtin_vsx_xvmulhuh (vus, vus);
+     XVMULHUH umulv8hi3_highpart {}
+ 
+   const vss __builtin_vsx_xvmulhsh (vss, vss);
+     XVMULHSH smulv8hi3_highpart {}
+ 
+   const vuq __builtin_vsx_xxmulmul (vull, vull, const int<0,6>);
+     XXMULMUL vsx_xxmulmul {}
+ 
+   const vuq __builtin_vsx_xxmulmulhiadd (vuq, vull, vull, const int<1>, \
+                                           const int<1>, const int<1>);
+     XXMULMULHIADD vsx_xxmulmulhiadd {}
+ 
+   const vuq __builtin_vsx_xxmulmulloadd (vuq, vull, vull, const int<1>, \
+                                           const int<1>);
+     XXMULMULLOADD vsx_xxmulmulloadd {}
+ 
+   const vuq __builtin_vsx_xxssumudm (vuq, vull, vull, const int<1>);
+     XXSSUMUDM vsx_xxssumudm {}
+ 
+   const vuq __builtin_vsx_xxssumudmc (vuq, vull, vull, const int<1>);
+     XXSSUMUDMC vsx_xxssumudmc {}
+ 
+   const vuq __builtin_vsx_xxssumudmcext (vull, vull, vuq, const int<1>);
+     XXSSUMUDMCEXT vsx_xxssumudmcext {}
+ 
+   const vuq __builtin_vsx_xsaddadduqm (vuq, vuq, vuq);
+     XSADDADDUQM vsx_xsaddadduqm {}
+ 
+   const vuq __builtin_vsx_xsaddaddsuqm (vuq, vuq, vuq);
+     XSADDADDSUQM vsx_xsaddaddsuqm {}
+ 
+   const vuq __builtin_vsx_xsaddsubuqm (vuq, vuq, vuq);
+     XSADDSUBUQM vsx_xsaddsubuqm {}
+ 
+   const vuq __builtin_vsx_xsaddsubsuqm (vuq, vuq, vuq);
+     XSADDSUBSUQM vsx_xsaddsubsuqm {}
+ 
+   const vuq __builtin_vsx_xsmerge2t1uqm (vuq, vuq);
+     XSMERGE2T1UQM vsx_xsmerge2t1uqm {}
+ 
+   const vuq __builtin_vsx_xsmerge2t2uqm (vuq, vuq);
+     XSMERGE2T2UQM vsx_xsmerge2t2uqm {}
+ 
+   const vuq __builtin_vsx_xsmerge2t3uqm (vuq, vuq);
+     XSMERGE2T3UQM vsx_xsmerge2t3uqm {}
+ 
+   const vuq __builtin_vsx_xsmerge3t1uqm (vuq, vuq, vuq);
+     XSMERGE3T1UQM vsx_xsmerge3t1uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase2t1uqm (vuq, vuq);
+     XSREBASE2T1UQM vsx_xsrebase2t1uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase2t2uqm (vuq, vuq);
+     XSREBASE2T2UQM vsx_xsrebase2t2uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase2t3uqm (vuq, vuq);
+     XSREBASE2T3UQM vsx_xsrebase2t3uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase2t4uqm (vuq, vuq);
+     XSREBASE2T4UQM vsx_xsrebase2t4uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase3t1uqm (vuq, vuq, vuq);
+     XSREBASE3T1UQM vsx_xsrebase3t1uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase3t2uqm (vuq, vuq, vuq);
+     XSREBASE3T2UQM vsx_xsrebase3t2uqm {}
+ 
+   const vuq __builtin_vsx_xsrebase3t3uqm (vuq, vuq, vuq);
+     XSREBASE3T3UQM vsx_xsrebase3t3uqm {}
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/rs6000-gen-builtins.cc gcc-17-20260628/gcc/config/rs6000/rs6000-gen-builtins.cc
*** gcc-17-20260621/gcc/config/rs6000/rs6000-gen-builtins.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/rs6000-gen-builtins.cc	Sun Jun 28 22:32:07 2026
*************** enum bif_stanza
*** 233,238 ****
--- 233,240 ----
   BSTZ_P10_64,
   BSTZ_MMA,
   BSTZ_FUTURE,
+  BSTZ_FUTURE_ALTIVEC,
+  BSTZ_FUTURE_VSX,
   NUMBIFSTANZAS
  };
  
*************** static stanza_entry stanza_map[NUMBIFSTA
*** 267,273 ****
      { "power10",	BSTZ_P10	},
      { "power10-64",	BSTZ_P10_64	},
      { "mma",		BSTZ_MMA	},
!     { "future",	BSTZ_FUTURE	}
    };
  
  static const char *enable_string[NUMBIFSTANZAS] =
--- 269,277 ----
      { "power10",	BSTZ_P10	},
      { "power10-64",	BSTZ_P10_64	},
      { "mma",		BSTZ_MMA	},
!     { "future",	BSTZ_FUTURE	},
!     { "future-altivec", BSTZ_FUTURE_ALTIVEC },
!     { "future-vsx",	BSTZ_FUTURE_VSX	}
    };
  
  static const char *enable_string[NUMBIFSTANZAS] =
*************** static const char *enable_string[NUMBIFS
*** 293,299 ****
      "ENB_P10",
      "ENB_P10_64",
      "ENB_MMA",
!     "ENB_FUTURE"
    };
  
  /* Function modifiers provide special handling for const, pure, and fpmath
--- 297,305 ----
      "ENB_P10",
      "ENB_P10_64",
      "ENB_MMA",
!     "ENB_FUTURE",
!     "ENB_FUTURE_ALTIVEC",
!     "ENB_FUTURE_VSX"
    };
  
  /* Function modifiers provide special handling for const, pure, and fpmath
*************** write_decls (void)
*** 2253,2259 ****
    fprintf (header_file, "  ENB_P10,\n");
    fprintf (header_file, "  ENB_P10_64,\n");
    fprintf (header_file, "  ENB_MMA,\n");
!   fprintf (header_file, "  ENB_FUTURE\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n");
--- 2259,2267 ----
    fprintf (header_file, "  ENB_P10,\n");
    fprintf (header_file, "  ENB_P10_64,\n");
    fprintf (header_file, "  ENB_MMA,\n");
!   fprintf (header_file, "  ENB_FUTURE,\n");
!   fprintf (header_file, "  ENB_FUTURE_ALTIVEC,\n");
!   fprintf (header_file, "  ENB_FUTURE_VSX\n");
    fprintf (header_file, "};\n\n");
  
    fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n");
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/rs6000-overload.def gcc-17-20260628/gcc/config/rs6000/rs6000-overload.def
*** gcc-17-20260621/gcc/config/rs6000/rs6000-overload.def	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/rs6000-overload.def	Sun Jun 28 22:32:07 2026
***************
*** 2530,2535 ****
--- 2530,2539 ----
      VMULEUD
  
  [VEC_MULH, vec_mulh, __builtin_vec_mulh]
+   vss __builtin_vec_mulh (vss, vss);
+     XVMULHSH
+   vus __builtin_vec_mulh (vus, vus);
+     XVMULHUH
    vsi __builtin_vec_mulh (vsi, vsi);
      VMULHSW
    vui __builtin_vec_mulh (vui, vui);
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/rs6000.cc gcc-17-20260628/gcc/config/rs6000/rs6000.cc
*** gcc-17-20260621/gcc/config/rs6000/rs6000.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/rs6000.cc	Sun Jun 28 22:32:07 2026
*************** rs6000_offsettable_memref_p (rtx op, mac
*** 10157,10163 ****
  */
  
  static int
! rs6000_reassociation_width (unsigned int opc ATTRIBUTE_UNUSED,
                              machine_mode mode)
  {
    switch (rs6000_tune)
--- 10157,10163 ----
  */
  
  static int
! rs6000_reassociation_width (tree_code opc ATTRIBUTE_UNUSED,
                              machine_mode mode)
  {
    switch (rs6000_tune)
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/rs6000.md gcc-17-20260628/gcc/config/rs6000/rs6000.md
*** gcc-17-20260621/gcc/config/rs6000/rs6000.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/rs6000.md	Sun Jun 28 22:32:07 2026
***************
*** 369,375 ****
    (const (symbol_ref "(enum attr_cpu) rs6000_tune")))
  
  ;; The ISA we implement.
! (define_attr "isa" "any,p5,p6,p7,p7v,p8,p8v,p9,p9v,p9kf,p9tf,p10"
    (const_string "any"))
  
  ;; Is this alternative enabled for the current CPU/ISA/etc.?
--- 369,375 ----
    (const (symbol_ref "(enum attr_cpu) rs6000_tune")))
  
  ;; The ISA we implement.
! (define_attr "isa" "any,p5,p6,p7,p7v,p8,p8v,p9,p9v,p9kf,p9tf,p10,future"
    (const_string "any"))
  
  ;; Is this alternative enabled for the current CPU/ISA/etc.?
***************
*** 421,426 ****
--- 421,430 ----
       (and (eq_attr "isa" "p10")
  	  (match_test "TARGET_POWER10"))
       (const_int 1)
+ 
+      (and (eq_attr "isa" "future")
+           (match_test "TARGET_FUTURE"))
+      (const_int 1)
      ] (const_int 0)))
  
  ;; If this instruction is microcoded on the CELL processor
diff -Nrcpad gcc-17-20260621/gcc/config/rs6000/vsx.md gcc-17-20260628/gcc/config/rs6000/vsx.md
*** gcc-17-20260621/gcc/config/rs6000/vsx.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/rs6000/vsx.md	Sun Jun 28 22:32:07 2026
***************
*** 369,374 ****
--- 369,395 ----
     UNSPEC_XXSPLTI32DX
     UNSPEC_XXBLEND
     UNSPEC_XXPERMX
+    UNSPEC_XXMULMUL
+    UNSPEC_XXMULMULHIADD
+    UNSPEC_XXMULMULLOADD
+    UNSPEC_XXSSUMUDM
+    UNSPEC_XXSSUMUDMC
+    UNSPEC_XXSSUMUDMCEXT
+    UNSPEC_XSADDADDUQM
+    UNSPEC_XSADDADDSUQM
+    UNSPEC_XSADDSUBUQM
+    UNSPEC_XSADDSUBSUQM
+    UNSPEC_XSMERGE2T1UQM
+    UNSPEC_XSMERGE2T2UQM
+    UNSPEC_XSMERGE2T3UQM
+    UNSPEC_XSMERGE3T1UQM
+    UNSPEC_XSREBASE2T1UQM
+    UNSPEC_XSREBASE2T2UQM
+    UNSPEC_XSREBASE2T3UQM
+    UNSPEC_XSREBASE2T4UQM
+    UNSPEC_XSREBASE3T1UQM
+    UNSPEC_XSREBASE3T2UQM
+    UNSPEC_XSREBASE3T3UQM
    ])
  
  (define_int_iterator XVCVBF16	[UNSPEC_VSX_XVCVSPBF16
***************
*** 418,423 ****
--- 439,447 ----
  (define_int_attr vczlsbb_char [(UNSPEC_VCLZLSBB "l")
  			       (UNSPEC_VCTZLSBB "t")])
  
+ ;; Vector integer arithmetic modes
+ (define_mode_iterator VIArith [V8HI V4SI])
+ 
  ;; VSX moves
  
  ;; TImode memory to memory move optimization on LE with p8vector
***************
*** 1711,1716 ****
--- 1735,1747 ----
    "xvsub<sd>p %x0,%x1,%x2"
    [(set_attr "type" "<VStype_simple>")])
  
+ (define_insn "vsx_mul<mode>3"
+   [(set (match_operand:VIArith 0 "vsx_register_operand" "=wa")
+         (mult:VIArith (match_operand:VIArith 1 "vsx_register_operand" "wa")
+                       (match_operand:VIArith 2 "vsx_register_operand" "wa")))]
+   "TARGET_FUTURE && TARGET_VSX"
+   "xvmulu<wd>m %x0,%x1,%x2")
+ 
  (define_insn "*vsx_mul<mode>3"
    [(set (match_operand:VSX_F 0 "vsx_register_operand" "=wa")
          (mult:VSX_F (match_operand:VSX_F 1 "vsx_register_operand" "wa")
***************
*** 6546,6567 ****
    [(set_attr "type" "vecdiv")
     (set_attr "size" "<bits>")])
  
! (define_insn "smul<mode>3_highpart"
!   [(set (match_operand:VIlong 0 "altivec_register_operand" "=v")
! 	(smul_highpart:VIlong
! 	  (match_operand:VIlong 1 "altivec_register_operand" "v")
! 	  (match_operand:VIlong 2 "altivec_register_operand" "v")))]
    "TARGET_POWER10"
!   "vmulhs<wd> %0,%1,%2"
    [(set_attr "type" "veccomplex")])
  
! (define_insn "umul<mode>3_highpart"
!   [(set (match_operand:VIlong 0 "altivec_register_operand" "=v")
! 	(umul_highpart:VIlong
! 	  (match_operand:VIlong 1 "altivec_register_operand" "v")
! 	  (match_operand:VIlong 2 "altivec_register_operand" "v")))]
    "TARGET_POWER10"
!   "vmulhu<wd> %0,%1,%2"
    [(set_attr "type" "veccomplex")])
  
  ;; Vector multiply low double word
--- 6577,6638 ----
    [(set_attr "type" "vecdiv")
     (set_attr "size" "<bits>")])
  
! (define_insn "smulv8hi3_highpart"
!   [(set (match_operand:V8HI 0 "vsx_register_operand" "=wa")
!         (smul_highpart:V8HI
!           (match_operand:V8HI 1 "vsx_register_operand" "wa")
!           (match_operand:V8HI 2 "vsx_register_operand" "wa")))]
!   "TARGET_FUTURE && TARGET_VSX"
!   "xvmulhsh %x0,%x1,%x2")
! 
! (define_insn "smulv4si3_highpart"
!   [(set (match_operand:V4SI 0 "register_operand" "=wa,v")
!         (smul_highpart:V4SI
!           (match_operand:V4SI 1 "register_operand" "wa,v")
!           (match_operand:V4SI 2 "register_operand" "wa,v")))]
    "TARGET_POWER10"
!   "@
!    xvmulhsw %x0,%x1,%x2
!    vmulhsw %0,%1,%2"
!   [(set_attr "type" "veccomplex")
!    (set_attr "isa" "future,p10")])
! 
! (define_insn "smulv2di3_highpart"
!   [(set (match_operand:V2DI 0 "altivec_register_operand" "=v")
!         (smul_highpart:V2DI
!           (match_operand:V2DI 1 "altivec_register_operand" "v")
!           (match_operand:V2DI 2 "altivec_register_operand" "v")))]
!   "TARGET_POWER10"
!   "vmulhsd %0,%1,%2"
    [(set_attr "type" "veccomplex")])
  
! (define_insn "umulv8hi3_highpart"
!   [(set (match_operand:V8HI 0 "vsx_register_operand" "=wa")
!         (umul_highpart:V8HI
!           (match_operand:V8HI 1 "vsx_register_operand" "wa")
!           (match_operand:V8HI 2 "vsx_register_operand" "wa")))]
!   "TARGET_FUTURE && TARGET_VSX"
!   "xvmulhuh %x0,%x1,%x2")
! 
! (define_insn "umulv4si3_highpart"
!   [(set (match_operand:V4SI 0 "register_operand" "=wa,v")
!         (umul_highpart:V4SI
!           (match_operand:V4SI 1 "register_operand" "wa,v")
!           (match_operand:V4SI 2 "register_operand" "wa,v")))]
    "TARGET_POWER10"
!   "@
!    xvmulhuw %x0,%x1,%x2
!    vmulhuw %0,%1,%2"
!   [(set_attr "type" "veccomplex")
!    (set_attr "isa" "future,p10")])
! 
! (define_insn "umulv2di3_highpart"
!   [(set (match_operand:V2DI 0 "altivec_register_operand" "=v")
!         (umul_highpart:V2DI
!           (match_operand:V2DI 1 "altivec_register_operand" "v")
!           (match_operand:V2DI 2 "altivec_register_operand" "v")))]
!   "TARGET_POWER10"
!   "vmulhud %0,%1,%2"
    [(set_attr "type" "veccomplex")])
  
  ;; Vector multiply low double word
***************
*** 6801,6803 ****
--- 6872,7089 ----
    emit_insn (gen_vsx_extract_v2di (dest_op1, src_op, const1_rtx));
    DONE;
  })
+ 
+ 
+ ;; ECC (Elliptic Curve Cryptography) acceleration instructions for Power future
+ ;; These instructions support P-256 and P-384 elliptic curve operations
+ 
+ ;; xxmulmul - Multiply-Multiply with scaling
+ (define_insn "vsx_xxmulmul"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V2DI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V2DI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:QI 3 "const_0_to_6_operand" "n")]
+ 		     UNSPEC_XXMULMUL))]
+   "TARGET_FUTURE"
+   "xxmulmul %x0,%x1,%x2,%3")
+ 
+ ;; xxmulmulhiadd - Multiply-Multiply with high add and accumulator
+ (define_insn "vsx_xxmulmulhiadd"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V2DI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V2DI 3 "vsx_register_operand" "wa")
+ 		      (match_operand:QI 4 "const_0_to_1_operand" "n")
+ 		      (match_operand:QI 5 "const_0_to_1_operand" "n")
+ 		      (match_operand:QI 6 "const_0_to_1_operand" "n")]
+ 		     UNSPEC_XXMULMULHIADD))]
+   "TARGET_FUTURE"
+   "xxmulmulhiadd %x0,%x2,%x3,%4,%5,%6")
+ 
+ ;; xxmulmulloadd - Multiply-Multiply low add with accumulator
+ (define_insn "vsx_xxmulmulloadd"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V2DI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V2DI 3 "vsx_register_operand" "wa")
+ 		      (match_operand:QI 4 "const_0_to_1_operand" "n")
+ 		      (match_operand:QI 5 "const_0_to_1_operand" "n")]
+ 		     UNSPEC_XXMULMULLOADD))]
+   "TARGET_FUTURE"
+   "xxmulmulloadd %x0,%x2,%x3,%4,%5")
+ 
+ ;; xxssumudm - Scaled sum unsigned doubleword modulo
+ (define_insn "vsx_xxssumudm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V2DI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V2DI 3 "vsx_register_operand" "wa")
+ 		      (match_operand:QI 4 "const_0_to_1_operand" "n")]
+ 		     UNSPEC_XXSSUMUDM))]
+   "TARGET_FUTURE"
+   "xxssumudm %x0,%x2,%x3,%4")
+ 
+ ;; xxssumudmc - Scaled sum unsigned doubleword modulo carry
+ (define_insn "vsx_xxssumudmc"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V2DI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V2DI 3 "vsx_register_operand" "wa")
+ 		      (match_operand:QI 4 "const_0_to_1_operand" "n")]
+ 		     UNSPEC_XXSSUMUDMC))]
+   "TARGET_FUTURE"
+   "xxssumudmc %x0,%x2,%x3,%4")
+ 
+ ;; xxssumudmcext - Scaled sum unsigned doubleword modulo carry extended (prefixed)
+ (define_insn "vsx_xxssumudmcext"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V2DI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V2DI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")
+ 		      (match_operand:QI 4 "const_0_to_1_operand" "n")]
+ 		     UNSPEC_XXSSUMUDMCEXT))]
+   "TARGET_FUTURE"
+   "xxssumudmcext %x0,%x1,%x2,%x3,%4")
+ 
+ ;; xsaddadduqm - Add add unsigned quadword modulo
+ (define_insn "vsx_xsaddadduqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSADDADDUQM))]
+   "TARGET_FUTURE"
+   "xsaddadduqm %x0,%x2,%x3")
+ 
+ ;; xsaddaddsuqm - Add add scaled unsigned quadword modulo
+ (define_insn "vsx_xsaddaddsuqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSADDADDSUQM))]
+   "TARGET_FUTURE"
+   "xsaddaddsuqm %x0,%x2,%x3")
+ 
+ ;; xsaddsubuqm - Add subtract unsigned quadword modulo
+ (define_insn "vsx_xsaddsubuqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSADDSUBUQM))]
+   "TARGET_FUTURE"
+   "xsaddsubuqm %x0,%x2,%x3")
+ 
+ ;; xsaddsubsuqm - Add subtract scaled unsigned quadword modulo
+ (define_insn "vsx_xsaddsubsuqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSADDSUBSUQM))]
+   "TARGET_FUTURE"
+   "xsaddsubsuqm %x0,%x2,%x3")
+ 
+ ;; xsmerge2t1uqm - Merge type 1 (2-operand)
+ (define_insn "vsx_xsmerge2t1uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSMERGE2T1UQM))]
+   "TARGET_FUTURE"
+   "xsmerge2t1uqm %x0,%x1,%x2")
+ 
+ ;; xsmerge2t2uqm - Merge type 2 (2-operand)
+ (define_insn "vsx_xsmerge2t2uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSMERGE2T2UQM))]
+   "TARGET_FUTURE"
+   "xsmerge2t2uqm %x0,%x1,%x2")
+ 
+ ;; xsmerge2t3uqm - Merge type 3 (2-operand)
+ (define_insn "vsx_xsmerge2t3uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSMERGE2T3UQM))]
+   "TARGET_FUTURE"
+   "xsmerge2t3uqm %x0,%x1,%x2")
+ 
+ ;; xsmerge3t1uqm - Merge type 1 (3-operand with accumulator)
+ (define_insn "vsx_xsmerge3t1uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSMERGE3T1UQM))]
+   "TARGET_FUTURE"
+   "xsmerge3t1uqm %x0,%x2,%x3")
+ 
+ ;; xsrebase2t1uqm - Rebase type 1 (2-operand)
+ (define_insn "vsx_xsrebase2t1uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE2T1UQM))]
+   "TARGET_FUTURE"
+   "xsrebase2t1uqm %x0,%x1,%x2")
+ 
+ ;; xsrebase2t2uqm - Rebase type 2 (2-operand)
+ (define_insn "vsx_xsrebase2t2uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE2T2UQM))]
+   "TARGET_FUTURE"
+   "xsrebase2t2uqm %x0,%x1,%x2")
+ 
+ ;; xsrebase2t3uqm - Rebase type 3 (2-operand)
+ (define_insn "vsx_xsrebase2t3uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE2T3UQM))]
+   "TARGET_FUTURE"
+   "xsrebase2t3uqm %x0,%x1,%x2")
+ 
+ ;; xsrebase2t4uqm - Rebase type 4 (2-operand)
+ (define_insn "vsx_xsrebase2t4uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE2T4UQM))]
+   "TARGET_FUTURE"
+   "xsrebase2t4uqm %x0,%x1,%x2")
+ 
+ ;; xsrebase3t1uqm - Rebase type 1 (3-operand with accumulator)
+ (define_insn "vsx_xsrebase3t1uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE3T1UQM))]
+   "TARGET_FUTURE"
+   "xsrebase3t1uqm %x0,%x2,%x3")
+ 
+ ;; xsrebase3t2uqm - Rebase type 2 (3-operand with accumulator)
+ (define_insn "vsx_xsrebase3t2uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE3T2UQM))]
+   "TARGET_FUTURE"
+   "xsrebase3t2uqm %x0,%x2,%x3")
+ 
+ ;; xsrebase3t3uqm - Rebase type 3 (3-operand with accumulator)
+ (define_insn "vsx_xsrebase3t3uqm"
+   [(set (match_operand:V1TI 0 "vsx_register_operand" "=wa")
+ 	(unspec:V1TI [(match_operand:V1TI 1 "vsx_register_operand" "0")
+ 		      (match_operand:V1TI 2 "vsx_register_operand" "wa")
+ 		      (match_operand:V1TI 3 "vsx_register_operand" "wa")]
+ 		     UNSPEC_XSREBASE3T3UQM))]
+   "TARGET_FUTURE"
+   "xsrebase3t3uqm %x0,%x2,%x3")
diff -Nrcpad gcc-17-20260621/gcc/config/s390/s390.cc gcc-17-20260628/gcc/config/s390/s390.cc
*** gcc-17-20260621/gcc/config/s390/s390.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/s390/s390.cc	Sun Jun 28 22:32:07 2026
*************** s390_rtx_costs (rtx x, machine_mode mode
*** 3977,3989 ****
      case MEM:
        *total = 0;
        return true;
!       case SET: {
  	rtx dst = SET_DEST (x);
  	rtx src = SET_SRC (x);
  
  	switch (GET_CODE (src))
  	  {
! 	    case IF_THEN_ELSE: {
  	      /* Without this a conditional move instruction would be
  		 accounted as 3 * COSTS_N_INSNS (set, if_then_else,
  		 comparison operator).  That's a bit pessimistic.  */
--- 3977,3991 ----
      case MEM:
        *total = 0;
        return true;
!     case SET:
!       {
  	rtx dst = SET_DEST (x);
  	rtx src = SET_SRC (x);
  
  	switch (GET_CODE (src))
  	  {
! 	  case IF_THEN_ELSE:
! 	    {
  	      /* Without this a conditional move instruction would be
  		 accounted as 3 * COSTS_N_INSNS (set, if_then_else,
  		 comparison operator).  That's a bit pessimistic.  */
*************** s390_rtx_costs (rtx x, machine_mode mode
*** 3992,3997 ****
--- 3994,4005 ----
  		return false;
  
  	      rtx cond = XEXP (src, 0);
+ 	      /* Intermediate RTXs may have a non-compare condition as e.g. a
+ 		 constant like r108={(0x1)?r113:r109} which get folded later
+ 		 on.  */
+ 	      if (GET_RTX_CLASS (GET_CODE (cond)) != RTX_COMPARE
+ 		  && GET_RTX_CLASS (GET_CODE (cond)) != RTX_COMM_COMPARE)
+ 		return false;
  	      if (!CC_REG_P (XEXP (cond, 0)) || !CONST_INT_P (XEXP (cond, 1)))
  		return false;
  
*************** s390_rtx_costs (rtx x, machine_mode mode
*** 4050,4056 ****
  	      /* Otherwise just cost the src.  */
  	      *total += rtx_cost (src, mode, SET, 1, speed);
  	    return true;
! 	    case MEM: {
  	      rtx address = XEXP (dst, 0);
  	      rtx tmp;
  	      HOST_WIDE_INT tmp2;
--- 4058,4065 ----
  	      /* Otherwise just cost the src.  */
  	      *total += rtx_cost (src, mode, SET, 1, speed);
  	    return true;
! 	  case MEM:
! 	    {
  	      rtx address = XEXP (dst, 0);
  	      rtx tmp;
  	      HOST_WIDE_INT tmp2;
diff -Nrcpad gcc-17-20260621/gcc/config/s390/s390.md gcc-17-20260628/gcc/config/s390/s390.md
*** gcc-17-20260621/gcc/config/s390/s390.md	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config/s390/s390.md	Sun Jun 28 22:32:07 2026
***************
*** 10256,10261 ****
--- 10256,10262 ----
  	 (pc)))
     (set (match_operand:GPR 4 "nonimmediate_operand" "")
          (plus:GPR (match_dup 1) (match_dup 2)))
+    (clobber (reg:CC CC_REGNUM))
     (clobber (match_scratch:GPR 5 ""))]
    ""
    "#"
diff -Nrcpad gcc-17-20260621/gcc/config.gcc gcc-17-20260628/gcc/config.gcc
*** gcc-17-20260621/gcc/config.gcc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/config.gcc	Sun Jun 28 22:32:06 2026
*************** sapphirerapids alderlake rocketlake eden
*** 763,769 ****
  nano-x2 eden-x4 nano-x4 lujiazui yongfeng shijidadao x86-64 x86-64-v2 \
  x86-64-v3 x86-64-v4 sierraforest graniterapids graniterapids-d grandridge \
  arrowlake arrowlake-s clearwaterforest pantherlake diamondrapids novalake \
! c86-4g-m4 c86-4g-m6 c86-4g-m7 native"
  
  # Additional x86 processors supported by --with-cpu=.  Each processor
  # MUST be separated by exactly one space.
--- 763,769 ----
  nano-x2 eden-x4 nano-x4 lujiazui yongfeng shijidadao x86-64 x86-64-v2 \
  x86-64-v3 x86-64-v4 sierraforest graniterapids graniterapids-d grandridge \
  arrowlake arrowlake-s clearwaterforest pantherlake diamondrapids novalake \
! c86-4g-m4 c86-4g-m6 c86-4g-m7 c86-4g-m8 native"
  
  # Additional x86 processors supported by --with-cpu=.  Each processor
  # MUST be separated by exactly one space.
*************** case ${target} in
*** 4009,4014 ****
--- 4009,4018 ----
  	arch=c86-4g-m7
  	cpu=c86-4g-m7
  	;;
+       c86_4g_m8-*)
+ 	arch=c86-4g-m8
+ 	cpu=c86-4g-m8
+ 	;;
        *)
  	arch=pentiumpro
  	cpu=generic
*************** case ${target} in
*** 4123,4128 ****
--- 4127,4136 ----
  	arch=c86-4g-m7
  	cpu=c86-4g-m7
  	;;
+       c86_4g_m8-*)
+ 	arch=c86-4g-m8
+ 	cpu=c86-4g-m8
+ 	;;
        *)
  	arch=x86-64
  	cpu=generic
diff -Nrcpad gcc-17-20260621/gcc/config.in gcc-17-20260628/gcc/config.in
*** gcc-17-20260621/gcc/config.in	Sun Jun 21 22:32:18 2026
--- gcc-17-20260628/gcc/config.in	Sun Jun 28 22:32:21 2026
***************
*** 507,519 ****
  #endif
  
  
- /* Define if your assembler supports the subtraction of symbols in different
-    sections. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_AS_IX86_DIFF_SECT_DELTA
- #endif
- 
- 
  /* Define if your assembler supports the ffreep mnemonic. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_AS_IX86_FFREEP
--- 507,512 ----
***************
*** 550,561 ****
  #endif
  
  
- /* Define if your assembler supports the .quad directive. */
- #ifndef USED_FOR_TARGET
- #undef HAVE_AS_IX86_QUAD
- #endif
- 
- 
  /* Define if the assembler supports 'rep <insn>, lock <insn>'. */
  #ifndef USED_FOR_TARGET
  #undef HAVE_AS_IX86_REP_LOCK_PREFIX
--- 543,548 ----
diff -Nrcpad gcc-17-20260621/gcc/configure gcc-17-20260628/gcc/configure
*** gcc-17-20260621/gcc/configure	Sun Jun 21 22:32:18 2026
--- gcc-17-20260628/gcc/configure	Sun Jun 28 22:32:21 2026
*************** $as_echo "#define HAVE_AS_IX86_FFREEP 1"
*** 29666,29703 ****
  fi
  
  
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for .quad directive" >&5
- $as_echo_n "checking assembler for .quad directive... " >&6; }
- if ${gcc_cv_as_ix86_quad+:} false; then :
-   $as_echo_n "(cached) " >&6
- else
-   gcc_cv_as_ix86_quad=no
-   if test x"$gcc_cv_as" != x; then
-     $as_echo '.quad 0' > conftest.s
-     if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
-   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-   (eval $ac_try) 2>&5
-   ac_status=$?
-   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-   test $ac_status = 0; }; }
-     then
- 	gcc_cv_as_ix86_quad=yes
-     else
-       echo "configure: failed program was" >&5
-       cat conftest.s >&5
-     fi
-     rm -f conftest.o conftest.s
-   fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_quad" >&5
- $as_echo "$gcc_cv_as_ix86_quad" >&6; }
- if test $gcc_cv_as_ix86_quad = yes; then
- 
- $as_echo "#define HAVE_AS_IX86_QUAD 1" >>confdefs.h
- 
- fi
- 
- 
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for sahf mnemonic" >&5
  $as_echo_n "checking assembler for sahf mnemonic... " >&6; }
  if ${gcc_cv_as_ix86_sahf+:} false; then :
--- 29666,29671 ----
*************** $as_echo "#define HAVE_AS_IX86_SWAP 1" >
*** 29829,29872 ****
  
  fi
  
- 
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for different section symbol subtraction" >&5
- $as_echo_n "checking assembler for different section symbol subtraction... " >&6; }
- if ${gcc_cv_as_ix86_diff_sect_delta+:} false; then :
-   $as_echo_n "(cached) " >&6
- else
-   gcc_cv_as_ix86_diff_sect_delta=no
-   if test x"$gcc_cv_as" != x; then
-     $as_echo '.section .rodata
- .L1:
-         .long .L2-.L1
-         .long .L3-.L1
-         .text
- .L3:    nop
- .L2:    nop' > conftest.s
-     if { ac_try='$gcc_cv_as $gcc_cv_as_flags  -o conftest.o conftest.s >&5'
-   { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
-   (eval $ac_try) 2>&5
-   ac_status=$?
-   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-   test $ac_status = 0; }; }
-     then
- 	gcc_cv_as_ix86_diff_sect_delta=yes
-     else
-       echo "configure: failed program was" >&5
-       cat conftest.s >&5
-     fi
-     rm -f conftest.o conftest.s
-   fi
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_as_ix86_diff_sect_delta" >&5
- $as_echo "$gcc_cv_as_ix86_diff_sect_delta" >&6; }
- if test $gcc_cv_as_ix86_diff_sect_delta = yes; then
- 
- $as_echo "#define HAVE_AS_IX86_DIFF_SECT_DELTA 1" >>confdefs.h
- 
- fi
- 
  
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for rep and lock prefix" >&5
  $as_echo_n "checking assembler for rep and lock prefix... " >&6; }
--- 29797,29802 ----
diff -Nrcpad gcc-17-20260621/gcc/configure.ac gcc-17-20260628/gcc/configure.ac
*** gcc-17-20260621/gcc/configure.ac	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/configure.ac	Sun Jun 28 22:32:07 2026
*************** foo:	nop
*** 4894,4905 ****
        [AC_DEFINE(HAVE_AS_IX86_FFREEP, 1,
          [Define if your assembler supports the ffreep mnemonic.])])
  
-     gcc_GAS_CHECK_FEATURE([.quad directive],
-       gcc_cv_as_ix86_quad,,
-       [.quad 0],,
-       [AC_DEFINE(HAVE_AS_IX86_QUAD, 1,
-         [Define if your assembler supports the .quad directive.])])
- 
      gcc_GAS_CHECK_FEATURE([sahf mnemonic],
        gcc_cv_as_ix86_sahf,,
        [.code64
--- 4894,4899 ----
*************** foo:	nop
*** 4928,4945 ****
        [AC_DEFINE(HAVE_AS_IX86_SWAP, 1,
          [Define if your assembler supports the swap suffix.])])
  
-     gcc_GAS_CHECK_FEATURE([different section symbol subtraction],
-       gcc_cv_as_ix86_diff_sect_delta,,
-       [.section .rodata
- .L1:
-         .long .L2-.L1
-         .long .L3-.L1
-         .text
- .L3:    nop
- .L2:    nop],,
-       [AC_DEFINE(HAVE_AS_IX86_DIFF_SECT_DELTA, 1,
-         [Define if your assembler supports the subtraction of symbols in different sections.])])
- 
      gcc_GAS_CHECK_FEATURE([rep and lock prefix],
          gcc_cv_as_ix86_rep_lock_prefix,,
  	[rep movsl
--- 4922,4927 ----
diff -Nrcpad gcc-17-20260621/gcc/coretypes.h gcc-17-20260628/gcc/coretypes.h
*** gcc-17-20260621/gcc/coretypes.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/coretypes.h	Sun Jun 28 22:32:07 2026
*************** enum tree_index : unsigned;
*** 105,110 ****
--- 105,113 ----
  /* Forward declare rtx_code, so that we can use it in target hooks without
     needing to pull in rtl.h.  */
  enum rtx_code : unsigned;
+ /* Forward declare tree_code, so that we can use it in target hooks without
+    needing to pull in tree-core.h.  */
+ enum tree_code : unsigned;
  
  /* Forward decls for leaf gimple subclasses (for individual gimple codes).
     Keep this in the same order as the corresponding codes in gimple.def.  */
diff -Nrcpad gcc-17-20260621/gcc/cp/ChangeLog gcc-17-20260628/gcc/cp/ChangeLog
*** gcc-17-20260621/gcc/cp/ChangeLog	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/ChangeLog	Sun Jun 28 22:32:07 2026
***************
*** 1,3 ****
--- 1,107 ----
+ 2026-06-26  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125900
+ 	* reflect.cc (check_out_of_consteval_use_r): Don't walk
+ 	SPLICE_EXPR.
+ 
+ 2026-06-25  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125922
+ 	* parser.cc (cp_parser_reflect_expression): Temporarily set
+ 	parser->type_definition_forbidden_message.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	* module.cc (trees_out::decl_value): Adjust for enum class
+ 	tree_code.
+ 
+ 2026-06-24  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125939
+ 	* cp-tree.h (build_const_lref): Declare.
+ 	* method.cc (build_stub_type): Pass tf_ignore_bad_quals to
+ 	cp_build_qualified_type.
+ 	* reflect.cc (build_const_lref): New.
+ 	(get_range_elts): Use it.
+ 	(eval_is_copy_constructible_type): Likewise.
+ 	(eval_is_copy_assignable_type): Likewise.
+ 	(eval_is_trivially_copy_assignable_type): Likewise.
+ 	(eval_is_nothrow_copy_constructible_type): Likewise.
+ 	(eval_is_nothrow_copy_assignable_type): Likewise.
+ 	* tree.cc (trivially_copy_constructible_p): Likewise.
+ 	(handle_annotation_attribute): Likewise.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* semantics.cc (finish_omp_barrier): Push GOMP_BARRIER_EXPLICIT
+ 	onto the argument vector.
+ 
+ 2026-06-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125334
+ 	* module.cc (depset::hash::find_dependencies): Don't add_dependency
+ 	dependent ADL functions.
+ 
+ 2026-06-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125768
+ 	* module.cc (trees_out::decl_node): When not streaming,
+ 	recurse into DECL_ORIGINAL_TYPE of an imported typedef.
+ 
+ 2026-06-23  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 	    Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* parser.cc (cp_parser_omp_iterators): Use iterator constructors
+ 	and macros for accessing iterator elements.
+ 	(cp_parser_omp_clause_affinity): Likewise.
+ 	(cp_parser_omp_clause_depend): Likewise.
+ 	(cp_parser_omp_clause_from_to): Likewise.
+ 	(cp_parser_omp_clause_map): Likewise.
+ 	* pt.cc (tsubst_omp_clause_decl): Likewise.
+ 	* semantics.cc (cp_omp_finish_iterators): Likewise.
+ 
+ 2026-06-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125745
+ 	* cp-ubsan.cc (cp_ubsan_instrument_vptr): Use build_vfield_ref.
+ 
+ 2026-06-22  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125697
+ 	* cp-tree.h (trivially_copy_constructible_p): Declare.
+ 	* parser.cc (warn_for_range_copy): Use it.
+ 	* reflect.cc (eval_is_trivially_copy_constructible_type): Use it.
+ 	* tree.cc (trivially_copy_constructible_p): New.
+ 
+ 2026-06-22  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125889
+ 	* reflect.cc (class_members_of): Also append LAMBDA_FUNCTION_P
+ 	from the implicitly_declared vector.
+ 
+ 2026-06-22  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* call.cc: Remove -*- C++ -*- tags for Emacs.
+ 	* class.cc: Same.
+ 	* constexpr.cc: Same.
+ 	* decl.cc: Same.
+ 	* init.cc: Same.
+ 	* mangle.cc: Same.
+ 	* mapper-resolver.cc: Same.
+ 	* parser.cc: Same.
+ 	* pt.cc: Same.
+ 
+ 2026-06-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125408
+ 	* expr.cc (mark_use): Fix condition for changing rvalue to lvalue.
+ 
+ 2026-06-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125408
+ 	* tree.cc (cp_walk_subtrees): Walk into the DECL_ORIGINAL_TYPE of a
+ 	typedef DECL_EXPR.
+ 
  2026-06-18  Marek Polacek  <polacek@redhat.com>
  
  	* decl.cc (check_initializer): Don't call
diff -Nrcpad gcc-17-20260621/gcc/cp/call.cc gcc-17-20260628/gcc/cp/call.cc
*** gcc-17-20260621/gcc/cp/call.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/call.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Functions related to invoking -*- C++ -*- methods and overloaded functions.
     Copyright (C) 1987-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com) and
     modified by Brendan Kehoe (brendan@cygnus.com).
--- 1,4 ----
! /* Functions related to invoking C++ methods and overloaded functions.
     Copyright (C) 1987-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com) and
     modified by Brendan Kehoe (brendan@cygnus.com).
*************** struct conversion {
*** 95,130 ****
    conversion_kind kind;
    /* The rank of this conversion.  */
    conversion_rank rank;
!   BOOL_BITFIELD user_conv_p : 1;
!   BOOL_BITFIELD ellipsis_p : 1;
!   BOOL_BITFIELD this_p : 1;
    /* True if this conversion would be permitted with a bending of
       language standards, e.g. disregarding pointer qualifiers or
       converting integers to pointers.  */
!   BOOL_BITFIELD bad_p : 1;
    /* If KIND is ck_ref_bind or ck_base, true to indicate that a
       temporary should be created to hold the result of the
       conversion.  If KIND is ck_ambig or ck_user, true means force
       copy-initialization.  */
!   BOOL_BITFIELD need_temporary_p : 1;
    /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
       from a pointer-to-derived to pointer-to-base is being performed.  */
!   BOOL_BITFIELD base_p : 1;
    /* If KIND is ck_ref_bind, true when either an lvalue reference is
       being bound to an lvalue expression or an rvalue reference is
       being bound to an rvalue expression.  If KIND is ck_rvalue or ck_base,
       true when we are treating an lvalue as an rvalue (12.8p33).  If
       ck_identity, we will be binding a reference directly or decaying to
       a pointer.  */
!   BOOL_BITFIELD rvaluedness_matches_p: 1;
!   BOOL_BITFIELD check_narrowing: 1;
    /* Whether check_narrowing should only check TREE_CONSTANTs; used
       in build_converted_constant_expr.  */
!   BOOL_BITFIELD check_narrowing_const_only: 1;
    /* True if this conversion is taking place in a copy-initialization context
       and we should only consider converting constructors.  Only set in
       ck_base and ck_rvalue.  */
!   BOOL_BITFIELD copy_init_p : 1;
    /* The type of the expression resulting from the conversion.  */
    tree type;
    union {
--- 95,130 ----
    conversion_kind kind;
    /* The rank of this conversion.  */
    conversion_rank rank;
!   bool user_conv_p : 1;
!   bool ellipsis_p : 1;
!   bool this_p : 1;
    /* True if this conversion would be permitted with a bending of
       language standards, e.g. disregarding pointer qualifiers or
       converting integers to pointers.  */
!   bool bad_p : 1;
    /* If KIND is ck_ref_bind or ck_base, true to indicate that a
       temporary should be created to hold the result of the
       conversion.  If KIND is ck_ambig or ck_user, true means force
       copy-initialization.  */
!   bool need_temporary_p : 1;
    /* If KIND is ck_ptr or ck_pmem, true to indicate that a conversion
       from a pointer-to-derived to pointer-to-base is being performed.  */
!   bool base_p : 1;
    /* If KIND is ck_ref_bind, true when either an lvalue reference is
       being bound to an lvalue expression or an rvalue reference is
       being bound to an rvalue expression.  If KIND is ck_rvalue or ck_base,
       true when we are treating an lvalue as an rvalue (12.8p33).  If
       ck_identity, we will be binding a reference directly or decaying to
       a pointer.  */
!   bool rvaluedness_matches_p: 1;
!   bool check_narrowing: 1;
    /* Whether check_narrowing should only check TREE_CONSTANTs; used
       in build_converted_constant_expr.  */
!   bool check_narrowing_const_only: 1;
    /* True if this conversion is taking place in a copy-initialization context
       and we should only consider converting constructors.  Only set in
       ck_base and ck_rvalue.  */
!   bool copy_init_p : 1;
    /* The type of the expression resulting from the conversion.  */
    tree type;
    union {
diff -Nrcpad gcc-17-20260621/gcc/cp/class.cc gcc-17-20260628/gcc/cp/class.cc
*** gcc-17-20260621/gcc/cp/class.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/class.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Functions related to building -*- C++ -*- classes and their related objects.
     Copyright (C) 1987-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com)
  
--- 1,4 ----
! /* Functions related to building C++ classes and their related objects.
     Copyright (C) 1987-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com)
  
diff -Nrcpad gcc-17-20260621/gcc/cp/constexpr.cc gcc-17-20260628/gcc/cp/constexpr.cc
*** gcc-17-20260621/gcc/cp/constexpr.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/constexpr.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Perform -*- C++ -*- constant expression evaluation, including calls to
     constexpr functions.  These routines are used both during actual parsing
     and during the instantiation of template functions.
  
--- 1,4 ----
! /* Perform C++ constant expression evaluation, including calls to
     constexpr functions.  These routines are used both during actual parsing
     and during the instantiation of template functions.
  
diff -Nrcpad gcc-17-20260621/gcc/cp/cp-tree.h gcc-17-20260628/gcc/cp/cp-tree.h
*** gcc-17-20260621/gcc/cp/cp-tree.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/cp-tree.h	Sun Jun 28 22:32:07 2026
*************** struct GTY(()) saved_scope {
*** 2107,2126 ****
    int x_processing_specialization;
    int x_processing_constraint;
    int suppress_location_wrappers;
!   BOOL_BITFIELD x_processing_postcondition : 1;
!   BOOL_BITFIELD x_processing_explicit_instantiation : 1;
!   BOOL_BITFIELD need_pop_function_context : 1;
!   BOOL_BITFIELD x_processing_omp_trait_property_expr : 1;
  
    /* Nonzero if we are parsing the discarded statement of a constexpr
       if-statement.  */
!   BOOL_BITFIELD discarded_stmt : 1;
    /* Nonzero if we are parsing or instantiating the compound-statement
       of consteval if statement.  Also set while processing an immediate
       invocation.  */
!   BOOL_BITFIELD consteval_if_p : 1;
    /* Nonzero if we are parsing the substatement of expansion-statement.  */
!   BOOL_BITFIELD expansion_stmt : 1;
  
    int unevaluated_operand;
    int inhibit_evaluation_warnings;
--- 2107,2126 ----
    int x_processing_specialization;
    int x_processing_constraint;
    int suppress_location_wrappers;
!   bool x_processing_postcondition : 1;
!   bool x_processing_explicit_instantiation : 1;
!   bool need_pop_function_context : 1;
!   bool x_processing_omp_trait_property_expr : 1;
  
    /* Nonzero if we are parsing the discarded statement of a constexpr
       if-statement.  */
!   bool discarded_stmt : 1;
    /* Nonzero if we are parsing or instantiating the compound-statement
       of consteval if statement.  Also set while processing an immediate
       invocation.  */
!   bool consteval_if_p : 1;
    /* Nonzero if we are parsing the substatement of expansion-statement.  */
!   bool expansion_stmt : 1;
  
    int unevaluated_operand;
    int inhibit_evaluation_warnings;
*************** struct GTY(()) language_function {
*** 2365,2384 ****
    tree x_vtt_parm;
    tree x_return_value;
  
!   BOOL_BITFIELD returns_value : 1;
!   BOOL_BITFIELD returns_null : 1;
!   BOOL_BITFIELD returns_abnormally : 1;
!   BOOL_BITFIELD infinite_loop: 1;
!   BOOL_BITFIELD x_in_function_try_handler : 1;
!   BOOL_BITFIELD x_in_base_initializer : 1;
  
    /* True if this function can throw an exception.  */
!   BOOL_BITFIELD can_throw : 1;
  
!   BOOL_BITFIELD invalid_constexpr : 1;
!   BOOL_BITFIELD throwing_cleanup : 1;
    /* True if we gave any errors in this function.  */
!   BOOL_BITFIELD erroneous : 1;
  
    hash_table<named_label_hash> *x_named_labels;
  
--- 2365,2384 ----
    tree x_vtt_parm;
    tree x_return_value;
  
!   bool returns_value : 1;
!   bool returns_null : 1;
!   bool returns_abnormally : 1;
!   bool infinite_loop: 1;
!   bool x_in_function_try_handler : 1;
!   bool x_in_base_initializer : 1;
  
    /* True if this function can throw an exception.  */
!   bool can_throw : 1;
  
!   bool invalid_constexpr : 1;
!   bool throwing_cleanup : 1;
    /* True if we gave any errors in this function.  */
!   bool erroneous : 1;
  
    hash_table<named_label_hash> *x_named_labels;
  
*************** struct cp_decl_specifier_seq {
*** 7001,7031 ****
    /* For the __intN declspec, this stores the index into the int_n_* arrays.  */
    int int_n_idx;
    /* True iff TYPE_SPEC defines a class or enum.  */
!   BOOL_BITFIELD type_definition_p : 1;
    /* True iff multiple types were (erroneously) specified for this
       decl-specifier-seq.  */
!   BOOL_BITFIELD multiple_types_p : 1;
    /* True iff multiple storage classes were (erroneously) specified
       for this decl-specifier-seq or a combination of a storage class
       with a typedef specifier.  */
!   BOOL_BITFIELD conflicting_specifiers_p : 1;
    /* True iff at least one decl-specifier was found.  */
!   BOOL_BITFIELD any_specifiers_p : 1;
    /* True iff at least one type-specifier was found.  */
!   BOOL_BITFIELD any_type_specifiers_p : 1;
    /* True iff "int" was explicitly provided.  */
!   BOOL_BITFIELD explicit_int_p : 1;
    /* True iff "__intN" was explicitly provided.  */
!   BOOL_BITFIELD explicit_intN_p : 1;
    /* True iff "char" was explicitly provided.  */
!   BOOL_BITFIELD explicit_char_p : 1;
    /* True iff ds_thread is set for __thread, not thread_local.  */
!   BOOL_BITFIELD gnu_thread_keyword_p : 1;
    /* True iff the type is a decltype.  */
!   BOOL_BITFIELD decltype_p : 1;
    /* True iff the alternate "__intN__" form of the __intN type has been
       used.  */
!   BOOL_BITFIELD int_n_alt: 1;
  };
  
  /* The various kinds of declarators.  */
--- 7001,7031 ----
    /* For the __intN declspec, this stores the index into the int_n_* arrays.  */
    int int_n_idx;
    /* True iff TYPE_SPEC defines a class or enum.  */
!   bool type_definition_p : 1;
    /* True iff multiple types were (erroneously) specified for this
       decl-specifier-seq.  */
!   bool multiple_types_p : 1;
    /* True iff multiple storage classes were (erroneously) specified
       for this decl-specifier-seq or a combination of a storage class
       with a typedef specifier.  */
!   bool conflicting_specifiers_p : 1;
    /* True iff at least one decl-specifier was found.  */
!   bool any_specifiers_p : 1;
    /* True iff at least one type-specifier was found.  */
!   bool any_type_specifiers_p : 1;
    /* True iff "int" was explicitly provided.  */
!   bool explicit_int_p : 1;
    /* True iff "__intN" was explicitly provided.  */
!   bool explicit_intN_p : 1;
    /* True iff "char" was explicitly provided.  */
!   bool explicit_char_p : 1;
    /* True iff ds_thread is set for __thread, not thread_local.  */
!   bool gnu_thread_keyword_p : 1;
    /* True iff the type is a decltype.  */
!   bool decltype_p : 1;
    /* True iff the alternate "__intN__" form of the __intN type has been
       used.  */
!   bool int_n_alt: 1;
  };
  
  /* The various kinds of declarators.  */
*************** struct cp_declarator {
*** 7069,7075 ****
    ENUM_BITFIELD (cp_declarator_kind) kind : 4;
    /* Whether we parsed an ellipsis (`...') just before the declarator,
       to indicate this is a parameter pack.  */
!   BOOL_BITFIELD parameter_pack_p : 1;
    /* If this declarator is parenthesized, this the open-paren.  It is
       UNKNOWN_LOCATION when not parenthesized.  */
    location_t parenthesized;
--- 7069,7075 ----
    ENUM_BITFIELD (cp_declarator_kind) kind : 4;
    /* Whether we parsed an ellipsis (`...') just before the declarator,
       to indicate this is a parameter pack.  */
!   bool parameter_pack_p : 1;
    /* If this declarator is parenthesized, this the open-paren.  It is
       UNKNOWN_LOCATION when not parenthesized.  */
    location_t parenthesized;
*************** extern bool std_layout_type_p			(const_t
*** 8749,8754 ****
--- 8749,8755 ----
  extern bool trivial_type_p			(const_tree);
  extern bool implicit_lifetime_type_p		(tree);
  extern bool trivially_copyable_p		(const_tree);
+ extern bool trivially_copy_constructible_p	(tree);
  extern bool has_trivial_abi_attribute		(tree);
  extern void validate_trivial_abi_attribute	(tree);
  extern bool type_has_unique_obj_representations (const_tree, bool = false);
*************** extern void coro_set_ramp_function		(tre
*** 9529,9534 ****
--- 9530,9536 ----
  
  /* In reflect.cc */
  extern void init_reflection ();
+ WARN_UNUSED_RESULT extern tree build_const_lref (tree);
  extern tree maybe_update_function_parm (tree);
  extern bool metafunction_p (tree) ATTRIBUTE_PURE;
  extern tree direct_base_derived (tree) ATTRIBUTE_PURE;
diff -Nrcpad gcc-17-20260621/gcc/cp/cp-ubsan.cc gcc-17-20260628/gcc/cp/cp-ubsan.cc
*** gcc-17-20260621/gcc/cp/cp-ubsan.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/cp-ubsan.cc	Sun Jun 28 22:32:07 2026
*************** cp_ubsan_instrument_vptr (location_t loc
*** 69,78 ****
    if (!is_addr)
      op = build_fold_addr_expr_loc (loc, op);
    op = save_expr (op);
!   tree vptr = fold_build3_loc (loc, COMPONENT_REF,
! 			       TREE_TYPE (TYPE_VFIELD (type)),
! 			       build_fold_indirect_ref_loc (loc, op),
! 			       TYPE_VFIELD (type), NULL_TREE);
    vptr = fold_convert_loc (loc, pointer_sized_int_node, vptr);
    vptr = fold_convert_loc (loc, uint64_type_node, vptr);
    if (ckind == UBSAN_DOWNCAST_POINTER)
--- 69,75 ----
    if (!is_addr)
      op = build_fold_addr_expr_loc (loc, op);
    op = save_expr (op);
!   tree vptr = build_vfield_ref (build_fold_indirect_ref_loc (loc, op), type);
    vptr = fold_convert_loc (loc, pointer_sized_int_node, vptr);
    vptr = fold_convert_loc (loc, uint64_type_node, vptr);
    if (ckind == UBSAN_DOWNCAST_POINTER)
diff -Nrcpad gcc-17-20260621/gcc/cp/decl.cc gcc-17-20260628/gcc/cp/decl.cc
*** gcc-17-20260621/gcc/cp/decl.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/decl.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Process declarations and variables for -*- C++ -*- compiler.
     Copyright (C) 1988-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com)
  
--- 1,4 ----
! /* Process declarations and variables for the C++ compiler.
     Copyright (C) 1988-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com)
  
diff -Nrcpad gcc-17-20260621/gcc/cp/init.cc gcc-17-20260628/gcc/cp/init.cc
*** gcc-17-20260621/gcc/cp/init.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/init.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Handle initialization things in -*- C++ -*-
     Copyright (C) 1987-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com)
  
--- 1,4 ----
! /* Handle initialization things in C++.
     Copyright (C) 1987-2026 Free Software Foundation, Inc.
     Contributed by Michael Tiemann (tiemann@cygnus.com)
  
diff -Nrcpad gcc-17-20260621/gcc/cp/mangle.cc gcc-17-20260628/gcc/cp/mangle.cc
*** gcc-17-20260621/gcc/cp/mangle.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/mangle.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Name mangling for the 3.0 -*- C++ -*- ABI.
     Copyright (C) 2000-2026 Free Software Foundation, Inc.
     Written by Alex Samuel <samuel@codesourcery.com>
  
--- 1,4 ----
! /* Name mangling for the 3.0 C++ ABI.
     Copyright (C) 2000-2026 Free Software Foundation, Inc.
     Written by Alex Samuel <samuel@codesourcery.com>
  
diff -Nrcpad gcc-17-20260621/gcc/cp/mapper-resolver.cc gcc-17-20260628/gcc/cp/mapper-resolver.cc
*** gcc-17-20260621/gcc/cp/mapper-resolver.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/mapper-resolver.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* C++ modules.  Experimental!	-*- c++ -*-
     Copyright (C) 2020-2026 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
--- 1,4 ----
! /* C++ modules.  Experimental!
     Copyright (C) 2020-2026 Free Software Foundation, Inc.
     Written by Nathan Sidwell <nathan@acm.org> while at FaceBook
  
diff -Nrcpad gcc-17-20260621/gcc/cp/method.cc gcc-17-20260628/gcc/cp/method.cc
*** gcc-17-20260621/gcc/cp/method.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/method.cc	Sun Jun 28 22:32:07 2026
*************** maybe_synthesize_method (tree fndecl)
*** 1902,1908 ****
  tree
  build_stub_type (tree type, int quals, bool rvalue)
  {
!   tree argtype = cp_build_qualified_type (type, quals);
    return cp_build_reference_type (argtype, rvalue);
  }
  
--- 1902,1910 ----
  tree
  build_stub_type (tree type, int quals, bool rvalue)
  {
!   tree argtype
!     = cp_build_qualified_type (type, quals,
! 			       tf_warning_or_error | tf_ignore_bad_quals);
    return cp_build_reference_type (argtype, rvalue);
  }
  
diff -Nrcpad gcc-17-20260621/gcc/cp/module.cc gcc-17-20260628/gcc/cp/module.cc
*** gcc-17-20260621/gcc/cp/module.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/module.cc	Sun Jun 28 22:32:07 2026
*************** trees_out::decl_value (tree decl, depset
*** 8442,8448 ****
  		       && TYPE_NAME (type) == inner);
  
        if (streaming_p ())
! 	u (has_type ? TREE_CODE (type) : 0);
  
        if (has_type)
  	{
--- 8442,8448 ----
  		       && TYPE_NAME (type) == inner);
  
        if (streaming_p ())
! 	u (has_type ? (unsigned) TREE_CODE (type) : 0);
  
        if (has_type)
  	{
*************** trees_out::decl_value (tree decl, depset
*** 8459,8465 ****
  	  stub_decl = TYPE_STUB_DECL (type);
  	  bool has_stub = inner != stub_decl;
  	  if (streaming_p ())
! 	    u (has_stub ? TREE_CODE (stub_decl) : 0);
  	  if (has_stub)
  	    {
  	      stub_tag = insert (stub_decl);
--- 8459,8465 ----
  	  stub_decl = TYPE_STUB_DECL (type);
  	  bool has_stub = inner != stub_decl;
  	  if (streaming_p ())
! 	    u (has_stub ? (unsigned) TREE_CODE (stub_decl) : 0);
  	  if (has_stub)
  	    {
  	      stub_tag = insert (stub_decl);
*************** trees_out::decl_node (tree decl, walk_ki
*** 9434,9439 ****
--- 9434,9444 ----
      case TYPE_DECL:
        if (DECL_TINFO_P (decl))
  	goto tinfo;
+       /* c++/125768: For an imported typedef, also mark the original type
+ 	 reachable in case it was instantiated here.  */
+       if (!streaming_p () && DECL_ORIGINAL_TYPE (decl)
+ 	  && (DECL_LANG_SPECIFIC (decl) && DECL_MODULE_IMPORT_P (decl)))
+ 	tree_node (DECL_ORIGINAL_TYPE (decl));
        break;
      }
  
*************** depset::hash::find_dependencies (module_
*** 15725,15731 ****
  		      tree lookup = lookup_arg_dependent (info.name, NULL_TREE,
  							  info.args, true);
  		      for (tree fn : lkp_range (lookup))
! 			add_dependency (make_dependency (fn, EK_DECL));
  
  		      if (info.rewrite)
  			{
--- 15730,15738 ----
  		      tree lookup = lookup_arg_dependent (info.name, NULL_TREE,
  							  info.args, true);
  		      for (tree fn : lkp_range (lookup))
! 			/* We don't need to add_dependency, just have
! 			   make_dependency build an ADL binding.  */
! 			make_dependency (fn, EK_DECL);
  
  		      if (info.rewrite)
  			{
*************** depset::hash::find_dependencies (module_
*** 15733,15739 ****
  			  lookup = lookup_arg_dependent (rewrite_name, NULL_TREE,
  							 info.args, true);
  			  for (tree fn : lkp_range (lookup))
! 			    add_dependency (make_dependency (fn, EK_DECL));
  			}
  		      release_tree_vector (info.args);
  		    }
--- 15740,15746 ----
  			  lookup = lookup_arg_dependent (rewrite_name, NULL_TREE,
  							 info.args, true);
  			  for (tree fn : lkp_range (lookup))
! 			    make_dependency (fn, EK_DECL);
  			}
  		      release_tree_vector (info.args);
  		    }
diff -Nrcpad gcc-17-20260621/gcc/cp/name-lookup.h gcc-17-20260628/gcc/cp/name-lookup.h
*** gcc-17-20260621/gcc/cp/name-lookup.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/name-lookup.h	Sun Jun 28 22:32:07 2026
*************** struct GTY(()) cp_binding_level {
*** 332,338 ****
  
    /* True if this scope is an SK_TEMPLATE_SPEC scope.  This field is
        only valid if KIND == SK_TEMPLATE_PARMS.  */
!   BOOL_BITFIELD explicit_spec_p : 1;
  
    /* True means make a BLOCK for this level regardless of all else.  */
    unsigned keep : 1;
--- 332,338 ----
  
    /* True if this scope is an SK_TEMPLATE_SPEC scope.  This field is
        only valid if KIND == SK_TEMPLATE_PARMS.  */
!   bool explicit_spec_p : 1;
  
    /* True means make a BLOCK for this level regardless of all else.  */
    unsigned keep : 1;
diff -Nrcpad gcc-17-20260621/gcc/cp/parser.cc gcc-17-20260628/gcc/cp/parser.cc
*** gcc-17-20260621/gcc/cp/parser.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/parser.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* -*- C++ -*- Parser.
     Copyright (C) 2000-2026 Free Software Foundation, Inc.
     Written by Mark Mitchell <mark@codesourcery.com>.
  
--- 1,4 ----
! /* C++ Parser.
     Copyright (C) 2000-2026 Free Software Foundation, Inc.
     Written by Mark Mitchell <mark@codesourcery.com>.
  
*************** cp_parser_reflect_expression (cp_parser
*** 10147,10154 ****
    cp_parser_parse_tentatively (parser);
  
    bool type_alias_p;
!   t = cp_parser_type_id_1 (parser, CP_PARSER_FLAGS_NONE, false, false,
! 			   nullptr, &type_alias_p);
    if (cp_parser_parse_definitely (parser))
      {
        /* With using A = int; ^^A is a type alias but ^^const A or ^^A & or
--- 10147,10159 ----
    cp_parser_parse_tentatively (parser);
  
    bool type_alias_p;
!   {
!     auto tdfm =
!       make_temp_override (parser->type_definition_forbidden_message,
! 			  G_("types may not be defined in %<^^%> expression"));
!     t = cp_parser_type_id_1 (parser, CP_PARSER_FLAGS_NONE, false, false,
! 			     nullptr, &type_alias_p);
!   }
    if (cp_parser_parse_definitely (parser))
      {
        /* With using A = int; ^^A is a type alias but ^^const A or ^^A & or
*************** warn_for_range_copy (tree decl, tree exp
*** 16015,16025 ****
  
    /* Since small trivially constructible types are cheap to construct, we
       suppress the warning for them.  64B is a common size of a cache line.  */
-   tree vec = make_tree_vec (1);
-   TREE_VEC_ELT (vec, 0) = TREE_TYPE (expr);
    if (TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST
        || (tree_to_uhwi (TYPE_SIZE_UNIT (type)) <= 64
! 	  && is_trivially_xible (INIT_EXPR, type, vec)))
      return;
  
    /* If we can initialize a reference directly, suggest that to avoid the
--- 16020,16028 ----
  
    /* Since small trivially constructible types are cheap to construct, we
       suppress the warning for them.  64B is a common size of a cache line.  */
    if (TREE_CODE (TYPE_SIZE_UNIT (type)) != INTEGER_CST
        || (tree_to_uhwi (TYPE_SIZE_UNIT (type)) <= 64
! 	  && trivially_copy_constructible_p (type)))
      return;
  
    /* If we can initialize a reference directly, suggest that to avoid the
*************** cp_parser_omp_iterators (cp_parser *pars
*** 44891,44901 ****
        DECL_CONTEXT (iter_var) = current_function_decl;
        pushdecl (iter_var);
  
!       *last = make_tree_vec (6);
!       TREE_VEC_ELT (*last, 0) = iter_var;
!       TREE_VEC_ELT (*last, 1) = begin;
!       TREE_VEC_ELT (*last, 2) = end;
!       TREE_VEC_ELT (*last, 3) = step;
        last = &TREE_CHAIN (*last);
  
        if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
--- 44894,44904 ----
        DECL_CONTEXT (iter_var) = current_function_decl;
        pushdecl (iter_var);
  
!       *last = make_omp_iterator ();
!       OMP_ITERATOR_VAR (*last) = iter_var;
!       OMP_ITERATOR_BEGIN (*last) = begin;
!       OMP_ITERATOR_END (*last) = end;
!       OMP_ITERATOR_STEP (*last) = step;
        last = &TREE_CHAIN (*last);
  
        if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
*************** cp_parser_omp_clause_affinity (cp_parser
*** 44969,44975 ****
        tree block = poplevel (1, 1, 0);
        if (iterators != error_mark_node)
  	{
! 	  TREE_VEC_ELT (iterators, 5) = block;
  	  for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
  	    OMP_CLAUSE_DECL (c) = build_tree_list (iterators,
  						   OMP_CLAUSE_DECL (c));
--- 44972,44978 ----
        tree block = poplevel (1, 1, 0);
        if (iterators != error_mark_node)
  	{
! 	  OMP_ITERATOR_BLOCK (iterators) = block;
  	  for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
  	    OMP_CLAUSE_DECL (c) = build_tree_list (iterators,
  						   OMP_CLAUSE_DECL (c));
*************** cp_parser_omp_clause_depend (cp_parser *
*** 45108,45114 ****
  	  if (iterators == error_mark_node)
  	    iterators = NULL_TREE;
  	  else
! 	    TREE_VEC_ELT (iterators, 5) = block;
  	}
  
        for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
--- 45111,45117 ----
  	  if (iterators == error_mark_node)
  	    iterators = NULL_TREE;
  	  else
! 	    OMP_ITERATOR_BLOCK (iterators) = block;
  	}
  
        for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
*************** cp_parser_omp_clause_from_to (cp_parser
*** 45376,45382 ****
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	TREE_VEC_ELT (iterators, 5) = block;
      }
  
    if (iterators)
--- 45379,45385 ----
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	OMP_ITERATOR_BLOCK (iterators) = block;
      }
  
    if (iterators)
*************** cp_parser_omp_clause_map (cp_parser *par
*** 45790,45796 ****
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	TREE_VEC_ELT (iterators, 5) = block;
      }
  
    for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
--- 45793,45799 ----
        if (iterators == error_mark_node)
  	iterators = NULL_TREE;
        else
! 	OMP_ITERATOR_BLOCK (iterators) = block;
      }
  
    for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
diff -Nrcpad gcc-17-20260621/gcc/cp/pt.cc gcc-17-20260628/gcc/cp/pt.cc
*** gcc-17-20260621/gcc/cp/pt.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/pt.cc	Sun Jun 28 22:32:07 2026
***************
*** 1,4 ****
! /* Handle parameterized types (templates) for GNU -*- C++ -*-.
     Copyright (C) 1992-2026 Free Software Foundation, Inc.
     Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
     Rewritten by Jason Merrill (jason@cygnus.com).
--- 1,4 ----
! /* Handle parameterized types (templates) for GNU C++.
     Copyright (C) 1992-2026 Free Software Foundation, Inc.
     Written by Ken Raeburn (raeburn@cygnus.com) while at Watchmaker Computing.
     Rewritten by Jason Merrill (jason@cygnus.com).
*************** tsubst_omp_clause_decl (tree decl, tree
*** 18698,18713 ****
  	  for (tree it = TREE_PURPOSE (decl); it; it = TREE_CHAIN (it))
  	    {
  	      *tp = copy_node (it);
! 	      TREE_VEC_ELT (*tp, 0)
! 		= tsubst_decl (TREE_VEC_ELT (it, 0), args, complain);
! 	      DECL_CONTEXT (TREE_VEC_ELT (*tp, 0)) = current_function_decl;
! 	      pushdecl (TREE_VEC_ELT (*tp, 0));
! 	      TREE_VEC_ELT (*tp, 1)
! 		= tsubst_stmt (TREE_VEC_ELT (it, 1), args, complain, in_decl);
! 	      TREE_VEC_ELT (*tp, 2)
! 		= tsubst_stmt (TREE_VEC_ELT (it, 2), args, complain, in_decl);
! 	      TREE_VEC_ELT (*tp, 3)
! 		= tsubst_stmt (TREE_VEC_ELT (it, 3), args, complain, in_decl);
  	      TREE_CHAIN (*tp) = NULL_TREE;
  	      tp = &TREE_CHAIN (*tp);
  	    }
--- 18698,18713 ----
  	  for (tree it = TREE_PURPOSE (decl); it; it = TREE_CHAIN (it))
  	    {
  	      *tp = copy_node (it);
! 	      OMP_ITERATOR_VAR (*tp)
! 		= tsubst_decl (OMP_ITERATOR_VAR (it), args, complain);
! 	      DECL_CONTEXT (OMP_ITERATOR_VAR (*tp)) = current_function_decl;
! 	      pushdecl (OMP_ITERATOR_VAR (*tp));
! 	      OMP_ITERATOR_BEGIN (*tp)
! 		= tsubst_stmt (OMP_ITERATOR_BEGIN (it), args, complain, in_decl);
! 	      OMP_ITERATOR_END (*tp)
! 		= tsubst_stmt (OMP_ITERATOR_END (it), args, complain, in_decl);
! 	      OMP_ITERATOR_STEP (*tp)
! 		= tsubst_stmt (OMP_ITERATOR_STEP (it), args, complain, in_decl);
  	      TREE_CHAIN (*tp) = NULL_TREE;
  	      tp = &TREE_CHAIN (*tp);
  	    }
diff -Nrcpad gcc-17-20260621/gcc/cp/reflect.cc gcc-17-20260628/gcc/cp/reflect.cc
*** gcc-17-20260621/gcc/cp/reflect.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/reflect.cc	Sun Jun 28 22:32:07 2026
*************** maybe_update_function_parm (tree parm)
*** 324,329 ****
--- 324,338 ----
    return ret;
  }
  
+ /* Build up const T &.  */
+ 
+ tree
+ build_const_lref (tree t)
+ {
+   return build_stub_type (t, cp_type_quals (t) | TYPE_QUAL_CONST,
+ 			  /*rval=*/false);
+ }
+ 
  /* Return true if DECL comes from std::meta.  */
  
  static bool
*************** get_range_elts (location_t loc, const co
*** 587,596 ****
  	      *non_constant_p = true;
  	      return NULL_TREE;
  	    }
! 	  TREE_VEC_ELT (args, 0)
! 	    = build_stub_type (valuete,
! 			       cp_type_quals (valuete) | TYPE_QUAL_CONST,
! 			       false);
  	  if (!is_xible (INIT_EXPR, valuete, args))
  	    {
  	      if (!cxx_constexpr_quiet_p (ctx))
--- 596,602 ----
  	      *non_constant_p = true;
  	      return NULL_TREE;
  	    }
! 	  TREE_VEC_ELT (args, 0) = build_const_lref (valuete);
  	  if (!is_xible (INIT_EXPR, valuete, args))
  	    {
  	      if (!cxx_constexpr_quiet_p (ctx))
*************** static tree
*** 4570,4577 ****
  eval_is_copy_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
!   TREE_VEC_ELT (arg, 0)
!     = build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST, false);
    if (is_xible (INIT_EXPR, type, arg))
      return boolean_true_node;
    else
--- 4576,4582 ----
  eval_is_copy_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
!   TREE_VEC_ELT (arg, 0) = build_const_lref (type);
    if (is_xible (INIT_EXPR, type, arg))
      return boolean_true_node;
    else
*************** static tree
*** 4605,4612 ****
  eval_is_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
!   tree type2 = build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST,
! 				false);
    if (is_xible (MODIFY_EXPR, type1, type2))
      return boolean_true_node;
    else
--- 4610,4616 ----
  eval_is_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
!   tree type2 = build_const_lref (type);
    if (is_xible (MODIFY_EXPR, type1, type2))
      return boolean_true_node;
    else
*************** eval_is_trivially_default_constructible_
*** 4661,4670 ****
  static tree
  eval_is_trivially_copy_constructible_type (tree type)
  {
!   tree arg = make_tree_vec (1);
!   TREE_VEC_ELT (arg, 0)
!     = build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST, false);
!   if (is_trivially_xible (INIT_EXPR, type, arg))
      return boolean_true_node;
    else
      return boolean_false_node;
--- 4665,4671 ----
  static tree
  eval_is_trivially_copy_constructible_type (tree type)
  {
!   if (trivially_copy_constructible_p (type))
      return boolean_true_node;
    else
      return boolean_false_node;
*************** static tree
*** 4697,4704 ****
  eval_is_trivially_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
!   tree type2 = build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST,
! 				false);
    if (is_trivially_xible (MODIFY_EXPR, type1, type2))
      return boolean_true_node;
    else
--- 4698,4704 ----
  eval_is_trivially_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
!   tree type2 = build_const_lref (type);
    if (is_trivially_xible (MODIFY_EXPR, type1, type2))
      return boolean_true_node;
    else
*************** static tree
*** 4754,4761 ****
  eval_is_nothrow_copy_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
!   TREE_VEC_ELT (arg, 0)
!     = build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST, false);
    if (is_nothrow_xible (INIT_EXPR, type, arg))
      return boolean_true_node;
    else
--- 4754,4760 ----
  eval_is_nothrow_copy_constructible_type (tree type)
  {
    tree arg = make_tree_vec (1);
!   TREE_VEC_ELT (arg, 0) = build_const_lref (type);
    if (is_nothrow_xible (INIT_EXPR, type, arg))
      return boolean_true_node;
    else
*************** static tree
*** 4789,4796 ****
  eval_is_nothrow_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
!   tree type2 = build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST,
! 				false);
    if (is_nothrow_xible (MODIFY_EXPR, type1, type2))
      return boolean_true_node;
    else
--- 4788,4794 ----
  eval_is_nothrow_copy_assignable_type (tree type)
  {
    tree type1 = cp_build_reference_type (type, /*rval=*/false);
!   tree type2 = build_const_lref (type);
    if (is_nothrow_xible (MODIFY_EXPR, type1, type2))
      return boolean_true_node;
    else
*************** class_members_of (location_t loc, const
*** 7077,7082 ****
--- 7075,7087 ----
  				    get_reflection_raw (loc, m));
  	    break;
  	  }
+       for (tree m : implicitly_declared)
+ 	if (LAMBDA_FUNCTION_P (m))
+ 	  {
+ 	    CONSTRUCTOR_APPEND_ELT (elts, NULL_TREE,
+ 				    get_reflection_raw (loc, m));
+ 	    break;
+ 	  }
      }
    return elts;
  }
*************** check_out_of_consteval_use_r (tree *tp,
*** 8755,8760 ****
--- 8760,8769 ----
        || TREE_CODE (t) == DECL_EXPR
        /* Neither into USING_STMT.  */
        || TREE_CODE (t) == USING_STMT
+       /* The operand of a splice is a constant-expression, thus
+ 	 manifestly constant-evaluated, so consteval-only types are permitted
+ 	 here.  */
+       || TREE_CODE (t) == SPLICE_EXPR
        /* Blocks can appear in the TREE_VEC operand of OpenMP
  	 depend/affinity/map/to/from OMP_CLAUSEs when using iterators.  */
        || TREE_CODE (t) == BLOCK)
diff -Nrcpad gcc-17-20260621/gcc/cp/semantics.cc gcc-17-20260628/gcc/cp/semantics.cc
*** gcc-17-20260621/gcc/cp/semantics.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/semantics.cc	Sun Jun 28 22:32:07 2026
*************** cp_omp_finish_iterators (tree iter)
*** 7595,7604 ****
    bool ret = false;
    for (tree it = iter; it; it = TREE_CHAIN (it))
      {
!       tree var = TREE_VEC_ELT (it, 0);
!       tree begin = TREE_VEC_ELT (it, 1);
!       tree end = TREE_VEC_ELT (it, 2);
!       tree step = TREE_VEC_ELT (it, 3);
        tree orig_step;
        tree type = TREE_TYPE (var);
        location_t loc = DECL_SOURCE_LOCATION (var);
--- 7595,7604 ----
    bool ret = false;
    for (tree it = iter; it; it = TREE_CHAIN (it))
      {
!       tree var = OMP_ITERATOR_VAR (it);
!       tree begin = OMP_ITERATOR_BEGIN (it);
!       tree end = OMP_ITERATOR_END (it);
!       tree step = OMP_ITERATOR_STEP (it);
        tree orig_step;
        tree type = TREE_TYPE (var);
        location_t loc = DECL_SOURCE_LOCATION (var);
*************** cp_omp_finish_iterators (tree iter)
*** 7696,7705 ****
        tree it2;
        for (it2 = TREE_CHAIN (it); it2; it2 = TREE_CHAIN (it2))
  	{
! 	  tree var2 = TREE_VEC_ELT (it2, 0);
! 	  tree begin2 = TREE_VEC_ELT (it2, 1);
! 	  tree end2 = TREE_VEC_ELT (it2, 2);
! 	  tree step2 = TREE_VEC_ELT (it2, 3);
  	  location_t loc2 = DECL_SOURCE_LOCATION (var2);
  	  if (cp_walk_tree (&begin2, find_omp_placeholder_r, var, &pset))
  	    {
--- 7696,7705 ----
        tree it2;
        for (it2 = TREE_CHAIN (it); it2; it2 = TREE_CHAIN (it2))
  	{
! 	  tree var2 = OMP_ITERATOR_VAR (it2);
! 	  tree begin2 = OMP_ITERATOR_BEGIN (it2);
! 	  tree end2 = OMP_ITERATOR_END (it2);
! 	  tree step2 = OMP_ITERATOR_STEP (it2);
  	  location_t loc2 = DECL_SOURCE_LOCATION (var2);
  	  if (cp_walk_tree (&begin2, find_omp_placeholder_r, var, &pset))
  	    {
*************** cp_omp_finish_iterators (tree iter)
*** 7725,7738 ****
  	  ret = true;
  	  continue;
  	}
!       TREE_VEC_ELT (it, 1) = begin;
!       TREE_VEC_ELT (it, 2) = end;
        if (processing_template_decl)
! 	TREE_VEC_ELT (it, 3) = orig_step;
        else
  	{
! 	  TREE_VEC_ELT (it, 3) = step;
! 	  TREE_VEC_ELT (it, 4) = orig_step;
  	}
      }
    return ret;
--- 7725,7738 ----
  	  ret = true;
  	  continue;
  	}
!       OMP_ITERATOR_BEGIN (it) = begin;
!       OMP_ITERATOR_END (it) = end;
        if (processing_template_decl)
! 	OMP_ITERATOR_STEP (it) = orig_step;
        else
  	{
! 	  OMP_ITERATOR_STEP (it) = step;
! 	  OMP_ITERATOR_ORIG_STEP (it) = orig_step;
  	}
      }
    return ret;
*************** finish_omp_barrier (void)
*** 12547,12552 ****
--- 12547,12553 ----
  {
    tree fn = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
    releasing_vec vec;
+   vec->quick_push (build_int_cst (integer_type_node, GOMP_BARRIER_EXPLICIT));
    tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
    finish_expr_stmt (stmt);
  }
diff -Nrcpad gcc-17-20260621/gcc/cp/tree.cc gcc-17-20260628/gcc/cp/tree.cc
*** gcc-17-20260621/gcc/cp/tree.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/cp/tree.cc	Sun Jun 28 22:32:07 2026
*************** trivial_type_p (const_tree t)
*** 4909,4914 ****
--- 4909,4924 ----
      return scalarish_type_p (t);
  }
  
+ /* Returns true iff type T is a trivially copy constructible type.  */
+ 
+ bool
+ trivially_copy_constructible_p (tree t)
+ {
+   tree arg = make_tree_vec (1);
+   TREE_VEC_ELT (arg, 0) = build_const_lref (t);
+   return is_trivially_xible (INIT_EXPR, t, arg);
+ }
+ 
  /* Returns 1 iff type T is an implicit-lifetime type, as defined in
     [basic.types.general] and [class.prop].  */
  
*************** handle_annotation_attribute (tree *node,
*** 5971,5979 ****
      {
        tree arg = make_tree_vec (1);
        tree type = TREE_TYPE (TREE_VALUE (args));
!       TREE_VEC_ELT (arg, 0)
! 	= build_stub_type (type, cp_type_quals (type) | TYPE_QUAL_CONST,
! 			   /*rvalue=*/false);
        if (!is_xible (INIT_EXPR, type, arg))
  	{
  	  auto_diagnostic_group d;
--- 5981,5987 ----
      {
        tree arg = make_tree_vec (1);
        tree type = TREE_TYPE (TREE_VALUE (args));
!       TREE_VEC_ELT (arg, 0) = build_const_lref (type);
        if (!is_xible (INIT_EXPR, type, arg))
  	{
  	  auto_diagnostic_group d;
diff -Nrcpad gcc-17-20260621/gcc/ctfc.h gcc-17-20260628/gcc/ctfc.h
*** gcc-17-20260621/gcc/ctfc.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ctfc.h	Sun Jun 28 22:32:07 2026
*************** struct GTY ((for_user)) ctf_dtdef
*** 181,189 ****
    uint32_t linkage;           /* Used in function types.  0=local, 1=global.  */
  
    /* Whether this type was added from a global function.  */
!   BOOL_BITFIELD from_global_func : 1;
    /* Enum signedness.  */
!   BOOL_BITFIELD dtd_enum_unsigned : 1;
    /* Lots of spare bits.  */
  
    union GTY ((desc ("ctf_dtu_d_union_selector (&%1)")))
--- 181,189 ----
    uint32_t linkage;           /* Used in function types.  0=local, 1=global.  */
  
    /* Whether this type was added from a global function.  */
!   bool from_global_func : 1;
    /* Enum signedness.  */
!   bool dtd_enum_unsigned : 1;
    /* Lots of spare bits.  */
  
    union GTY ((desc ("ctf_dtu_d_union_selector (&%1)")))
diff -Nrcpad gcc-17-20260621/gcc/dbgcnt.def gcc-17-20260628/gcc/dbgcnt.def
*** gcc-17-20260621/gcc/dbgcnt.def	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/dbgcnt.def	Sun Jun 28 22:32:07 2026
*************** DEBUG_COUNTER (postreload_cse)
*** 198,203 ****
--- 198,204 ----
  DEBUG_COUNTER (pre)
  DEBUG_COUNTER (pre_insn)
  DEBUG_COUNTER (prefetch)
+ DEBUG_COUNTER (ranger_cnt)
  DEBUG_COUNTER (registered_jump_thread)
  DEBUG_COUNTER (sched2_func)
  DEBUG_COUNTER (sched_breakdep)
diff -Nrcpad gcc-17-20260621/gcc/doc/extend.texi gcc-17-20260628/gcc/doc/extend.texi
*** gcc-17-20260621/gcc/doc/extend.texi	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/extend.texi	Sun Jun 28 22:32:07 2026
*************** safe.
*** 13978,13984 ****
  GCC implements taking the address of a nested function using a technique
  called @dfn{trampolines}.  This technique was described in
  @cite{Lexical Closures for C++} (Thomas M. Breuel, USENIX
! C++ Conference Proceedings, October 17-21, 1988).
  
  A nested function can jump to a label inherited from a containing
  function, provided the label is explicitly declared in the containing
--- 13978,13987 ----
  GCC implements taking the address of a nested function using a technique
  called @dfn{trampolines}.  This technique was described in
  @cite{Lexical Closures for C++} (Thomas M. Breuel, USENIX
! C++ Conference Proceedings, October 17-21, 1988).  It is also
! possible to use the built-in @code{__builtin_call_with_static_chain}
! (@pxref{Constructing Calls}) to invoke a nested function indirectly
! without the use of a trampoline.
  
  A nested function can jump to a label inherited from a containing
  function, provided the label is explicitly declared in the containing
*************** myopen (const char *path, int oflag, ...
*** 16674,16684 ****
  The @var{call_exp} expression must be a function call, and the
  @var{pointer_exp} expression must be a pointer.  The @var{pointer_exp}
  is passed to the function call in the target's static chain location.
! The result of builtin is the result of the function call.
  
! @emph{Note:} This builtin is only available for C@.
! This builtin can be used to call Go closures from C.
  
  @enddefbuiltin
  
  @node Return Address
--- 16677,16749 ----
  The @var{call_exp} expression must be a function call, and the
  @var{pointer_exp} expression must be a pointer.  The @var{pointer_exp}
  is passed to the function call in the target's static chain location.
! The result of the built-in is the result of the function call.
! This built-in can be used to call Go closures from C, and it can be
! used to call @xref{Nested Functions} using the code address and
! static chain obtained with @code{__builtin_call_code_address} and
! @code{__builtin_call_static_chain}, respectively.
  
! @smallexample
! int process(int (*callback)(int, void *), void *data)
! @{
!   int value = 5;
!   return (*callback)(value, data);
! @}
  
+ struct call_info @{
+   int (*code)(int);
+   void *chain;
+ @};
+ 
+ int callback(int arg, void *data)
+ @{
+    struct call_info *ci = data;
+    return __builtin_call_with_static_chain(ci->code(arg), ci->chain);
+ @}
+ 
+ int doit(int x)
+ @{
+   int worker(int y)
+   @{
+     return x + y;
+   @}
+ 
+   struct call_info ci = @{
+     ci.code = __builtin_call_code_address(worker),
+     ci.chain = __builtin_call_static_chain(worker),
+   @};
+ 
+   return process(callback, &ci);
+ @}
+ @end smallexample
+ 
+ @emph{Note:} This built-in is only available for C@.
+ @enddefbuiltin
+ 
+ @defbuiltin{@var{type} __builtin_call_static_chain (@var{pointer_exp})}
+ 
+ The @var{pointer_exp} expression must a function identifier.
+ The result is the static chain pointer that can be used to call
+ the function in its current context using the built-in
+ @code{__builtin_call_with_static_chain}, or a null pointer if
+ no static chain is needed.
+ 
+ @emph{Note:} The lifetime of a nested function that accesses the
+ environment of an enclosing function is limited.  Any use of the
+ static chain after this lifetime has ended has undefined behavior.
+ @enddefbuiltin
+ 
+ @defbuiltin{@var{type} __builtin_call_code_address (@var{pointer_exp})}
+ 
+ The @var{pointer_exp} expression must be a function identifier.
+ The result is the static address of the function.  For a nested function,
+ it represents the address of the underlying machine code and not of a
+ trampoline that would otherwise be generated to setup the static chain.
+ The code address can be used together with a static chain pointer to
+ call the function with the built-in @code{__builtin_call_with_static_chain}.
+ 
+ @emph{Note:} Calling a function that requires a static chain using the
+ code address directly in a function call expression has undefined behavior.
  @enddefbuiltin
  
  @node Return Address
*************** int vec_any_le (vector signed __int128,
*** 26761,26766 ****
--- 26826,26930 ----
  int vec_any_le (vector unsigned __int128, vector unsigned __int128);
  @end smallexample
  
+ @subsubheading PowerPC Elliptic Curve Cryptography Assist Built-in-Functions
+ 
+ The following additional built-in functions may be available for the
+ PowerPC family of processors, on Future ISA.
+ These instructions provide hardware acceleration for Elliptic Curve
+ Cryptography (ECC) operations, specifically optimized for P-256 and P-384
+ elliptic curves.
+ 
+ The ECC built-in functions are organized into five categories:
+ multiply-multiply operations, scaled multiply-sum operations,
+ quadword add/subtract operations, merge operations and rebase operations.
+ 
+ @smallexample
+ vector unsigned __int128
+ __builtin_vsx_xxmulmul (vector unsigned long long ,
+                         vector unsigned long long ,
+                         const int);
+ vector unsigned __int128
+ __builtin_vsx_xxmulmulhiadd (vector unsigned __int128 ,
+                              vector unsigned long long ,
+                              vector unsigned long long ,
+                              const int ,
+                              const int ,
+                              const int);
+ vector unsigned __int128
+ __builtin_vsx_xxmulmulloadd (vector unsigned __int128 ,
+                              vector unsigned long long ,
+                              vector unsigned long long ,
+                              const int ,
+                              const int);
+ vector unsigned __int128
+ __builtin_vsx_xxssumudm (vector unsigned __int128 ,
+                          vector unsigned long long ,
+                          vector unsigned long long ,
+                          const int);
+ vector unsigned __int128
+ __builtin_vsx_xxssumudmc (vector unsigned __int128 ,
+                           vector unsigned long long ,
+                           vector unsigned long long ,
+                           const int);
+ vector unsigned __int128
+ __builtin_vsx_xxssumudmcext (vector unsigned long long ,
+                              vector unsigned long long ,
+                              vector unsigned __int128 ,
+                              const int);
+ vector unsigned __int128
+ __builtin_vsx_xsaddadduqm (vector unsigned __int128 ,
+                            vector unsigned __int128 ,
+                            vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsaddaddsuqm (vector unsigned __int128 ,
+                             vector unsigned __int128 ,
+                             vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsaddsubuqm (vector unsigned __int128 ,
+                            vector unsigned __int128 ,
+                            vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsaddsubsuqm (vector unsigned __int128 ,
+                             vector unsigned __int128 ,
+                             vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsmerge2t1uqm (vector unsigned __int128 ,
+                              vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsmerge2t2uqm (vector unsigned __int128 ,
+                              vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsmerge2t3uqm (vector unsigned __int128 ,
+                              vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsmerge3t1uqm (vector unsigned __int128 ,
+                              vector unsigned __int128 ,
+                              vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase2t1uqm (vector unsigned __int128 ,
+                               vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase2t2uqm (vector unsigned __int128 ,
+                               vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase2t3uqm (vector unsigned __int128 ,
+                               vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase2t4uqm (vector unsigned __int128 ,
+                               vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase3t1uqm (vector unsigned __int128 ,
+                               vector unsigned __int128 ,
+                               vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase3t2uqm (vector unsigned __int128 ,
+                               vector unsigned __int128 ,
+                               vector unsigned __int128);
+ vector unsigned __int128
+ __builtin_vsx_xsrebase3t3uqm (vector unsigned __int128 ,
+                               vector unsigned __int128 ,
+                               vector unsigned __int128);
+ @end smallexample
  
  The following instances are extension of the existing overloaded built-ins
  @code{vec_sld}, @code{vec_sldw}, @code{vec_slo}, @code{vec_sro}, @code{vec_srl}
*************** vec_t __builtin_galois_field_mult_gcm (v
*** 26846,26851 ****
--- 27010,27033 ----
  vec_t __builtin_galois_field_mult_xts (vec_t, vec_t);
  @end smallexample
  
+ @subsubheading PowerPC Vector Integer Multiply High Built-in Functions
+ 
+ Future PowerPC processors may add new instructions for vector integer
+ multiply high for halfword. GCC provides support for these instructions through
+ the following built-in functions.
+ 
+ @findex vec_mulh
+ @smallexample
+ @exdent vector signed short
+ @exdent vec_mulh (vector signed short @var{a}, vector signed short @var{b});
+ @exdent vector unsigned short
+ @exdent vec_mulh (vector unsigned short @var{a}, vector unsigned short @var{b});
+ @end smallexample
+ 
+ For each integer value @code{i} from 0 to 7, do the following. The integer
+ value in halfword element @code{i} of @var{a} is multiplied by the integer
+ value in halfword element @code{i} of @var{b}. The high-order 16 bits of the
+ 32-bit product are placed into halfword element @code{i} of the vector returned.
  
  @node PowerPC Hardware Transactional Memory Built-in Functions
  @subsection PowerPC Hardware Transactional Memory Built-in Functions
*************** HYGON Family 18h model 6 shanghai CPU.
*** 29229,29234 ****
--- 29411,29419 ----
  
  @item c86-4g-m7
  HYGON Family 18h model 7 chengdu CPU.
+ 
+ @item c86-4g-m8
+ HYGON Family 18h model 8 suzhou CPU.
  @end table
  
  Here is an example:
diff -Nrcpad gcc-17-20260621/gcc/doc/ifn.texi gcc-17-20260628/gcc/doc/ifn.texi
*** gcc-17-20260621/gcc/doc/ifn.texi	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/ifn.texi	Sun Jun 28 22:32:07 2026
*************** The @code{IFN_VEC_WIDEN_PLUS} set of int
*** 754,760 ****
  the @code{vec_widen_sadd} and @code{vec_widen_uadd} instruction patterns,
  depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_PLUS_LO}
  and @code{IFN_VEC_WIDEN_PLUS_HI} work on the low and high parts of a vector,
! the @code{IFN_VEC_WIDEN_PLUS_EVEN} and @code {IFN_VEC_WIDEN_PLUS_ODD}
  functions work on the even and odd elements of a vector.
  
  @cindex @code{IFN_VEC_WIDEN_MINUS} internal function
--- 754,760 ----
  the @code{vec_widen_sadd} and @code{vec_widen_uadd} instruction patterns,
  depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_PLUS_LO}
  and @code{IFN_VEC_WIDEN_PLUS_HI} work on the low and high parts of a vector,
! the @code{IFN_VEC_WIDEN_PLUS_EVEN} and @code{IFN_VEC_WIDEN_PLUS_ODD}
  functions work on the even and odd elements of a vector.
  
  @cindex @code{IFN_VEC_WIDEN_MINUS} internal function
*************** The @code{IFN_VEC_WIDEN_MINUS} set of in
*** 767,773 ****
  @code{vec_widen_ssub} and @code{vec_widen_usub} instruction patterns,
  depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_MINUS_LO}
  and @code{IFN_VEC_WIDEN_MINUS_HI} work on the low and high parts of a vector,
! the @code{IFN_VEC_WIDEN_MINUS_EVEN} and @code {IFN_VEC_WIDEN_MINUS_ODD}
  functions work on the even and odd elements of a vector.
  
  @cindex @code{IFN_VEC_WIDEN_ABD} internal function
--- 767,773 ----
  @code{vec_widen_ssub} and @code{vec_widen_usub} instruction patterns,
  depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_MINUS_LO}
  and @code{IFN_VEC_WIDEN_MINUS_HI} work on the low and high parts of a vector,
! the @code{IFN_VEC_WIDEN_MINUS_EVEN} and @code{IFN_VEC_WIDEN_MINUS_ODD}
  functions work on the even and odd elements of a vector.
  
  @cindex @code{IFN_VEC_WIDEN_ABD} internal function
*************** The @code{IFN_VEC_WIDEN_ABD} set of inte
*** 780,786 ****
  @code{vec_widen_sabd} and @code{vec_widen_uabd} instruction patterns,
  depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_ABD_LO}
  and @code{IFN_VEC_WIDEN_ABD_HI} work on the low and high parts of a vector,
! the @code{IFN_VEC_WIDEN_ABD_EVEN} and @code {IFN_VEC_WIDEN_ABD_ODD} functions
  work on the even and odd elements of a vector.
  
  @end table
--- 780,786 ----
  @code{vec_widen_sabd} and @code{vec_widen_uabd} instruction patterns,
  depending on the sign of the first argument. The @code{IFN_VEC_WIDEN_ABD_LO}
  and @code{IFN_VEC_WIDEN_ABD_HI} work on the low and high parts of a vector,
! the @code{IFN_VEC_WIDEN_ABD_EVEN} and @code{IFN_VEC_WIDEN_ABD_ODD} functions
  work on the even and odd elements of a vector.
  
  @end table
diff -Nrcpad gcc-17-20260621/gcc/doc/invoke.texi gcc-17-20260628/gcc/doc/invoke.texi
*** gcc-17-20260621/gcc/doc/invoke.texi	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/invoke.texi	Sun Jun 28 22:32:07 2026
*************** void fn () @{
*** 4517,4524 ****
  @}
  @end smallexample
  
! It does not warn when the type being copied is a trivially-copyable type whose
! size is less than 64 bytes.
  
  This warning also warns when a loop variable in a range-based for-loop is
  initialized with a value of a different type resulting in a copy.  For example:
--- 4517,4524 ----
  @}
  @end smallexample
  
! It does not warn when the type being copied is a trivially copy constructible
! type whose size is less than 64 bytes.
  
  This warning also warns when a loop variable in a range-based for-loop is
  initialized with a value of a different type resulting in a copy.  For example:
*************** HYGON c86-4g-m7 CPU with x86-64, MMX, SS
*** 35551,35556 ****
--- 35551,35565 ----
  SSE4.1, SSE4.2, AES, PCLMUL, AVX, AVX2, BMI, BMI2, F16C, FMA, PRFCHW, FXSR, SHA,
  XSAVE, XSAVEOPT, XSAVEC, FSGSBASE, RDRND, MOVBE, MWAITX, ADX, RDSEED, CLZERO,
  CLFLUSHOPT, XSAVES, LZCNT, POPCNT, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
+ AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, GFNI, AVX512VNNI, VAES,
+ AVX512BITALG, AVX512VPOPCNTDQ, AVX512VP2INTERSECT, AVXVNNI, VPCLMULQDQ,
+ WBNOINVD instruction set support.
+ 
+ @item c86-4g-m8
+ HYGON c86-4g-m8 CPU with x86-64, MMX, SSE, SSE2, SSE3, SSE4A, CX16, ABM, SSSE3,
+ SSE4.1, SSE4.2, AES, PCLMUL, AVX, AVX2, BMI, BMI2, F16C, FMA, PRFCHW, FXSR, SHA,
+ XSAVE, XSAVEOPT, XSAVEC, FSGSBASE, RDRND, MOVBE, MWAITX, ADX, RDSEED, CLZERO,
+ CLFLUSHOPT, XSAVES, LZCNT, POPCNT, AVX512F, AVX512DQ, AVX512IFMA, AVX512CD,
  AVX512BW, AVX512VL, AVX512BF16, AVX512VBMI, AVX512VBMI2, GFNI, AVX512VNNI, VAES,
  AVX512BITALG, AVX512VPOPCNTDQ, AVX512VP2INTERSECT, AVXVNNI, VPCLMULQDQ,
  WBNOINVD instruction set support.
diff -Nrcpad gcc-17-20260621/gcc/doc/md.texi gcc-17-20260628/gcc/doc/md.texi
*** gcc-17-20260621/gcc/doc/md.texi	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/md.texi	Sun Jun 28 22:32:07 2026
*************** Register constraints correspond directly
*** 4384,4390 ****
  @xref{Register Classes}.  There is thus not much flexibility in their
  definitions.
  
! @deffn {MD Expression} define_register_constraint name regclass docstring [filter]
  All arguments are string constants.
  @var{name} is the name of the constraint, as it will appear in
  @code{match_operand} expressions.  If @var{name} is a multi-letter
--- 4384,4390 ----
  @xref{Register Classes}.  There is thus not much flexibility in their
  definitions.
  
! @deffn {MD Expression} define_register_constraint name regclass docstring [filter] [opno]
  All arguments are string constants.
  @var{name} is the name of the constraint, as it will appear in
  @code{match_operand} expressions.  If @var{name} is a multi-letter
*************** sometimes necessary for a register of cl
*** 4434,4439 ****
--- 4434,4482 ----
  to @var{n}, the first register in @var{c} should itself by divisible
  by @var{n}.
  
+ If even more fine-grained control is needed, the optional @var{opno}
+ can be specified.  It indicates that the constraint is dependent on
+ another operand (a ``referenced'' operand) indicated by @var{opno}.
+ When it is specified, a @var{filter} must be specified as well.
+ The filter function will then be called with the current regno and mode
+ of the operand the constraint refers to, as well as ref_regno and ref_mode
+ of the operand @var{opno} the filter depends on additionally.
+ 
+ As such dependent filters are dynamic and cannot be precomputed, it is
+ advisable to use them very sparingly.  Register allocation is a very
+ compile-time sensitive part of GCC, and too many, or too complicated
+ dynamic filters may increase the compile time significantly.
+ 
+ As an example, the riscv port must ensure that for widening vector
+ instructions, the destination register group either does not overlap
+ or only overlaps specific parts of the source.  A dynamic register
+ constraint would then be:
+ 
+ @smallexample
+ (define_register_constraint "Wtt" "V_REGS" "..." "riscv_widen_overlap_ok (regno, mode, ref_regno, ref_mode)" "0")
+ @end smallexample
+ 
+ and the accompanying target-code function @var{riscv_widen_overlap_ok} might
+ do:
+ @smallexample
+ unsigned int wide_nregs = riscv_hard_regno_nregs (wide_regno, wide_mode);
+ unsigned int nregs = riscv_hard_regno_nregs (regno, mode);
+ 
+ /* Overlap is only allowed in the highest-numbered part of the wider
+    destination.  */
+ if (regno == wide_regno)
+   return false;
+ 
+ if (regno >= wide_regno + (wide_nregs - nregs))
+   return true;
+ 
+ /* No overlap is OK.  */
+ if (regno < wide_regno)
+   return true;
+ 
+ return false;
+ @end smallexample
+ 
  @var{docstring} is a sentence documenting the meaning of the
  constraint.  Docstrings are explained further below.
  @end deffn
*************** Operand 0 is a comparison operator.  Ope
*** 8625,8630 ****
--- 8668,8676 ----
  first and second operands of the comparison, respectively.  Operand 3
  is the @code{code_label} to jump to.
  
+ Note: In practice, the middle-end invokes the pattern when comparing a vector
+ boolean against @{0,@dots{}@}, after dojump.cc has already swapped the branch labels.
+ 
  @mdindex cond_vec_cbranch_any@var{mode}
  @item @samp{cond_vec_cbranch_any@var{mode}}
  Masked conditional branch instruction based on a vector compare that branches
*************** Operand 2 and operand 3 are the first an
*** 8644,8649 ****
--- 8690,8698 ----
  respectively.  Operand 5 is the @code{code_label} to jump to.  Inactive lanes in
  the mask operand should not influence the decision to branch.
  
+ Note: In practice, the middle-end invokes the pattern when comparing a vector
+ boolean against @{0,@dots{}@}, after dojump.cc has already swapped the branch labels.
+ 
  @mdindex cond_len_vec_cbranch_any@var{mode}
  @item @samp{cond_len_vec_cbranch_any@var{mode}}
  Len based conditional branch instruction based on a vector compare that branches
*************** Operand 4 is the len operand and Operand
*** 8665,8670 ****
--- 8714,8722 ----
  the @code{code_label} to jump to. Inactive lanes in the mask operand should not
  influence the decision to branch.
  
+ Note: In practice, the middle-end invokes the pattern when comparing a vector
+ boolean against @{0,@dots{}@}, after dojump.cc has already swapped the branch labels.
+ 
  @end table
  
  @end ifset
diff -Nrcpad gcc-17-20260621/gcc/doc/riscv-ext.texi gcc-17-20260628/gcc/doc/riscv-ext.texi
*** gcc-17-20260621/gcc/doc/riscv-ext.texi	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/riscv-ext.texi	Sun Jun 28 22:32:07 2026
***************
*** 466,471 ****
--- 466,475 ----
  @tab 1.0
  @tab Minimal half-precision floating-point in integer registers extension
  
+ @item @samp{zvabd}
+ @tab 0.7
+ @tab Vector absolute difference extension.
+ 
  @item @samp{sdtrig}
  @tab 1.0
  @tab Debug triggers extension
diff -Nrcpad gcc-17-20260621/gcc/doc/tm.texi gcc-17-20260628/gcc/doc/tm.texi
*** gcc-17-20260621/gcc/doc/tm.texi	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/tm.texi	Sun Jun 28 22:32:07 2026
*************** Therefore, register classes cannot be us
*** 2490,2495 ****
--- 2490,2498 ----
  a register pair to start with an even-numbered register.  The way to
  specify this requirement is with @code{TARGET_HARD_REGNO_MODE_OK},
  or with a filter expression in a @code{define_register_constraint}.
+ An operand's constraint that is dependent on another operand's register
+ or mode can be expressed using a dependent register constraint with
+ an additional operand index in @code{define_register_constraint}.
  
  Register classes used for input-operands of bitwise-and or shift
  instructions have a special requirement: each such class must have, for
*************** the order of instructions is important f
*** 7875,7881 ****
  also the latencies of operations.
  @end deftypevr
  
! @deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (unsigned int @var{opc}, machine_mode @var{mode})
  This hook is called by tree reassociator to determine a level of
  parallelism required in output calculations chain.
  @end deftypefn
--- 7878,7884 ----
  also the latencies of operations.
  @end deftypevr
  
! @deftypefn {Target Hook} int TARGET_SCHED_REASSOCIATION_WIDTH (tree_code @var{opc}, machine_mode @var{mode})
  This hook is called by tree reassociator to determine a level of
  parallelism required in output calculations chain.
  @end deftypefn
diff -Nrcpad gcc-17-20260621/gcc/doc/tm.texi.in gcc-17-20260628/gcc/doc/tm.texi.in
*** gcc-17-20260621/gcc/doc/tm.texi.in	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/doc/tm.texi.in	Sun Jun 28 22:32:07 2026
*************** Therefore, register classes cannot be us
*** 2075,2080 ****
--- 2075,2083 ----
  a register pair to start with an even-numbered register.  The way to
  specify this requirement is with @code{TARGET_HARD_REGNO_MODE_OK},
  or with a filter expression in a @code{define_register_constraint}.
+ An operand's constraint that is dependent on another operand's register
+ or mode can be expressed using a dependent register constraint with
+ an additional operand index in @code{define_register_constraint}.
  
  Register classes used for input-operands of bitwise-and or shift
  instructions have a special requirement: each such class must have, for
diff -Nrcpad gcc-17-20260621/gcc/dojump.cc gcc-17-20260628/gcc/dojump.cc
*** gcc-17-20260621/gcc/dojump.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/dojump.cc	Sun Jun 28 22:32:07 2026
*************** do_compare_rtx_and_jump (rtx op0, rtx op
*** 1244,1255 ****
  	  auto nunits = TYPE_VECTOR_SUBPARTS (TREE_TYPE (val)).to_constant ();
  	  if (maybe_ne (GET_MODE_PRECISION (mode), nunits))
  	    {
! 	      op0 = expand_binop (mode, and_optab, op0,
! 				  GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1),
! 				  NULL_RTX, true, OPTAB_WIDEN);
! 	      op1 = expand_binop (mode, and_optab, op1,
! 				  GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1),
! 				  NULL_RTX, true, OPTAB_WIDEN);
  	    }
  	}
  
--- 1244,1254 ----
  	  auto nunits = TYPE_VECTOR_SUBPARTS (TREE_TYPE (val)).to_constant ();
  	  if (maybe_ne (GET_MODE_PRECISION (mode), nunits))
  	    {
! 	      rtx mask_imm = GEN_INT ((HOST_WIDE_INT_1U << nunits) - 1);
! 	      op0 = simplify_expand_binop (mode, and_optab, op0, mask_imm,
! 					   NULL_RTX, true, OPTAB_WIDEN);
! 	      op1 = simplify_expand_binop (mode, and_optab, op1, mask_imm,
! 					   NULL_RTX, true, OPTAB_WIDEN);
  	    }
  	}
  
diff -Nrcpad gcc-17-20260621/gcc/dwarf2out.cc gcc-17-20260628/gcc/dwarf2out.cc
*** gcc-17-20260621/gcc/dwarf2out.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/dwarf2out.cc	Sun Jun 28 22:32:07 2026
*************** typedef struct GTY((chain_circular ("%h.
*** 3161,3175 ****
    unsigned int decl_id;
    enum dwarf_tag die_tag;
    /* Die is used and must not be pruned as unused.  */
!   BOOL_BITFIELD die_perennial_p : 1;
!   BOOL_BITFIELD comdat_type_p : 1; /* DIE has a type signature */
    /* For an external ref to die_symbol if die_offset contains an extra
       offset to that symbol.  */
!   BOOL_BITFIELD with_offset : 1;
    /* Whether this DIE was removed from the DIE tree, for example via
       prune_unused_types.  We don't consider those present from the
       DIE lookup routines.  */
!   BOOL_BITFIELD removed : 1;
    /* Lots of spare bits.  */
  }
  die_node;
--- 3161,3175 ----
    unsigned int decl_id;
    enum dwarf_tag die_tag;
    /* Die is used and must not be pruned as unused.  */
!   bool die_perennial_p : 1;
!   bool comdat_type_p : 1; /* DIE has a type signature */
    /* For an external ref to die_symbol if die_offset contains an extra
       offset to that symbol.  */
!   bool with_offset : 1;
    /* Whether this DIE was removed from the DIE tree, for example via
       prune_unused_types.  We don't consider those present from the
       DIE lookup routines.  */
!   bool removed : 1;
    /* Lots of spare bits.  */
  }
  die_node;
*************** modified_type_die (tree type, int cv_qua
*** 13997,14003 ****
        tree dtype = TREE_TYPE (name);
  
        /* Skip the typedef for base types with DW_AT_endianity, no big deal.  */
!       if (qualified_type == dtype && !reverse_type)
  	{
  	  tree origin = decl_ultimate_origin (name);
  
--- 13997,14012 ----
        tree dtype = TREE_TYPE (name);
  
        /* Skip the typedef for base types with DW_AT_endianity, no big deal.  */
!       if (!reverse_type
! 	  && (qualified_type == dtype
! 	      /* Pointer identity check above might fail when qualified_type
! 		 is a different variant node of the same typedef yet requires
! 		 the same handling as if they matched (see PR/125421).
! 		 Skip this when btf_type_tag attributes are present, as those
! 		 need to be handled in the else branch below.  */
! 	      || (TYPE_NAME (qualified_type) == name
! 		  && TYPE_QUALS (qualified_type) == TYPE_QUALS (dtype)
! 		  && !lookup_attribute ("btf_type_tag", type_attrs))))
  	{
  	  tree origin = decl_ultimate_origin (name);
  
*************** modified_type_die (tree type, int cv_qua
*** 14009,14016 ****
  				      reverse, context_die);
  
  	  /* For a named type, use the typedef.  */
! 	  gen_type_die (qualified_type, context_die);
! 	  return lookup_type_die (qualified_type);
  	}
        else
  	{
--- 14018,14025 ----
  				      reverse, context_die);
  
  	  /* For a named type, use the typedef.  */
! 	  gen_type_die (dtype, context_die);
! 	  return lookup_type_die (dtype);
  	}
        else
  	{
diff -Nrcpad gcc-17-20260621/gcc/dwarf2out.h gcc-17-20260628/gcc/dwarf2out.h
*** gcc-17-20260621/gcc/dwarf2out.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/dwarf2out.h	Sun Jun 28 22:32:07 2026
*************** struct GTY(()) dw_cfa_location {
*** 161,168 ****
    poly_int64 base_offset;
    /* REG is in DWARF_FRAME_REGNUM space, *not* normal REGNO space.  */
    struct cfa_reg reg;
!   BOOL_BITFIELD indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
!   BOOL_BITFIELD in_use : 1;    /* 1 if a saved cfa is stored here.  */
  };
  
  
--- 161,168 ----
    poly_int64 base_offset;
    /* REG is in DWARF_FRAME_REGNUM space, *not* normal REGNO space.  */
    struct cfa_reg reg;
!   bool indirect : 1;  /* 1 if CFA is accessed via a dereference.  */
!   bool in_use : 1;    /* 1 if a saved cfa is stored here.  */
  };
  
  
diff -Nrcpad gcc-17-20260621/gcc/expr.cc gcc-17-20260628/gcc/expr.cc
*** gcc-17-20260621/gcc/expr.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/expr.cc	Sun Jun 28 22:32:07 2026
*************** emit_block_move_via_pattern (rtx x, rtx
*** 2320,2325 ****
--- 2320,2327 ----
  	      else
  		create_fixed_operand (&ops[8], NULL);
  	    }
+ 	  gcc_assert (min_size != max_size
+ 		      || rtx_equal_p (ops[2].value, GEN_INT (min_size)));
  	  if (maybe_expand_insn (code, nops, ops))
  	    return true;
  	}
*************** set_storage_via_setmem (rtx object, rtx
*** 4045,4050 ****
--- 4047,4054 ----
  	      else
  		create_fixed_operand (&ops[8], NULL);
  	    }
+ 	  gcc_assert (min_size != max_size
+ 		      || rtx_equal_p (ops[1].value, GEN_INT (min_size)));
  	  if (maybe_expand_insn (code, nops, ops))
  	    return true;
  	}
diff -Nrcpad gcc-17-20260621/gcc/fortran/ChangeLog gcc-17-20260628/gcc/fortran/ChangeLog
*** gcc-17-20260621/gcc/fortran/ChangeLog	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/ChangeLog	Sun Jun 28 22:32:08 2026
***************
*** 1,3 ****
--- 1,119 ----
+ 2026-06-27  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/30438
+ 	PR fortran/125801
+ 	* io.cc (gfc_resolve_dt): Set internal unit as used on read.o
+ 	* resolve.cc (resolve_transfer): Move setting value as used
+ 	before possible early return.
+ 	(gfc_resolve): Only call warn_unused_vs_set if there are no
+ 	pending errors.
+ 
+ 2026-06-26  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/125902
+ 	* dump-parse-tree.cc (needs_CFI_cdesc): New helper function to
+ 	determine when struct CFI_cdesc_t is used.
+ 	(has_cfi_cdesc): Use it here...
+ 	(get_c_type_name): ... and here.
+ 
+ 2026-06-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* trans-array.cc (has_class_alloc_comp): Change to atte.class_pointer.
+ 
+ 2026-06-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/125761
+ 	* trans-array.cc (build_array_ref): When the descriptor's
+ 	canonical type is a class type, pass the class container as
+ 	'decl' to gfc_build_array_ref for genuine array element
+ 	references (rank > 0), so the element size can be corrected
+ 	for an unlimited-polymorphic character payload.
+ 	* trans-types.cc (gfc_typenode_for_spec): Move setting the
+ 	GFC_CLASS_TYPE_P bit to..
+ 	(gfc_get_derived_type): .. and use attr.is_class.
+ 	(gfc_get_derived_type): Move setting the GFC_CLASS_TYPE_P bit
+ 	as the last step before returning the derived->backend_decl
+ 	if the derived->attr.is_class is true.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* trans-openmp.cc (gfc_trans_omp_barrier): Pass GOMP_BARRIER_EXPLICIT
+ 	to GOMP_barrier_ext.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* types.def (BT_COMPLEX_INT): New type.
+ 	(BT_FN_COMPLEX_INT): New function type.
+ 
+ 2026-06-23  Kwok Cheung Yeung  <kcyeung@baylibre.com>
+ 	    Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* trans-openmp.cc (gfc_trans_omp_array_section): Use macros for
+ 	accessing iterator elements.
+ 	(handle_iterator): Likewise, plus the iterator constructor.
+ 	(gfc_trans_omp_clauses): Likewise.
+ 
+ 2026-06-23  Sandra Loosemore  <sloosemore@baylibre.com>
+ 
+ 	* trans-openmp.cc (gfc_trans_omp_array_section): Add comments and
+ 	use a more descriptive variable name.
+ 
+ 2026-06-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* trans-array.cc (has_class_alloc_comp): New helper; returns true if
+ 	derived type DER has any CLASS component.
+ 	(gfc_trans_array_ctor_element): Also free allocatable components when
+ 	the element expression is EXPR_STRUCTURE, skipping types that contain
+ 	CLASS components to avoid freeing stack-allocated _data pointers.
+ 	(gfc_constructor_is_owned_alloc_comp): Likewise treat EXPR_STRUCTURE
+ 	elements as owned only when the derived type has no CLASS components.
+ 	* trans-expr.cc (gfc_trans_alloc_subarray_assign): Free allocatable
+ 	components of the component's temporary descriptor before nulling its
+ 	data pointer, for non-variable source expressions.
+ 
+ 2026-06-23  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/125902
+ 	* dump-parse-tree.cc (get_c_type_name): Use CFI_cdesc_t also for
+ 	deferred shape and deferred length dummies, as well as for
+ 	assumed-length scalar character dummies.
+ 
+ 2026-06-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* decl.cc (build_struct): Convert the PDT template before the
+ 	call to gfc_build_class_symbol.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (resolve_omp_clauses_aff_dep_map_cache): Split off
+ 	from ...
+ 	(resolve_omp_clauses): ... here. Call it.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (resolve_omp_clauses): Avoid ICE when called
+ 	by gfc_resolve_omp_udm.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (check_omp_clauses_dupl_syms): New; moved code from ...
+ 	(resolve_omp_clauses): ... here. Call new function.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* openmp.cc (resolve_omp_allocate_clauses): New function for
+ 	resolving 'allocate' clauses, splitt-off from ...
+ 	(resolve_omp_clauses): ... here. Call the new function.
+ 
+ 2026-06-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/125914
+ 	* trans-expr.cc (gfc_conv_power_op): Rewrite (-1.0)**n into
+ 	(real) (1 - ((n & 1) << 1)).
+ 
  2026-06-19  Léo Hardt  <leom.hardt@inf.ufrgs.br>
  
  	* trans-intrinsic.cc: Removed orphaned comment from 69f293c
diff -Nrcpad gcc-17-20260621/gcc/fortran/decl.cc gcc-17-20260628/gcc/fortran/decl.cc
*** gcc-17-20260621/gcc/fortran/decl.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/decl.cc	Sun Jun 28 22:32:08 2026
*************** build_struct (const char *name, gfc_char
*** 2546,2551 ****
--- 2546,2569 ----
  
    gfc_apply_init (&c->ts, &c->attr, c->initializer);
  
+   /* Convert a class, PDT component of a non-derived type to a specific instance
+      before gfc_build_class_symbol gets to work on it.  */
+   if (c->ts.type == BT_CLASS
+       && !(gfc_current_block ()->attr.pdt_template
+ 	   || gfc_current_block ()->attr.pdt_type)
+       && c->ts.u.derived->attr.pdt_template)
+     {
+       match m = gfc_get_pdt_instance (decl_type_param_list, &c->ts.u.derived, NULL);
+       if (m != MATCH_YES)
+ 	{
+ 	  if (!gfc_error_check ())
+ 	    gfc_error ("Parameterized component of a non-parameterized "
+ 		       "derived type at %C could not be converted to a valid "
+ 		       "instance");
+ 	  return false;
+ 	}
+     }
+ 
    /* Check array components.  */
    if (!c->attr.dimension)
      goto scalar;
diff -Nrcpad gcc-17-20260621/gcc/fortran/dump-parse-tree.cc gcc-17-20260628/gcc/fortran/dump-parse-tree.cc
*** gcc-17-20260621/gcc/fortran/dump-parse-tree.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/dump-parse-tree.cc	Sun Jun 28 22:32:08 2026
*************** static void show_external_symbol (gfc_gs
*** 4200,4205 ****
--- 4200,4218 ----
  static void write_type (gfc_symbol *sym);
  static void write_funptr_fcn (gfc_symbol *);
  
+ /* Helper function determining if the characteristics of a formal argument of a
+    bind(C) procedure is such that its C prototype needs struct CFI_cdesc_t.  */
+ 
+ static bool
+ needs_CFI_cdesc (gfc_typespec *ts, gfc_array_spec *as)
+ {
+   return ((as && (as->type == AS_ASSUMED_RANK
+ 		  || as->type == AS_ASSUMED_SHAPE
+ 		  || as->type == AS_DEFERRED))
+ 	  || (ts->type == BT_CHARACTER
+ 	      && (ts->deferred || ts->u.cl->length == NULL)));
+ }
+ 
  /* Do we need to write out an #include <ISO_Fortran_binding.h> or not?  */
  
  static void
*************** has_cfi_cdesc (gfc_gsymbol *gsym, void *
*** 4224,4230 ****
      {
        gfc_symbol *s;
        s = f->sym;
!       if (s->as && (s->as->type == AS_ASSUMED_RANK || s->as->type == AS_ASSUMED_SHAPE))
  	{
  	  *data_p = true;
  	  return;
--- 4237,4243 ----
      {
        gfc_symbol *s;
        s = f->sym;
!       if (needs_CFI_cdesc (&s->ts, s->as))
  	{
  	  *data_p = true;
  	  return;
*************** get_c_type_name (gfc_typespec *ts, gfc_a
*** 4357,4363 ****
    *post = "";
    *type_name = "<error>";
  
!   if (as && (as->type == AS_ASSUMED_RANK || as->type == AS_ASSUMED_SHAPE))
      {
        *asterisk = true;
        *post = "";
--- 4370,4376 ----
    *post = "";
    *type_name = "<error>";
  
!   if (needs_CFI_cdesc (ts, as))
      {
        *asterisk = true;
        *post = "";
diff -Nrcpad gcc-17-20260621/gcc/fortran/io.cc gcc-17-20260628/gcc/fortran/io.cc
*** gcc-17-20260621/gcc/fortran/io.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/io.cc	Sun Jun 28 22:32:08 2026
*************** gfc_resolve_dt (gfc_code *dt_code, gfc_d
*** 3412,3417 ****
--- 3412,3419 ----
  
  	  gfc_expr_set_at (e, &e->where, VALUE_VARDEF);
  	}
+       else
+ 	gfc_value_used_expr (e, VALUE_USED);
      }
  
    if (e->rank && e->ts.type != BT_CHARACTER)
diff -Nrcpad gcc-17-20260621/gcc/fortran/openmp.cc gcc-17-20260628/gcc/fortran/openmp.cc
*** gcc-17-20260621/gcc/fortran/openmp.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/openmp.cc	Sun Jun 28 22:32:08 2026
*************** gfc_resolve_omp_assumptions (gfc_omp_ass
*** 9264,9269 ****
--- 9264,10076 ----
  }
  
  
+ /* Resolve the OpenMP ALLOCATE clauses.  */
+ 
+ static void
+ resolve_omp_allocate_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses,
+ 			      gfc_namespace *ns)
+ {
+   gfc_omp_namelist *n;
+   enum gfc_omp_list_type list;
+ 
+   if (!omp_clauses->lists[OMP_LIST_ALLOCATE])
+     return;
+   for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
+     {
+       if (n->u2.allocator
+ 	  && (!gfc_resolve_expr (n->u2.allocator)
+ 	      || n->u2.allocator->ts.type != BT_INTEGER
+ 	      || n->u2.allocator->rank != 0
+ 	      || n->u2.allocator->ts.kind != gfc_c_intptr_kind))
+ 	{
+ 	  gfc_error ("Expected integer expression of the "
+ 		     "%<omp_allocator_handle_kind%> kind at %L",
+ 		     &n->u2.allocator->where);
+ 	  break;
+ 	}
+       if (!n->u.align)
+ 	continue;
+       HOST_WIDE_INT alignment = 0;
+       if (!gfc_resolve_expr (n->u.align)
+ 	  || n->u.align->ts.type != BT_INTEGER
+ 	  || n->u.align->rank != 0
+ 	  || n->u.align->expr_type != EXPR_CONSTANT
+ 	  || gfc_extract_hwi (n->u.align, &alignment)
+ 	  || alignment <= 0
+ 	  || !pow2p_hwi (alignment))
+ 	{
+ 	  gfc_error ("ALIGN requires a scalar positive constant integer "
+ 		     "alignment expression at %L that is a power of two",
+ 		     &n->u.align->where);
+ 	  break;
+ 	}
+     }
+ 
+   /* Check for 2 things here.
+       1.  There is no duplication of variable in allocate clause.
+       2.  Variable in allocate clause are also present in some
+ 	  privatization clase (non-composite case).  */
+   for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
+     if (n->sym)
+       n->sym->mark = 0;
+ 
+   gfc_omp_namelist *prev = NULL;
+   for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; )
+     {
+       if (n->sym == NULL)
+ 	{
+ 	  n = n->next;
+ 	  continue;
+ 	}
+       if (n->sym->mark == 1)
+ 	{
+ 	  gfc_warning (OPT_Wopenmp, "%qs appears more than once in "
+ 		       "%<allocate%> at %L" , n->sym->name, &n->where);
+ 	  /* We have already seen this variable so it is a duplicate.
+ 	     Remove it.  */
+ 	  if (prev != NULL && prev->next == n)
+ 	    {
+ 	      prev->next = n->next;
+ 	      n->next = NULL;
+ 	      gfc_free_omp_namelist (n, OMP_LIST_ALLOCATE);
+ 	      n = prev->next;
+ 	    }
+ 	  continue;
+ 	}
+       n->sym->mark = 1;
+       prev = n;
+       n = n->next;
+     }
+ 
+   /* Non-composite constructs.  */
+   if (code && code->op < EXEC_OMP_DO_SIMD)
+     {
+       for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
+ 	   list = gfc_omp_list_type (list + 1))
+ 	switch (list)
+ 	  {
+ 	  case OMP_LIST_PRIVATE:
+ 	  case OMP_LIST_FIRSTPRIVATE:
+ 	  case OMP_LIST_LASTPRIVATE:
+ 	  case OMP_LIST_REDUCTION:
+ 	  case OMP_LIST_REDUCTION_INSCAN:
+ 	  case OMP_LIST_REDUCTION_TASK:
+ 	  case OMP_LIST_IN_REDUCTION:
+ 	  case OMP_LIST_TASK_REDUCTION:
+ 	  case OMP_LIST_LINEAR:
+ 	    for (n = omp_clauses->lists[list]; n; n = n->next)
+ 		 n->sym->mark = 0;
+ 	    break;
+ 	  default:
+ 	    break;
+ 	  }
+ 
+       for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
+ 	if (n->sym->mark == 1)
+ 	  gfc_error ("%qs specified in %<allocate%> clause at %L but not "
+ 		     "in an explicit privatization clause",
+ 		     n->sym->name, &n->where);
+     }
+   if (!(code
+ 	&& (code->op == EXEC_OMP_ALLOCATORS || code->op == EXEC_OMP_ALLOCATE)
+ 	&& code->block
+ 	&& code->block->next
+ 	&& code->block->next->op == EXEC_ALLOCATE))
+     return;
+ 
+   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;
+   gfc_symbol *missing_allocator_sym = NULL;
+   for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
+     {
+       if (n->u2.allocator == NULL)
+ 	{
+ 	  if (!missing_allocator_sym)
+ 	    missing_allocator_sym = n->sym;
+ 	  missing_allocator = true;
+ 	}
+       if (n->sym == NULL)
+ 	{
+ 	  n_null = n;
+ 	  continue;
+ 	}
+       if (n->sym->attr.codimension)
+ 	gfc_error ("Unexpected coarray %qs in %<allocate%> at %L",
+ 			   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)
+ 	      if (ref->type == REF_COMPONENT)
+ 		break;
+ 	    if (ref == NULL)
+ 	      break;
+ 	  }
+       if (a == NULL)
+ 	gfc_error ("%qs specified in %<allocate%> at %L but not "
+ 		   "in the associated ALLOCATE statement",
+ 		   n->sym->name, &n->where);
+     }
+   /* If there is an ALLOCATE directive without list argument, a
+      namelist with its allocator/align clauses and n->sym = NULL is
+      created during parsing; here, we add all not otherwise specified
+      items from the Fortran allocate to that list.
+      For an ALLOCATORS directive, not listed items use the normal
+      Fortran way.
+      The behavior of an ALLOCATE directive that does not list all
+      arguments but there is no directive without list argument is not
+      well specified.  Thus, we reject such code below. In OpenMP 5.2
+      the executable ALLOCATE directive is deprecated and in 6.0
+      deleted such that no spec clarification is to be expected.  */
+   for (a = code->block->next->ext.alloc.list; a; a = a->next)
+     if (a->expr->expr_type == EXPR_VARIABLE)
+       {
+ 	for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
+ 	  if (a->expr->symtree->n.sym == n->sym)
+ 	    {
+ 	      gfc_ref *ref;
+ 	      for (ref = a->expr->ref; ref; ref = ref->next)
+ 		if (ref->type == REF_COMPONENT)
+ 		  break;
+ 	      if (ref == NULL)
+ 		break;
+ 	    }
+ 	if (n == NULL && n_null == NULL)
+ 	  {
+ 	    /* OK for ALLOCATORS but for ALLOCATE: Unspecified whether
+ 		   that should use the default allocator of OpenMP or the
+ 		   Fortran allocator. Thus, just reject it.  */
+ 	    if (code->op == EXEC_OMP_ALLOCATE)
+ 	      gfc_error ("%qs listed in %<allocate%> statement at %L "
+ 			 "but it is neither explicitly in listed in "
+ 			 "the %<!$OMP ALLOCATE%> directive nor exists"
+ 			 " a directive without argument list",
+ 			 a->expr->symtree->n.sym->name,
+ 			 &a->expr->where);
+ 	    break;
+ 	  }
+ 	if (n == NULL)
+ 	  {
+ 	    if (a->expr->symtree->n.sym->attr.codimension)
+ 	      gfc_error ("Unexpected coarray %qs in %<allocate%> at "
+ 			 "%L, implicitly listed in %<!$OMP ALLOCATE%>"
+ 			 " at %L", a->expr->symtree->n.sym->name,
+ 			 &a->expr->where, &n_null->where);
+ 	    break;
+ 	  }
+       }
+   gfc_namespace *prog_unit = ns;
+   while (prog_unit->parent)
+     prog_unit = prog_unit->parent;
+   gfc_namespace *fn_ns = ns;
+   while (fn_ns)
+     {
+       if (ns->proc_name
+ 	  && (ns->proc_name->attr.subroutine
+ 	      || ns->proc_name->attr.function))
+ 	break;
+       fn_ns = fn_ns->parent;
+     }
+   if (missing_allocator
+       && !(prog_unit->omp_requires & OMP_REQ_DYNAMIC_ALLOCATORS)
+       && ((fn_ns && fn_ns->proc_name->attr.omp_declare_target)
+ 	  || omp_clauses->contained_in_target_construct))
+     {
+       if (code->op == EXEC_OMP_ALLOCATORS)
+ 	gfc_error ("ALLOCATORS directive at %L inside a target region "
+ 		   "must specify an ALLOCATOR modifier for %qs",
+ 		   &code->loc, missing_allocator_sym->name);
+       else if (missing_allocator_sym)
+ 	gfc_error ("ALLOCATE directive at %L inside a target region "
+ 		   "must specify an ALLOCATOR clause for %qs",
+ 		   &code->loc, missing_allocator_sym->name);
+       else
+ 	gfc_error ("ALLOCATE directive at %L inside a target region "
+ 		   "must specify an ALLOCATOR clause", &code->loc);
+     }
+ }
+ 
+ 
+ /* Diagnose list items that appear multiple times in OpenMP or OpenACC clauses,
+    unless permitted by the specification.  */
+ 
+ static void
+ check_omp_clauses_dupl_syms (gfc_code *code, gfc_omp_clauses *omp_clauses,
+ 			    bool openacc)
+ {
+   gfc_omp_namelist *n;
+   enum gfc_omp_list_type list;
+ 
+   /* Check that no symbol appears on multiple clauses, except that
+      a symbol can appear on both firstprivate and lastprivate.  */
+   for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
+        list = gfc_omp_list_type (list + 1))
+     for (n = omp_clauses->lists[list]; n; n = n->next)
+       {
+ 	if (!n->sym)  /* omp_all_memory.  */
+ 	  continue;
+ 	n->sym->mark = 0;
+ 	n->sym->comp_mark = 0;
+ 	n->sym->data_mark = 0;
+ 	n->sym->dev_mark = 0;
+ 	n->sym->gen_mark = 0;
+ 	n->sym->reduc_mark = 0;
+       }
+   for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
+        list = gfc_omp_list_type (list + 1))
+     if (list != OMP_LIST_FIRSTPRIVATE
+ 	&& list != OMP_LIST_LASTPRIVATE
+ 	&& list != OMP_LIST_ALIGNED
+ 	&& list != OMP_LIST_DEPEND
+ 	&& list != OMP_LIST_FROM
+ 	&& list != OMP_LIST_TO
+ 	&& list != OMP_LIST_INTEROP
+ 	&& (list != OMP_LIST_REDUCTION || !openacc)
+ 	&& list != OMP_LIST_ALLOCATE)
+       for (n = omp_clauses->lists[list]; n; n = n->next)
+ 	{
+ 	  bool component_ref_p = false;
+ 
+ 	  /* Allow multiple components of the same (e.g. derived-type)
+ 	     variable here.  Duplicate components are detected elsewhere.  */
+ 	  if (n->expr && n->expr->expr_type == EXPR_VARIABLE)
+ 	    for (gfc_ref *ref = n->expr->ref; ref; ref = ref->next)
+ 	      if (ref->type == REF_COMPONENT)
+ 		component_ref_p = true;
+ 	  if ((list == OMP_LIST_IS_DEVICE_PTR
+ 	       || list == OMP_LIST_HAS_DEVICE_ADDR)
+ 	      && !component_ref_p)
+ 	    {
+ 	      if (n->sym->gen_mark
+ 		  || n->sym->dev_mark
+ 		  || n->sym->reduc_mark
+ 		  || n->sym->mark)
+ 		gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 			   n->sym->name, &n->where);
+ 	      else
+ 		n->sym->dev_mark = 1;
+ 	    }
+ 	  else if ((list == OMP_LIST_USE_DEVICE_PTR
+ 		    || list == OMP_LIST_USE_DEVICE_ADDR
+ 		    || list == OMP_LIST_PRIVATE
+ 		    || list == OMP_LIST_SHARED)
+ 		   && !component_ref_p)
+ 	    {
+ 	      if (n->sym->gen_mark || n->sym->dev_mark || n->sym->reduc_mark)
+ 		gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 			   n->sym->name, &n->where);
+ 	      else
+ 		{
+ 		  n->sym->gen_mark = 1;
+ 		  /* Set both generic and device bits if we have
+ 		     use_device_*(x) or shared(x).  This allows us to diagnose
+ 		     "map(x) private(x)" below.  */
+ 		  if (list != OMP_LIST_PRIVATE)
+ 		    n->sym->dev_mark = 1;
+ 		}
+ 	    }
+ 	  else if ((list == OMP_LIST_REDUCTION
+ 		    || list == OMP_LIST_REDUCTION_TASK
+ 		    || list == OMP_LIST_REDUCTION_INSCAN
+ 		    || list == OMP_LIST_IN_REDUCTION
+ 		    || list == OMP_LIST_TASK_REDUCTION)
+ 		   && !component_ref_p)
+ 	    {
+ 	      /* Attempts to mix reduction types are diagnosed below.  */
+ 	      if (n->sym->gen_mark || n->sym->dev_mark)
+ 		gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 			   n->sym->name, &n->where);
+ 	      n->sym->reduc_mark = 1;
+ 	    }
+ 	  else if ((!component_ref_p && n->sym->comp_mark)
+ 		   || (component_ref_p && n->sym->mark))
+ 	    {
+ 	      if (openacc)
+ 		gfc_error ("Symbol %qs has mixed component and non-component "
+ 			   "accesses at %L", n->sym->name, &n->where);
+ 	    }
+ 	  else if ((openacc || list != OMP_LIST_MAP) && n->sym->mark)
+ 	    gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		       n->sym->name, &n->where);
+ 	  else
+ 	    {
+ 	      if (component_ref_p)
+ 		n->sym->comp_mark = 1;
+ 	      else
+ 		n->sym->mark = 1;
+ 	    }
+ 	}
+ 
+   /* Detect specifically the case where we have "map(x) private(x)" and raise
+      an error.  If we have "...simd" combined directives though, the "private"
+      applies to the simd part, so this is permitted though.  */
+   for (n = omp_clauses->lists[OMP_LIST_PRIVATE]; n; n = n->next)
+     if (n->sym->mark
+ 	&& n->sym->gen_mark
+ 	&& !n->sym->dev_mark
+ 	&& !n->sym->reduc_mark
+ 	&& code->op != EXEC_OMP_TARGET_SIMD
+ 	&& code->op != EXEC_OMP_TARGET_PARALLEL_DO_SIMD
+ 	&& code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD
+ 	&& code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD)
+       gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		 n->sym->name, &n->where);
+ 
+   gcc_assert (OMP_LIST_LASTPRIVATE == OMP_LIST_FIRSTPRIVATE + 1);
+   for (list = OMP_LIST_FIRSTPRIVATE; list <= OMP_LIST_LASTPRIVATE;
+        list = gfc_omp_list_type (list + 1))
+     for (n = omp_clauses->lists[list]; n; n = n->next)
+       if (n->sym->data_mark || n->sym->gen_mark || n->sym->dev_mark)
+ 	{
+ 	  gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		     n->sym->name, &n->where);
+ 	  n->sym->data_mark = n->sym->gen_mark = n->sym->dev_mark = 0;
+ 	}
+       else if (n->sym->mark
+ 	       && code->op != EXEC_OMP_TARGET_TEAMS
+ 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE
+ 	       && code->op != EXEC_OMP_TARGET_TEAMS_LOOP
+ 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD
+ 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO
+ 	       && code->op != EXEC_OMP_TARGET_PARALLEL
+ 	       && code->op != EXEC_OMP_TARGET_PARALLEL_DO
+ 	       && code->op != EXEC_OMP_TARGET_PARALLEL_LOOP
+ 	       && code->op != EXEC_OMP_TARGET_PARALLEL_DO_SIMD
+ 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD)
+ 	gfc_error ("Symbol %qs present on both data and map clauses "
+ 		   "at %L", n->sym->name, &n->where);
+ 
+   for (n = omp_clauses->lists[OMP_LIST_FIRSTPRIVATE]; n; n = n->next)
+     {
+       if (n->sym->data_mark || n->sym->gen_mark || n->sym->dev_mark)
+ 	gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		   n->sym->name, &n->where);
+       else
+ 	n->sym->data_mark = 1;
+     }
+ 
+   /* LASTPRIVATE clauses.  */
+   for (n = omp_clauses->lists[OMP_LIST_LASTPRIVATE]; n; n = n->next)
+     n->sym->data_mark = 0;
+   for (n = omp_clauses->lists[OMP_LIST_LASTPRIVATE]; n; n = n->next)
+     {
+       if (n->sym->data_mark || n->sym->gen_mark || n->sym->dev_mark)
+ 	gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		   n->sym->name, &n->where);
+       else
+ 	n->sym->data_mark = 1;
+     }
+ 
+   /* ALIGNED clauses.  */
+   for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
+     n->sym->mark = 0;
+ 
+   for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
+     {
+       if (n->sym->mark)
+ 	gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		   n->sym->name, &n->where);
+       else
+ 	n->sym->mark = 1;
+     }
+ 
+   /* FROM and TO clauses.  */
+   for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
+     n->sym->mark = 0;
+   for (n = omp_clauses->lists[OMP_LIST_FROM]; n; n = n->next)
+     if (n->expr == NULL)
+       n->sym->mark = 1;
+   for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
+     {
+       if (n->expr == NULL && n->sym->mark)
+ 	gfc_error ("Symbol %qs present on both FROM and TO clauses at %L",
+ 		   n->sym->name, &n->where);
+       else
+ 	n->sym->mark = 1;
+     }
+ 
+   /* OpenACC reductions.  */
+   if (openacc)
+     {
+       for (n = omp_clauses->lists[OMP_LIST_REDUCTION]; n; n = n->next)
+ 	n->sym->mark = 0;
+       for (n = omp_clauses->lists[OMP_LIST_REDUCTION]; n; n = n->next)
+ 	{
+ 	  if (n->sym->mark)
+ 	    gfc_error ("Symbol %qs present on multiple clauses at %L",
+ 		       n->sym->name, &n->where);
+ 	  else
+ 	    n->sym->mark = 1;
+ 
+ 	  /* OpenACC does not support reductions on arrays.  */
+ 	  if (n->sym->as)
+ 	    gfc_error ("Array %qs is not permitted in reduction at %L",
+ 		       n->sym->name, &n->where);
+ 	}
+     }
+ }
+ 
+ /* OpenMP/OpenACC: Resolve the list item of a MAP, TO, FROM, CACHE, AFFINITY
+    or DEPEND clause.  */
+ 
+ static void
+ resolve_omp_clauses_aff_dep_map_cache (gfc_code *code,
+ 				       gfc_omp_namelist *n,
+ 				       const char *name,
+ 				       enum gfc_omp_list_type list,
+ 				       gfc_omp_clauses *omp_clauses,
+ 				       bool openacc)
+ {
+   gcc_checking_assert (list == OMP_LIST_AFFINITY || list == OMP_LIST_DEPEND
+ 		       || list == OMP_LIST_MAP || list == OMP_LIST_TO
+ 		       || list == OMP_LIST_FROM || list == OMP_LIST_CACHE);
+ 
+   if (list != OMP_LIST_CACHE && n->u2.ns && !n->u2.ns->resolved)
+     {
+       n->u2.ns->resolved = 1;
+       for (gfc_symbol *sym = n->u2.ns->omp_affinity_iterators;
+ 	   sym; sym = sym->tlink)
+ 	{
+ 	  gfc_constructor *c;
+ 	  c = gfc_constructor_first (sym->value->value.constructor);
+ 	  if (!gfc_resolve_expr (c->expr)
+ 	      || c->expr->ts.type != BT_INTEGER
+ 	      || c->expr->rank != 0)
+ 	    gfc_error ("Scalar integer expression for range begin expected "
+ 		       "at %L", &c->expr->where);
+ 	  c = gfc_constructor_next (c);
+ 	  if (!gfc_resolve_expr (c->expr)
+ 	      || c->expr->ts.type != BT_INTEGER
+ 	      || c->expr->rank != 0)
+ 	    gfc_error ("Scalar integer expression for range end expected at %L",
+ 		       &c->expr->where);
+ 	  c = gfc_constructor_next (c);
+ 	  if (c && (!gfc_resolve_expr (c->expr)
+ 		    || c->expr->ts.type != BT_INTEGER
+ 		    || c->expr->rank != 0))
+ 	    gfc_error ("Scalar integer expression for range step expected "
+ 		       "at %L", &c->expr->where);
+ 	  else if (c
+ 		   && c->expr->expr_type == EXPR_CONSTANT
+ 		   && mpz_cmp_si (c->expr->value.integer, 0) == 0)
+ 	    gfc_error ("Nonzero range step expected at %L", &c->expr->where);
+ 	}
+     }
+   if (list == OMP_LIST_DEPEND)
+     {
+       if (n->u.depend_doacross_op == OMP_DEPEND_SINK_FIRST
+ 	  || n->u.depend_doacross_op == OMP_DOACROSS_SINK_FIRST
+ 	  || n->u.depend_doacross_op == OMP_DOACROSS_SINK)
+ 	{
+ 	  if (omp_clauses->doacross_source)
+ 	    {
+ 	      gfc_error ("Dependence-type SINK used together with SOURCE on "
+ 			 "the same construct at %L", &n->where);
+ 	      omp_clauses->doacross_source = false;
+ 	    }
+ 	  else if (n->expr)
+ 	    {
+ 	      if (!gfc_resolve_expr (n->expr)
+ 		  || n->expr->ts.type != BT_INTEGER
+ 		  || n->expr->rank != 0)
+ 		gfc_error ("SINK addend not a constant integer at %L",
+ 			   &n->where);
+ 	    }
+ 	  if (n->sym == NULL
+ 	      && (n->expr == NULL
+ 		  || mpz_cmp_si (n->expr->value.integer, -1) != 0))
+ 	    gfc_error ("omp_cur_iteration at %L requires %<-1%> as "
+ 		       "logical offset", &n->where);
+ 	  return;
+ 	}
+       if (n->u.depend_doacross_op == OMP_DEPEND_DEPOBJ
+ 	  && !n->expr
+ 	  && (n->sym->ts.type != BT_INTEGER
+ 	      || n->sym->ts.kind != 2 * gfc_index_integer_kind
+ 	      || n->sym->attr.dimension))
+ 	gfc_error ("Locator %qs at %L in DEPEND clause of depobj type shall be "
+ 		   "a scalar integer of OMP_DEPEND_KIND kind",
+ 		   n->sym->name, &n->where);
+       else if (n->u.depend_doacross_op == OMP_DEPEND_DEPOBJ
+ 	       && n->expr
+ 	       && (!gfc_resolve_expr (n->expr)
+ 		   || n->expr->ts.type != BT_INTEGER
+ 		   || n->expr->ts.kind != 2 * gfc_index_integer_kind
+ 		   || n->expr->rank != 0))
+ 	gfc_error ("Locator at %L in DEPEND clause of depobj type shall be a "
+ 		   "scalar integer of OMP_DEPEND_KIND kind", &n->expr->where);
+     }
+   gfc_ref *lastref = NULL, *lastslice = NULL;
+   bool resolved = false;
+   if (n->expr)
+     {
+       lastref = n->expr->ref;
+       resolved = gfc_resolve_expr (n->expr);
+ 
+       /* Look through component refs to find last array reference.  */
+       if (resolved)
+ 	{
+ 	  for (gfc_ref *ref = n->expr->ref; ref; ref = ref->next)
+ 	    if (ref->type == REF_COMPONENT
+ 		|| ref->type == REF_SUBSTRING
+ 		|| ref->type == REF_INQUIRY)
+ 	      lastref = ref;
+ 	    else if (ref->type == REF_ARRAY)
+ 	      {
+ 		for (int i = 0; i < ref->u.ar.dimen; i++)
+ 		  if (ref->u.ar.dimen_type[i] == DIMEN_RANGE)
+ 		    lastslice = ref;
+ 		lastref = ref;
+ 	      }
+ 
+ 	  /* The "!$acc cache" directive allows rectangular subarrays to be
+ 	      specified, with some restrictions on the form of bounds (not
+ 	      implemented).  Only raise an error here if we're really sure the
+ 	      array isn't contiguous.  An expression such as arr(-n:n,-n:n)
+ 	      could be contiguous even if it looks like it may not be.  */
+ 	  if (code
+ 	      && code->op != EXEC_OACC_UPDATE
+ 	      && list != OMP_LIST_CACHE
+ 	      && list != OMP_LIST_DEPEND
+ 	      && !gfc_is_simply_contiguous (n->expr, false, true)
+ 	      && gfc_is_not_contiguous (n->expr)
+ 	      && !(lastslice && (lastslice->next
+ 				 || lastslice->type != REF_ARRAY)))
+ 	    gfc_error ("Array is not contiguous at %L", &n->where);
+ 	}
+     }
+   if (list == OMP_LIST_MAP
+       && (n->sym->attr.omp_groupprivate
+ 	  || n->sym->attr.omp_declare_target_local))
+     gfc_error ("%qs argument to MAP clause at %L must not be a device-local "
+ 	       "variable, including GROUPPRIVATE", n->sym->name, &n->where);
+   if (openacc
+       && list == OMP_LIST_MAP
+       && (n->u.map.op == OMP_MAP_ATTACH || n->u.map.op == OMP_MAP_DETACH))
+     {
+       symbol_attribute attr;
+       if (n->expr)
+ 	attr = gfc_expr_attr (n->expr);
+       else
+ 	attr = n->sym->attr;
+       if (!attr.pointer && !attr.allocatable)
+ 	gfc_error ("%qs clause argument must be ALLOCATABLE or a POINTER at %L",
+ 		   (n->u.map.op == OMP_MAP_ATTACH) ? "attach" : "detach",
+ 		   &n->where);
+     }
+   if (lastref
+       || (n->expr && (!resolved || n->expr->expr_type != EXPR_VARIABLE)))
+     {
+       if (!lastslice && lastref && lastref->type == REF_SUBSTRING)
+ 	gfc_error ("Unexpected substring reference in %s clause at %L",
+ 		   name, &n->where);
+       else if (!lastslice && lastref && lastref->type == REF_INQUIRY)
+ 	{
+ 	  gcc_assert (lastref->u.i == INQUIRY_RE || lastref->u.i == INQUIRY_IM);
+ 	  gfc_error ("Unexpected complex-parts designator reference in %s "
+ 		     "clause at %L", name, &n->where);
+ 	}
+       else if (!resolved
+ 	       || n->expr->expr_type != EXPR_VARIABLE
+ 	       || (lastslice
+ 		   && (lastslice->next || lastslice->type != REF_ARRAY)))
+ 	gfc_error ("%qs in %s clause at %L is not a proper array section",
+ 		       n->sym->name, name, &n->where);
+       else if (lastslice)
+ 	{
+ 	  int i;
+ 	  gfc_array_ref *ar = &lastslice->u.ar;
+ 	  for (i = 0; i < ar->dimen; i++)
+ 	    if (ar->stride[i] && code && code->op != EXEC_OACC_UPDATE)
+ 	      {
+ 		gfc_error ("Stride should not be specified for array section "
+ 			   "in %s clause at %L", name, &n->where);
+ 		break;
+ 	      }
+ 	    else if (ar->dimen_type[i] != DIMEN_ELEMENT
+ 			 && ar->dimen_type[i] != DIMEN_RANGE)
+ 	      {
+ 		gfc_error ("%qs in %s clause at %L is not a proper array "
+ 			   "section", n->sym->name, name, &n->where);
+ 		break;
+ 	      }
+ 	    else if ((list == OMP_LIST_DEPEND || list == OMP_LIST_AFFINITY)
+ 		     && ar->start[i]
+ 		     && ar->start[i]->expr_type == EXPR_CONSTANT
+ 		     && ar->end[i]
+ 		     && ar->end[i]->expr_type == EXPR_CONSTANT
+ 		     && mpz_cmp (ar->start[i]->value.integer,
+ 				 ar->end[i]->value.integer) > 0)
+ 	      {
+ 		gfc_error ("%qs in %s clause at %L is a zero size array "
+ 			   "section", n->sym->name,
+ 			   list == OMP_LIST_DEPEND ? "DEPEND" : "AFFINITY",
+ 			   &n->where);
+ 		break;
+ 	      }
+ 	}
+     }
+   else if (openacc)
+     {
+       if (list == OMP_LIST_MAP && n->u.map.op == OMP_MAP_FORCE_DEVICEPTR)
+ 	resolve_oacc_deviceptr_clause (n->sym, n->where, name);
+       else
+ 	resolve_oacc_data_clauses (n->sym, n->where, name);
+     }
+   else if (list != OMP_LIST_DEPEND
+ 	       && n->sym->as
+ 	       && n->sym->as->type == AS_ASSUMED_SIZE)
+     gfc_error ("Assumed size array %qs in %s clause at %L",
+ 		   n->sym->name, name, &n->where);
+   if (code && list == OMP_LIST_MAP && !openacc)
+     switch (code->op)
+       {
+       case EXEC_OMP_TARGET:
+       case EXEC_OMP_TARGET_PARALLEL:
+       case EXEC_OMP_TARGET_PARALLEL_DO:
+       case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TARGET_PARALLEL_LOOP:
+       case EXEC_OMP_TARGET_SIMD:
+       case EXEC_OMP_TARGET_TEAMS:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
+       case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
+       case EXEC_OMP_TARGET_TEAMS_LOOP:
+       case EXEC_OMP_TARGET_DATA:
+ 	    switch (n->u.map.op)
+ 	      {
+ 	      case OMP_MAP_TO:
+ 	      case OMP_MAP_ALWAYS_TO:
+ 	      case OMP_MAP_PRESENT_TO:
+ 	      case OMP_MAP_ALWAYS_PRESENT_TO:
+ 	      case OMP_MAP_FROM:
+ 	      case OMP_MAP_ALWAYS_FROM:
+ 	      case OMP_MAP_PRESENT_FROM:
+ 	      case OMP_MAP_ALWAYS_PRESENT_FROM:
+ 	      case OMP_MAP_TOFROM:
+ 	      case OMP_MAP_ALWAYS_TOFROM:
+ 	      case OMP_MAP_PRESENT_TOFROM:
+ 	      case OMP_MAP_ALWAYS_PRESENT_TOFROM:
+ 	      case OMP_MAP_ALLOC:
+ 	      case OMP_MAP_PRESENT_ALLOC:
+ 			  break;
+ 	      default:
+ 			  gfc_error ("TARGET%s with map-type other than TO, "
+ 				     "FROM, TOFROM, or ALLOC on MAP clause "
+ 				     "at %L",
+ 				     code->op == EXEC_OMP_TARGET_DATA
+ 				     ? " DATA" : "", &n->where);
+ 			  break;
+ 	      }
+ 	    break;
+       case EXEC_OMP_TARGET_ENTER_DATA:
+ 	    switch (n->u.map.op)
+ 	      {
+ 	      case OMP_MAP_TO:
+ 	      case OMP_MAP_ALWAYS_TO:
+ 	      case OMP_MAP_PRESENT_TO:
+ 	      case OMP_MAP_ALWAYS_PRESENT_TO:
+ 	      case OMP_MAP_ALLOC:
+ 	      case OMP_MAP_PRESENT_ALLOC:
+ 			  break;
+ 	      case OMP_MAP_TOFROM:
+ 			  n->u.map.op = OMP_MAP_TO;
+ 			  break;
+ 	      case OMP_MAP_ALWAYS_TOFROM:
+ 			  n->u.map.op = OMP_MAP_ALWAYS_TO;
+ 			  break;
+ 	      case OMP_MAP_PRESENT_TOFROM:
+ 			  n->u.map.op = OMP_MAP_PRESENT_TO;
+ 			  break;
+ 	      case OMP_MAP_ALWAYS_PRESENT_TOFROM:
+ 			  n->u.map.op = OMP_MAP_ALWAYS_PRESENT_TO;
+ 			  break;
+ 	      default:
+ 			  gfc_error ("TARGET ENTER DATA with map-type other "
+ 				     "than TO, TOFROM or ALLOC on MAP clause "
+ 				     "at %L", &n->where);
+ 			  break;
+ 	      }
+ 	    break;
+       case EXEC_OMP_TARGET_EXIT_DATA:
+ 	    switch (n->u.map.op)
+ 	      {
+ 	      case OMP_MAP_FROM:
+ 	      case OMP_MAP_ALWAYS_FROM:
+ 	      case OMP_MAP_PRESENT_FROM:
+ 	      case OMP_MAP_ALWAYS_PRESENT_FROM:
+ 	      case OMP_MAP_RELEASE:
+ 	      case OMP_MAP_DELETE:
+ 			  break;
+ 	      case OMP_MAP_TOFROM:
+ 			  n->u.map.op = OMP_MAP_FROM;
+ 			  break;
+ 	      case OMP_MAP_ALWAYS_TOFROM:
+ 			  n->u.map.op = OMP_MAP_ALWAYS_FROM;
+ 			  break;
+ 	      case OMP_MAP_PRESENT_TOFROM:
+ 			  n->u.map.op = OMP_MAP_PRESENT_FROM;
+ 			  break;
+ 	      case OMP_MAP_ALWAYS_PRESENT_TOFROM:
+ 			  n->u.map.op = OMP_MAP_ALWAYS_PRESENT_FROM;
+ 			  break;
+ 	      default:
+ 			  gfc_error ("TARGET EXIT DATA with map-type other "
+ 				     "than FROM, TOFROM, RELEASE, or DELETE on "
+ 				     "MAP clause at %L", &n->where);
+ 			  break;
+ 	      }
+ 	    break;
+       default:
+ 	    break;
+       }
+   if (list == OMP_LIST_MAP || list == OMP_LIST_TO || list == OMP_LIST_FROM)
+     {
+       gfc_typespec *ts = n->expr ? &n->expr->ts : &n->sym->ts;
+ 
+       if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
+ 	{
+ 	  const char *mapper_id = (n->u3.udm
+ 				   ? n->u3.udm->requested_mapper_id : "");
+ 	  gfc_omp_udm *udm = gfc_find_omp_udm (gfc_current_ns, mapper_id, ts);
+ 	  if (mapper_id[0] != '\0' && !udm)
+ 	    gfc_error ("User-defined mapper %qs not found at %L",
+ 		       mapper_id, &n->where);
+ 	  else if (udm)
+ 	    {
+ 	      if (!n->u3.udm)
+ 		{
+ 		  gcc_assert (mapper_id[0] == '\0');
+ 		  n->u3.udm = gfc_get_omp_namelist_udm ();
+ 		  n->u3.udm->requested_mapper_id = mapper_id;
+ 		}
+ 	      n->u3.udm->resolved_udm = udm;
+ 	    }
+ 	}
+     }
+ 
+   if (list != OMP_LIST_DEPEND)
+     {
+       n->sym->attr.referenced = 1;
+       if (n->sym->attr.threadprivate)
+ 	gfc_error ("THREADPRIVATE object %qs in %s clause at %L",
+ 		   n->sym->name, name, &n->where);
+       if (n->sym->attr.cray_pointee)
+ 	gfc_error ("Cray pointee %qs in %s clause at %L",
+ 		   n->sym->name, name, &n->where);
+     }
+ }
+ 
  /* OpenMP directive resolving routines.  */
  
  static void
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9294,9299 ****
--- 10101,10108 ----
    if (ns == NULL)
      ns = gfc_current_ns;
  
+   check_omp_clauses_dupl_syms (code, omp_clauses, openacc);
+ 
    if (omp_clauses->orderedc && omp_clauses->orderedc < omp_clauses->collapse)
      gfc_error ("ORDERED clause parameter is less than COLLAPSE at %L",
  	       &code->loc);
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9524,9543 ****
      gfc_error ("DEPOBJ in DEPOBJ construct at %L shall be a scalar integer "
  	       "of OMP_DEPEND_KIND kind", &omp_clauses->depobj->where);
  
!   /* Check that no symbol appears on multiple clauses, except that
!      a symbol can appear on both firstprivate and lastprivate.  */
    for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
         list = gfc_omp_list_type (list + 1))
      for (n = omp_clauses->lists[list]; n; n = n->next)
        {
  	if (!n->sym)  /* omp_all_memory.  */
  	  continue;
- 	n->sym->mark = 0;
- 	n->sym->comp_mark = 0;
- 	n->sym->data_mark = 0;
- 	n->sym->dev_mark = 0;
- 	n->sym->gen_mark = 0;
- 	n->sym->reduc_mark = 0;
  	if (n->sym->attr.flavor == FL_VARIABLE
  	    || n->sym->attr.proc_pointer
  	    || (!code
--- 10333,10345 ----
      gfc_error ("DEPOBJ in DEPOBJ construct at %L shall be a scalar integer "
  	       "of OMP_DEPEND_KIND kind", &omp_clauses->depobj->where);
  
!   /* Check that list items are variables.  */
    for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
         list = gfc_omp_list_type (list + 1))
      for (n = omp_clauses->lists[list]; n; n = n->next)
        {
  	if (!n->sym)  /* omp_all_memory.  */
  	  continue;
  	if (n->sym->attr.flavor == FL_VARIABLE
  	    || n->sym->attr.proc_pointer
  	    || (!code
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9600,9605 ****
--- 10402,10408 ----
  	  gfc_error ("Object %qs is not a variable at %L", n->sym->name,
  		     &n->where);
        }
+ 
    if (omp_clauses->lists[OMP_LIST_REDUCTION_INSCAN])
      {
        locus *loc = &omp_clauses->lists[OMP_LIST_REDUCTION_INSCAN]->where;
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9619,9709 ****
  		   "REDUCTION clause at %L", loc);
      }
  
-   for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
-        list = gfc_omp_list_type (list + 1))
-     if (list != OMP_LIST_FIRSTPRIVATE
- 	&& list != OMP_LIST_LASTPRIVATE
- 	&& list != OMP_LIST_ALIGNED
- 	&& list != OMP_LIST_DEPEND
- 	&& list != OMP_LIST_FROM
- 	&& list != OMP_LIST_TO
- 	&& list != OMP_LIST_INTEROP
- 	&& (list != OMP_LIST_REDUCTION || !openacc)
- 	&& list != OMP_LIST_ALLOCATE)
-       for (n = omp_clauses->lists[list]; n; n = n->next)
- 	{
- 	  bool component_ref_p = false;
- 
- 	  /* Allow multiple components of the same (e.g. derived-type)
- 	     variable here.  Duplicate components are detected elsewhere.  */
- 	  if (n->expr && n->expr->expr_type == EXPR_VARIABLE)
- 	    for (gfc_ref *ref = n->expr->ref; ref; ref = ref->next)
- 	      if (ref->type == REF_COMPONENT)
- 		component_ref_p = true;
- 	  if ((list == OMP_LIST_IS_DEVICE_PTR
- 	       || list == OMP_LIST_HAS_DEVICE_ADDR)
- 	      && !component_ref_p)
- 	    {
- 	      if (n->sym->gen_mark
- 		  || n->sym->dev_mark
- 		  || n->sym->reduc_mark
- 		  || n->sym->mark)
- 		gfc_error ("Symbol %qs present on multiple clauses at %L",
- 			   n->sym->name, &n->where);
- 	      else
- 		n->sym->dev_mark = 1;
- 	    }
- 	  else if ((list == OMP_LIST_USE_DEVICE_PTR
- 		    || list == OMP_LIST_USE_DEVICE_ADDR
- 		    || list == OMP_LIST_PRIVATE
- 		    || list == OMP_LIST_SHARED)
- 		   && !component_ref_p)
- 	    {
- 	      if (n->sym->gen_mark || n->sym->dev_mark || n->sym->reduc_mark)
- 		gfc_error ("Symbol %qs present on multiple clauses at %L",
- 			   n->sym->name, &n->where);
- 	      else
- 		{
- 		  n->sym->gen_mark = 1;
- 		  /* Set both generic and device bits if we have
- 		     use_device_*(x) or shared(x).  This allows us to diagnose
- 		     "map(x) private(x)" below.  */
- 		  if (list != OMP_LIST_PRIVATE)
- 		    n->sym->dev_mark = 1;
- 		}
- 	    }
- 	  else if ((list == OMP_LIST_REDUCTION
- 		    || list == OMP_LIST_REDUCTION_TASK
- 		    || list == OMP_LIST_REDUCTION_INSCAN
- 		    || list == OMP_LIST_IN_REDUCTION
- 		    || list == OMP_LIST_TASK_REDUCTION)
- 		   && !component_ref_p)
- 	    {
- 	      /* Attempts to mix reduction types are diagnosed below.  */
- 	      if (n->sym->gen_mark || n->sym->dev_mark)
- 		gfc_error ("Symbol %qs present on multiple clauses at %L",
- 			   n->sym->name, &n->where);
- 	      n->sym->reduc_mark = 1;
- 	    }
- 	  else if ((!component_ref_p && n->sym->comp_mark)
- 		   || (component_ref_p && n->sym->mark))
- 	    {
- 	      if (openacc)
- 		gfc_error ("Symbol %qs has mixed component and non-component "
- 			   "accesses at %L", n->sym->name, &n->where);
- 	    }
- 	  else if ((openacc || list != OMP_LIST_MAP) && n->sym->mark)
- 	    gfc_error ("Symbol %qs present on multiple clauses at %L",
- 		       n->sym->name, &n->where);
- 	  else
- 	    {
- 	      if (component_ref_p)
- 		n->sym->comp_mark = 1;
- 	      else
- 		n->sym->mark = 1;
- 	    }
- 	}
- 
    if (code
        && code->op == EXEC_OMP_INTEROP
        && omp_clauses->lists[OMP_LIST_DEPEND])
--- 10422,10427 ----
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 9744,10081 ****
  		       n->sym->name, &n->where, clause_names[list]);
  	}
  
!   /* Detect specifically the case where we have "map(x) private(x)" and raise
!      an error.  If we have "...simd" combined directives though, the "private"
!      applies to the simd part, so this is permitted though.  */
!   for (n = omp_clauses->lists[OMP_LIST_PRIVATE]; n; n = n->next)
!     if (n->sym->mark
! 	&& n->sym->gen_mark
! 	&& !n->sym->dev_mark
! 	&& !n->sym->reduc_mark
! 	&& code->op != EXEC_OMP_TARGET_SIMD
! 	&& code->op != EXEC_OMP_TARGET_PARALLEL_DO_SIMD
! 	&& code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD
! 	&& code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD)
!       gfc_error ("Symbol %qs present on multiple clauses at %L",
! 		 n->sym->name, &n->where);
! 
!   gcc_assert (OMP_LIST_LASTPRIVATE == OMP_LIST_FIRSTPRIVATE + 1);
!   for (list = OMP_LIST_FIRSTPRIVATE; list <= OMP_LIST_LASTPRIVATE;
!        list = gfc_omp_list_type (list + 1))
!     for (n = omp_clauses->lists[list]; n; n = n->next)
!       if (n->sym->data_mark || n->sym->gen_mark || n->sym->dev_mark)
! 	{
! 	  gfc_error ("Symbol %qs present on multiple clauses at %L",
! 		     n->sym->name, &n->where);
! 	  n->sym->data_mark = n->sym->gen_mark = n->sym->dev_mark = 0;
! 	}
!       else if (n->sym->mark
! 	       && code->op != EXEC_OMP_TARGET_TEAMS
! 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE
! 	       && code->op != EXEC_OMP_TARGET_TEAMS_LOOP
! 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD
! 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO
! 	       && code->op != EXEC_OMP_TARGET_PARALLEL
! 	       && code->op != EXEC_OMP_TARGET_PARALLEL_DO
! 	       && code->op != EXEC_OMP_TARGET_PARALLEL_LOOP
! 	       && code->op != EXEC_OMP_TARGET_PARALLEL_DO_SIMD
! 	       && code->op != EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD)
! 	gfc_error ("Symbol %qs present on both data and map clauses "
! 		   "at %L", n->sym->name, &n->where);
! 
!   for (n = omp_clauses->lists[OMP_LIST_FIRSTPRIVATE]; n; n = n->next)
!     {
!       if (n->sym->data_mark || n->sym->gen_mark || n->sym->dev_mark)
! 	gfc_error ("Symbol %qs present on multiple clauses at %L",
! 		   n->sym->name, &n->where);
!       else
! 	n->sym->data_mark = 1;
!     }
!   for (n = omp_clauses->lists[OMP_LIST_LASTPRIVATE]; n; n = n->next)
!     n->sym->data_mark = 0;
! 
!   for (n = omp_clauses->lists[OMP_LIST_LASTPRIVATE]; n; n = n->next)
!     {
!       if (n->sym->data_mark || n->sym->gen_mark || n->sym->dev_mark)
! 	gfc_error ("Symbol %qs present on multiple clauses at %L",
! 		   n->sym->name, &n->where);
!       else
! 	n->sym->data_mark = 1;
!     }
! 
!   for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
!     n->sym->mark = 0;
! 
!   for (n = omp_clauses->lists[OMP_LIST_ALIGNED]; n; n = n->next)
!     {
!       if (n->sym->mark)
! 	gfc_error ("Symbol %qs present on multiple clauses at %L",
! 		   n->sym->name, &n->where);
!       else
! 	n->sym->mark = 1;
!     }
! 
!   if (omp_clauses->lists[OMP_LIST_ALLOCATE])
!     {
!       for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
! 	{
! 	  if (n->u2.allocator
! 	      && (!gfc_resolve_expr (n->u2.allocator)
! 		  || n->u2.allocator->ts.type != BT_INTEGER
! 		  || n->u2.allocator->rank != 0
! 		  || n->u2.allocator->ts.kind != gfc_c_intptr_kind))
! 	    {
! 	      gfc_error ("Expected integer expression of the "
! 			 "%<omp_allocator_handle_kind%> kind at %L",
! 			 &n->u2.allocator->where);
! 	      break;
! 	    }
! 	  if (!n->u.align)
! 	    continue;
! 	  HOST_WIDE_INT alignment = 0;
! 	  if (!gfc_resolve_expr (n->u.align)
! 	      || n->u.align->ts.type != BT_INTEGER
! 	      || n->u.align->rank != 0
! 	      || n->u.align->expr_type != EXPR_CONSTANT
! 	      || gfc_extract_hwi (n->u.align, &alignment)
! 	      || alignment <= 0
! 	      || !pow2p_hwi (alignment))
! 	    {
! 	      gfc_error ("ALIGN requires a scalar positive constant integer "
! 			 "alignment expression at %L that is a power of two",
! 			 &n->u.align->where);
! 	      break;
! 	    }
! 	}
! 
!       /* Check for 2 things here.
! 	 1.  There is no duplication of variable in allocate clause.
! 	 2.  Variable in allocate clause are also present in some
! 	     privatization clase (non-composite case).  */
!       for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
! 	if (n->sym)
! 	  n->sym->mark = 0;
! 
!       gfc_omp_namelist *prev = NULL;
!       for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; )
! 	{
! 	  if (n->sym == NULL)
! 	    {
! 	      n = n->next;
! 	      continue;
! 	    }
! 	  if (n->sym->mark == 1)
! 	    {
! 	      gfc_warning (OPT_Wopenmp, "%qs appears more than once in "
! 			   "%<allocate%> at %L" , n->sym->name, &n->where);
! 	      /* We have already seen this variable so it is a duplicate.
! 		 Remove it.  */
! 	      if (prev != NULL && prev->next == n)
! 		{
! 		  prev->next = n->next;
! 		  n->next = NULL;
! 		  gfc_free_omp_namelist (n, OMP_LIST_ALLOCATE);
! 		  n = prev->next;
! 		}
! 	      continue;
! 	    }
! 	  n->sym->mark = 1;
! 	  prev = n;
! 	  n = n->next;
! 	}
! 
!       /* Non-composite constructs.  */
!       if (code && code->op < EXEC_OMP_DO_SIMD)
! 	{
! 	  for (list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
! 	       list = gfc_omp_list_type (list + 1))
! 	    switch (list)
! 	    {
! 	      case OMP_LIST_PRIVATE:
! 	      case OMP_LIST_FIRSTPRIVATE:
! 	      case OMP_LIST_LASTPRIVATE:
! 	      case OMP_LIST_REDUCTION:
! 	      case OMP_LIST_REDUCTION_INSCAN:
! 	      case OMP_LIST_REDUCTION_TASK:
! 	      case OMP_LIST_IN_REDUCTION:
! 	      case OMP_LIST_TASK_REDUCTION:
! 	      case OMP_LIST_LINEAR:
! 		for (n = omp_clauses->lists[list]; n; n = n->next)
! 		  n->sym->mark = 0;
! 		break;
! 	      default:
! 		break;
! 	    }
! 
! 	  for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
! 	    if (n->sym->mark == 1)
! 	      gfc_error ("%qs specified in %<allocate%> clause at %L but not "
! 			 "in an explicit privatization clause",
! 			 n->sym->name, &n->where);
! 	}
!       if (code
! 	  && (code->op == EXEC_OMP_ALLOCATORS || code->op == EXEC_OMP_ALLOCATE)
! 	  && code->block
! 	  && 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;
! 	  gfc_symbol *missing_allocator_sym = NULL;
! 	  for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
! 	    {
! 	      if (n->u2.allocator == NULL)
! 		{
! 		  if (!missing_allocator_sym)
! 		    missing_allocator_sym = n->sym;
! 		  missing_allocator = true;
! 		}
! 	      if (n->sym == NULL)
! 		{
! 		  n_null = n;
! 		  continue;
! 		}
! 	      if (n->sym->attr.codimension)
! 		gfc_error ("Unexpected coarray %qs in %<allocate%> at %L",
! 			   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)
! 		      if (ref->type == REF_COMPONENT)
! 			break;
! 		    if (ref == NULL)
! 		      break;
! 		  }
! 	      if (a == NULL)
! 		gfc_error ("%qs specified in %<allocate%> at %L but not "
! 			   "in the associated ALLOCATE statement",
! 			   n->sym->name, &n->where);
! 	    }
! 	  /* If there is an ALLOCATE directive without list argument, a
! 	     namelist with its allocator/align clauses and n->sym = NULL is
! 	     created during parsing; here, we add all not otherwise specified
! 	     items from the Fortran allocate to that list.
! 	     For an ALLOCATORS directive, not listed items use the normal
! 	     Fortran way.
! 	     The behavior of an ALLOCATE directive that does not list all
! 	     arguments but there is no directive without list argument is not
! 	     well specified.  Thus, we reject such code below. In OpenMP 5.2
! 	     the executable ALLOCATE directive is deprecated and in 6.0
! 	     deleted such that no spec clarification is to be expected.  */
! 	  for (a = code->block->next->ext.alloc.list; a; a = a->next)
! 	    if (a->expr->expr_type == EXPR_VARIABLE)
! 	      {
! 		for (n = omp_clauses->lists[OMP_LIST_ALLOCATE]; n; n = n->next)
! 		  if (a->expr->symtree->n.sym == n->sym)
! 		    {
! 		      gfc_ref *ref;
! 		      for (ref = a->expr->ref; ref; ref = ref->next)
! 			if (ref->type == REF_COMPONENT)
! 			  break;
! 		      if (ref == NULL)
! 			break;
! 		    }
! 		if (n == NULL && n_null == NULL)
! 		  {
! 		    /* OK for ALLOCATORS but for ALLOCATE: Unspecified whether
! 		       that should use the default allocator of OpenMP or the
! 		       Fortran allocator. Thus, just reject it.  */
! 		    if (code->op == EXEC_OMP_ALLOCATE)
! 		      gfc_error ("%qs listed in %<allocate%> statement at %L "
! 				 "but it is neither explicitly in listed in "
! 				 "the %<!$OMP ALLOCATE%> directive nor exists"
! 				 " a directive without argument list",
! 				 a->expr->symtree->n.sym->name,
! 				 &a->expr->where);
! 		    break;
! 		  }
! 		if (n == NULL)
! 		  {
! 		    if (a->expr->symtree->n.sym->attr.codimension)
! 		      gfc_error ("Unexpected coarray %qs in %<allocate%> at "
! 				 "%L, implicitly listed in %<!$OMP ALLOCATE%>"
! 				 " at %L", a->expr->symtree->n.sym->name,
! 				 &a->expr->where, &n_null->where);
! 		    break;
! 		  }
! 	    }
! 	  gfc_namespace *prog_unit = ns;
! 	  while (prog_unit->parent)
! 	    prog_unit = prog_unit->parent;
! 	  gfc_namespace *fn_ns = ns;
! 	  while (fn_ns)
! 	    {
! 	      if (ns->proc_name
! 		  && (ns->proc_name->attr.subroutine
! 		      || ns->proc_name->attr.function))
! 		break;
! 	      fn_ns = fn_ns->parent;
! 	    }
! 	  if (missing_allocator
! 	      && !(prog_unit->omp_requires & OMP_REQ_DYNAMIC_ALLOCATORS)
! 	      && ((fn_ns && fn_ns->proc_name->attr.omp_declare_target)
! 		  || omp_clauses->contained_in_target_construct))
! 	    {
! 	      if (code->op == EXEC_OMP_ALLOCATORS)
! 		gfc_error ("ALLOCATORS directive at %L inside a target region "
! 			   "must specify an ALLOCATOR modifier for %qs",
! 			   &code->loc, missing_allocator_sym->name);
! 	      else if (missing_allocator_sym)
! 		gfc_error ("ALLOCATE directive at %L inside a target region "
! 			   "must specify an ALLOCATOR clause for %qs",
! 			   &code->loc, missing_allocator_sym->name);
! 	      else
! 		gfc_error ("ALLOCATE directive at %L inside a target region "
! 			   "must specify an ALLOCATOR clause", &code->loc);
! 	    }
! 
! 	}
!     }
! 
!   /* OpenACC reductions.  */
!   if (openacc)
!     {
!       for (n = omp_clauses->lists[OMP_LIST_REDUCTION]; n; n = n->next)
! 	n->sym->mark = 0;
! 
!       for (n = omp_clauses->lists[OMP_LIST_REDUCTION]; n; n = n->next)
! 	{
! 	  if (n->sym->mark)
! 	    gfc_error ("Symbol %qs present on multiple clauses at %L",
! 		       n->sym->name, &n->where);
! 	  else
! 	    n->sym->mark = 1;
! 
! 	  /* OpenACC does not support reductions on arrays.  */
! 	  if (n->sym->as)
! 	    gfc_error ("Array %qs is not permitted in reduction at %L",
! 		       n->sym->name, &n->where);
! 	}
!     }
! 
!   for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
!     n->sym->mark = 0;
!   for (n = omp_clauses->lists[OMP_LIST_FROM]; n; n = n->next)
!     if (n->expr == NULL)
!       n->sym->mark = 1;
!   for (n = omp_clauses->lists[OMP_LIST_TO]; n; n = n->next)
!     {
!       if (n->expr == NULL && n->sym->mark)
! 	gfc_error ("Symbol %qs present on both FROM and TO clauses at %L",
! 		   n->sym->name, &n->where);
!       else
! 	n->sym->mark = 1;
!     }
  
    bool has_inscan = false, has_notinscan = false;
    for (enum gfc_omp_list_type list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
--- 10462,10468 ----
  		       n->sym->name, &n->where, clause_names[list]);
  	}
  
!   resolve_omp_allocate_clauses (code, omp_clauses, ns);
  
    bool has_inscan = false, has_notinscan = false;
    for (enum gfc_omp_list_type list = OMP_LIST_FIRST; list < OMP_LIST_NUM;
*************** resolve_omp_clauses (gfc_code *code, gfc
*** 10162,10541 ****
  	  case OMP_LIST_FROM:
  	  case OMP_LIST_CACHE:
  	    for (; n != NULL; n = n->next)
! 	      {
! 		if ((list == OMP_LIST_DEPEND || list == OMP_LIST_AFFINITY
! 		     || list == OMP_LIST_MAP
! 		     || list == OMP_LIST_TO || list == OMP_LIST_FROM)
! 		    && n->u2.ns && !n->u2.ns->resolved)
! 		  {
! 		    n->u2.ns->resolved = 1;
! 		    for (gfc_symbol *sym = n->u2.ns->omp_affinity_iterators;
! 			 sym; sym = sym->tlink)
! 		      {
! 			gfc_constructor *c;
! 			c = gfc_constructor_first (sym->value->value.constructor);
! 			if (!gfc_resolve_expr (c->expr)
! 			    || c->expr->ts.type != BT_INTEGER
! 			    || c->expr->rank != 0)
! 			  gfc_error ("Scalar integer expression for range begin"
! 				     " expected at %L", &c->expr->where);
! 			c = gfc_constructor_next (c);
! 			if (!gfc_resolve_expr (c->expr)
! 			    || c->expr->ts.type != BT_INTEGER
! 			    || c->expr->rank != 0)
! 			  gfc_error ("Scalar integer expression for range end "
! 				     "expected at %L", &c->expr->where);
! 			c = gfc_constructor_next (c);
! 			if (c && (!gfc_resolve_expr (c->expr)
! 				  || c->expr->ts.type != BT_INTEGER
! 				  || c->expr->rank != 0))
! 			  gfc_error ("Scalar integer expression for range step "
! 				     "expected at %L", &c->expr->where);
! 			else if (c
! 				 && c->expr->expr_type == EXPR_CONSTANT
! 				 && mpz_cmp_si (c->expr->value.integer, 0) == 0)
! 			  gfc_error ("Nonzero range step expected at %L",
! 				     &c->expr->where);
! 		      }
! 		  }
! 
! 		if (list == OMP_LIST_DEPEND)
! 		  {
! 		    if (n->u.depend_doacross_op == OMP_DEPEND_SINK_FIRST
! 			|| n->u.depend_doacross_op == OMP_DOACROSS_SINK_FIRST
! 			|| n->u.depend_doacross_op == OMP_DOACROSS_SINK)
! 		      {
! 			if (omp_clauses->doacross_source)
! 			  {
! 			    gfc_error ("Dependence-type SINK used together with"
! 				       " SOURCE on the same construct at %L",
! 				       &n->where);
! 			    omp_clauses->doacross_source = false;
! 			  }
! 			else if (n->expr)
! 			  {
! 			    if (!gfc_resolve_expr (n->expr)
! 				|| n->expr->ts.type != BT_INTEGER
! 				|| n->expr->rank != 0)
! 			      gfc_error ("SINK addend not a constant integer "
! 					 "at %L", &n->where);
! 			  }
! 			if (n->sym == NULL
! 			    && (n->expr == NULL
! 				|| mpz_cmp_si (n->expr->value.integer, -1) != 0))
! 			  gfc_error ("omp_cur_iteration at %L requires %<-1%> "
! 				     "as logical offset", &n->where);
! 			continue;
! 		      }
! 		    else if (n->u.depend_doacross_op == OMP_DEPEND_DEPOBJ
! 			     && !n->expr
! 			     && (n->sym->ts.type != BT_INTEGER
! 				 || n->sym->ts.kind
! 				    != 2 * gfc_index_integer_kind
! 				 || n->sym->attr.dimension))
! 		      gfc_error ("Locator %qs at %L in DEPEND clause of depobj "
! 				 "type shall be a scalar integer of "
! 				 "OMP_DEPEND_KIND kind", n->sym->name,
! 				 &n->where);
! 		    else if (n->u.depend_doacross_op == OMP_DEPEND_DEPOBJ
! 			     && n->expr
! 			     && (!gfc_resolve_expr (n->expr)
! 				 || n->expr->ts.type != BT_INTEGER
! 				 || n->expr->ts.kind
! 				    != 2 * gfc_index_integer_kind
! 				 || n->expr->rank != 0))
! 		      gfc_error ("Locator at %L in DEPEND clause of depobj "
! 				 "type shall be a scalar integer of "
! 				 "OMP_DEPEND_KIND kind", &n->expr->where);
! 		  }
! 		gfc_ref *lastref = NULL, *lastslice = NULL;
! 		bool resolved = false;
! 		if (n->expr)
! 		  {
! 		    lastref = n->expr->ref;
! 		    resolved = gfc_resolve_expr (n->expr);
! 
! 		    /* Look through component refs to find last array
! 		       reference.  */
! 		    if (resolved)
! 		      {
! 			for (gfc_ref *ref = n->expr->ref; ref; ref = ref->next)
! 			  if (ref->type == REF_COMPONENT
! 			      || ref->type == REF_SUBSTRING
! 			      || ref->type == REF_INQUIRY)
! 			    lastref = ref;
! 			  else if (ref->type == REF_ARRAY)
! 			    {
! 			      for (int i = 0; i < ref->u.ar.dimen; i++)
! 				if (ref->u.ar.dimen_type[i] == DIMEN_RANGE)
! 				  lastslice = ref;
! 
! 			      lastref = ref;
! 			    }
! 
! 			/* The "!$acc cache" directive allows rectangular
! 			   subarrays to be specified, with some restrictions
! 			   on the form of bounds (not implemented).
! 			   Only raise an error here if we're really sure the
! 			   array isn't contiguous.  An expression such as
! 			   arr(-n:n,-n:n) could be contiguous even if it looks
! 			   like it may not be.  */
! 			if (code
! 			    && code->op != EXEC_OACC_UPDATE
! 			    && list != OMP_LIST_CACHE
! 			    && list != OMP_LIST_DEPEND
! 			    && !gfc_is_simply_contiguous (n->expr, false, true)
! 			    && gfc_is_not_contiguous (n->expr)
! 			    && !(lastslice
! 				 && (lastslice->next
! 				     || lastslice->type != REF_ARRAY)))
! 			  gfc_error ("Array is not contiguous at %L",
! 				     &n->where);
! 		      }
! 		  }
! 		if (list == OMP_LIST_MAP
! 		    && (n->sym->attr.omp_groupprivate
! 			|| n->sym->attr.omp_declare_target_local))
! 		  gfc_error ("%qs argument to MAP clause at %L must not be a "
! 			     "device-local variable, including GROUPPRIVATE",
! 			     n->sym->name, &n->where);
! 		if (openacc
! 		    && list == OMP_LIST_MAP
! 		    && (n->u.map.op == OMP_MAP_ATTACH
! 			|| n->u.map.op == OMP_MAP_DETACH))
! 		  {
! 		    symbol_attribute attr;
! 		    if (n->expr)
! 		      attr = gfc_expr_attr (n->expr);
! 		    else
! 		      attr = n->sym->attr;
! 		    if (!attr.pointer && !attr.allocatable)
! 		      gfc_error ("%qs clause argument must be ALLOCATABLE or "
! 				 "a POINTER at %L",
! 				 (n->u.map.op == OMP_MAP_ATTACH) ? "attach"
! 				 : "detach", &n->where);
! 		  }
! 		if (lastref
! 		    || (n->expr
! 			&& (!resolved || n->expr->expr_type != EXPR_VARIABLE)))
! 		  {
! 		    if (!lastslice
! 			&& lastref
! 			&& lastref->type == REF_SUBSTRING)
! 		      gfc_error ("Unexpected substring reference in %s clause "
! 				 "at %L", name, &n->where);
! 		    else if (!lastslice
! 			     && lastref
! 			     && lastref->type == REF_INQUIRY)
! 		      {
! 			gcc_assert (lastref->u.i == INQUIRY_RE
! 				    || lastref->u.i == INQUIRY_IM);
! 			gfc_error ("Unexpected complex-parts designator "
! 				   "reference in %s clause at %L",
! 				   name, &n->where);
! 		      }
! 		    else if (!resolved
! 			     || n->expr->expr_type != EXPR_VARIABLE
! 			     || (lastslice
! 				 && (lastslice->next
! 				     || lastslice->type != REF_ARRAY)))
! 		      gfc_error ("%qs in %s clause at %L is not a proper "
! 				 "array section", n->sym->name, name,
! 				 &n->where);
! 		    else if (lastslice)
! 		      {
! 			int i;
! 			gfc_array_ref *ar = &lastslice->u.ar;
! 			for (i = 0; i < ar->dimen; i++)
! 			  if (ar->stride[i] && code->op != EXEC_OACC_UPDATE)
! 			    {
! 			      gfc_error ("Stride should not be specified for "
! 					 "array section in %s clause at %L",
! 					 name, &n->where);
! 			      break;
! 			    }
! 			  else if (ar->dimen_type[i] != DIMEN_ELEMENT
! 				   && ar->dimen_type[i] != DIMEN_RANGE)
! 			    {
! 			      gfc_error ("%qs in %s clause at %L is not a "
! 					 "proper array section",
! 					 n->sym->name, name, &n->where);
! 			      break;
! 			    }
! 			  else if ((list == OMP_LIST_DEPEND
! 				    || list == OMP_LIST_AFFINITY)
! 				   && ar->start[i]
! 				   && ar->start[i]->expr_type == EXPR_CONSTANT
! 				   && ar->end[i]
! 				   && ar->end[i]->expr_type == EXPR_CONSTANT
! 				   && mpz_cmp (ar->start[i]->value.integer,
! 					       ar->end[i]->value.integer) > 0)
! 			    {
! 			      gfc_error ("%qs in %s clause at %L is a "
! 					 "zero size array section",
! 					 n->sym->name,
! 					 list == OMP_LIST_DEPEND
! 					 ? "DEPEND" : "AFFINITY", &n->where);
! 			      break;
! 			    }
! 		      }
! 		  }
! 		else if (openacc)
! 		  {
! 		    if (list == OMP_LIST_MAP
! 			&& n->u.map.op == OMP_MAP_FORCE_DEVICEPTR)
! 		      resolve_oacc_deviceptr_clause (n->sym, n->where, name);
! 		    else
! 		      resolve_oacc_data_clauses (n->sym, n->where, name);
! 		  }
! 		else if (list != OMP_LIST_DEPEND
! 			 && n->sym->as
! 			 && n->sym->as->type == AS_ASSUMED_SIZE)
! 		  gfc_error ("Assumed size array %qs in %s clause at %L",
! 			     n->sym->name, name, &n->where);
! 		if (code && list == OMP_LIST_MAP && !openacc)
! 		  switch (code->op)
! 		    {
! 		    case EXEC_OMP_TARGET:
! 		    case EXEC_OMP_TARGET_PARALLEL:
! 		    case EXEC_OMP_TARGET_PARALLEL_DO:
! 		    case EXEC_OMP_TARGET_PARALLEL_DO_SIMD:
! 		    case EXEC_OMP_TARGET_PARALLEL_LOOP:
! 		    case EXEC_OMP_TARGET_SIMD:
! 		    case EXEC_OMP_TARGET_TEAMS:
! 		    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE:
! 		    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO:
! 		    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_PARALLEL_DO_SIMD:
! 		    case EXEC_OMP_TARGET_TEAMS_DISTRIBUTE_SIMD:
! 		    case EXEC_OMP_TARGET_TEAMS_LOOP:
! 		    case EXEC_OMP_TARGET_DATA:
! 		      switch (n->u.map.op)
! 			{
! 			case OMP_MAP_TO:
! 			case OMP_MAP_ALWAYS_TO:
! 			case OMP_MAP_PRESENT_TO:
! 			case OMP_MAP_ALWAYS_PRESENT_TO:
! 			case OMP_MAP_FROM:
! 			case OMP_MAP_ALWAYS_FROM:
! 			case OMP_MAP_PRESENT_FROM:
! 			case OMP_MAP_ALWAYS_PRESENT_FROM:
! 			case OMP_MAP_TOFROM:
! 			case OMP_MAP_ALWAYS_TOFROM:
! 			case OMP_MAP_PRESENT_TOFROM:
! 			case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 			case OMP_MAP_ALLOC:
! 			case OMP_MAP_PRESENT_ALLOC:
! 			  break;
! 			default:
! 			  gfc_error ("TARGET%s with map-type other than TO, "
! 				     "FROM, TOFROM, or ALLOC on MAP clause "
! 				     "at %L",
! 				     code->op == EXEC_OMP_TARGET_DATA
! 				     ? " DATA" : "", &n->where);
! 			  break;
! 			}
! 		      break;
! 		    case EXEC_OMP_TARGET_ENTER_DATA:
! 		      switch (n->u.map.op)
! 			{
! 			case OMP_MAP_TO:
! 			case OMP_MAP_ALWAYS_TO:
! 			case OMP_MAP_PRESENT_TO:
! 			case OMP_MAP_ALWAYS_PRESENT_TO:
! 			case OMP_MAP_ALLOC:
! 			case OMP_MAP_PRESENT_ALLOC:
! 			  break;
! 			case OMP_MAP_TOFROM:
! 			  n->u.map.op = OMP_MAP_TO;
! 			  break;
! 			case OMP_MAP_ALWAYS_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_TO;
! 			  break;
! 			case OMP_MAP_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_PRESENT_TO;
! 			  break;
! 			case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_PRESENT_TO;
! 			  break;
! 			default:
! 			  gfc_error ("TARGET ENTER DATA with map-type other "
! 				     "than TO, TOFROM or ALLOC on MAP clause "
! 				     "at %L", &n->where);
! 			  break;
! 			}
! 		      break;
! 		    case EXEC_OMP_TARGET_EXIT_DATA:
! 		      switch (n->u.map.op)
! 			{
! 			case OMP_MAP_FROM:
! 			case OMP_MAP_ALWAYS_FROM:
! 			case OMP_MAP_PRESENT_FROM:
! 			case OMP_MAP_ALWAYS_PRESENT_FROM:
! 			case OMP_MAP_RELEASE:
! 			case OMP_MAP_DELETE:
! 			  break;
! 			case OMP_MAP_TOFROM:
! 			  n->u.map.op = OMP_MAP_FROM;
! 			  break;
! 			case OMP_MAP_ALWAYS_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_FROM;
! 			  break;
! 			case OMP_MAP_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_PRESENT_FROM;
! 			  break;
! 			case OMP_MAP_ALWAYS_PRESENT_TOFROM:
! 			  n->u.map.op = OMP_MAP_ALWAYS_PRESENT_FROM;
! 			  break;
! 			default:
! 			  gfc_error ("TARGET EXIT DATA with map-type other "
! 				     "than FROM, TOFROM, RELEASE, or DELETE on "
! 				     "MAP clause at %L", &n->where);
! 			  break;
! 			}
! 		      break;
! 		    default:
! 		      break;
! 		    }
! 		if (list == OMP_LIST_MAP
! 		    || list == OMP_LIST_TO
! 		    || list == OMP_LIST_FROM)
! 		  {
! 		    gfc_typespec *ts = n->expr ? &n->expr->ts : &n->sym->ts;
! 
! 		    if (ts->type == BT_DERIVED || ts->type == BT_CLASS)
! 		      {
! 			const char *mapper_id
! 			   = (n->u3.udm ? n->u3.udm->requested_mapper_id : "");
! 			gfc_omp_udm *udm = gfc_find_omp_udm (gfc_current_ns,
! 							     mapper_id, ts);
! 			if (mapper_id[0] != '\0' && !udm)
! 			  gfc_error ("User-defined mapper %qs not found at %L",
! 				     mapper_id, &n->where);
! 			else if (udm)
! 			  {
! 			    if (!n->u3.udm)
! 			      {
! 				gcc_assert (mapper_id[0] == '\0');
! 				n->u3.udm = gfc_get_omp_namelist_udm ();
! 				n->u3.udm->requested_mapper_id = mapper_id;
! 			      }
! 			    n->u3.udm->resolved_udm = udm;
! 			  }
! 		      }
! 		  }
! 	      }
! 
! 	    if (list != OMP_LIST_DEPEND)
! 	      for (n = omp_clauses->lists[list]; n != NULL; n = n->next)
! 		{
! 		  n->sym->attr.referenced = 1;
! 		  if (n->sym->attr.threadprivate)
! 		    gfc_error ("THREADPRIVATE object %qs in %s clause at %L",
! 			       n->sym->name, name, &n->where);
! 		  if (n->sym->attr.cray_pointee)
! 		    gfc_error ("Cray pointee %qs in %s clause at %L",
! 			       n->sym->name, name, &n->where);
! 		}
  	    break;
  	  case OMP_LIST_IS_DEVICE_PTR:
  	    last = NULL;
--- 10549,10556 ----
  	  case OMP_LIST_FROM:
  	  case OMP_LIST_CACHE:
  	    for (; n != NULL; n = n->next)
! 	      resolve_omp_clauses_aff_dep_map_cache (code, n, name, list,
! 						     omp_clauses, openacc);
  	    break;
  	  case OMP_LIST_IS_DEVICE_PTR:
  	    last = NULL;
diff -Nrcpad gcc-17-20260621/gcc/fortran/resolve.cc gcc-17-20260628/gcc/fortran/resolve.cc
*** gcc-17-20260621/gcc/fortran/resolve.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/resolve.cc	Sun Jun 28 22:32:08 2026
*************** resolve_transfer (gfc_code *code)
*** 11769,11774 ****
--- 11769,11778 ----
        return;
      }
  
+   if (dt && (dt->dt_io_kind->value.iokind == M_WRITE
+ 	     || dt->dt_io_kind->value.iokind == M_PRINT))
+     gfc_value_used_expr (exp, VALUE_USED);
+ 
    if (exp == NULL || (exp->expr_type != EXPR_VARIABLE
  		      && exp->expr_type != EXPR_FUNCTION
  		      && exp->expr_type != EXPR_ARRAY
*************** resolve_transfer (gfc_code *code)
*** 11901,11910 ****
        return;
      }
  
-   if (dt && (dt->dt_io_kind->value.iokind == M_WRITE
- 	     || dt->dt_io_kind->value.iokind == M_PRINT))
-     gfc_value_used_expr (exp, VALUE_USED);
- 
  }
  
  
--- 11905,11910 ----
*************** gfc_resolve (gfc_namespace *ns)
*** 21000,21006 ****
  
    if (warn_unused_but_set_variable || warn_unused_intent_out
        || warn_unused_read || warn_undefined_vars)
!     warn_unused_vs_set (ns);
  
    if (ns->omp_assumes)
      gfc_resolve_omp_assumptions (ns->omp_assumes);
--- 21000,21011 ----
  
    if (warn_unused_but_set_variable || warn_unused_intent_out
        || warn_unused_read || warn_undefined_vars)
!     {
!       int error_count;
!       gfc_get_errors (NULL, &error_count);
!       if (error_count == 0)
! 	warn_unused_vs_set (ns);
!     }
  
    if (ns->omp_assumes)
      gfc_resolve_omp_assumptions (ns->omp_assumes);
diff -Nrcpad gcc-17-20260621/gcc/fortran/trans-array.cc gcc-17-20260628/gcc/fortran/trans-array.cc
*** gcc-17-20260621/gcc/fortran/trans-array.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/trans-array.cc	Sun Jun 28 22:32:08 2026
*************** static bool first_len;
*** 1967,1972 ****
--- 1967,1986 ----
  static tree first_len_val;
  static bool typespec_chararray_ctor;
  
+ /* Return true if DER has any CLASS allocatable component.  Such components
+    are initialised by VIEW_CONVERT in structure constructors (a bitwise copy
+    of the class descriptor), so their _data pointer may refer to a non-heap
+    object and must not be passed to gfc_deallocate_alloc_comp_no_caf.  */
+ 
+ static bool
+ has_class_alloc_comp (gfc_symbol *der)
+ {
+   for (gfc_component *c = der->components; c; c = c->next)
+     if (c->ts.type == BT_CLASS && !c->attr.class_pointer)
+       return true;
+   return false;
+ }
+ 
  static void
  gfc_trans_array_ctor_element (stmtblock_t * pblock, tree desc,
  			      tree offset, gfc_se * se, gfc_expr * expr)
*************** gfc_trans_array_ctor_element (stmtblock_
*** 1978,1989 ****
    /* Store the value.  */
    tmp = build_fold_indirect_ref_loc (input_location,
  				 gfc_conv_descriptor_data_get (desc));
!   /* The offset may change, so get its value now and use that to free memory.
!    */
    offset_eval = gfc_evaluate_now (offset, &se->pre);
    tmp = gfc_build_array_ref (tmp, offset_eval, NULL);
  
!   if (expr->expr_type == EXPR_FUNCTION && expr->ts.type == BT_DERIVED
        && expr->ts.u.derived->attr.alloc_comp)
      gfc_add_expr_to_block (&se->finalblock,
  			   gfc_deallocate_alloc_comp_no_caf (expr->ts.u.derived,
--- 1992,2006 ----
    /* Store the value.  */
    tmp = build_fold_indirect_ref_loc (input_location,
  				 gfc_conv_descriptor_data_get (desc));
! 
!   /* The offset may change, so get its value now and use that to free memory.  */
    offset_eval = gfc_evaluate_now (offset, &se->pre);
    tmp = gfc_build_array_ref (tmp, offset_eval, NULL);
  
!   if (expr->ts.type == BT_DERIVED
!       && (expr->expr_type == EXPR_FUNCTION
! 	  || (expr->expr_type == EXPR_STRUCTURE
! 	      && !has_class_alloc_comp (expr->ts.u.derived)))
        && expr->ts.u.derived->attr.alloc_comp)
      gfc_add_expr_to_block (&se->finalblock,
  			   gfc_deallocate_alloc_comp_no_caf (expr->ts.u.derived,
*************** gfc_constructor_is_owned_alloc_comp (gfc
*** 2168,2175 ****
  	  if (!gfc_constructor_is_owned_alloc_comp (e->value.constructor, der))
  	    return false;
  	}
!       else if (!(e->expr_type == EXPR_FUNCTION
! 		 && e->ts.type == BT_DERIVED
  		 && e->ts.u.derived == der))
  	return false;
      }
--- 2185,2194 ----
  	  if (!gfc_constructor_is_owned_alloc_comp (e->value.constructor, der))
  	    return false;
  	}
!       else if (!(e->ts.type == BT_DERIVED
! 		 && (e->expr_type == EXPR_FUNCTION
! 		     || (e->expr_type == EXPR_STRUCTURE
! 			 && !has_class_alloc_comp (e->ts.u.derived)))
  		 && e->ts.u.derived == der))
  	return false;
      }
*************** build_array_ref (tree desc, tree offset,
*** 4474,4480 ****
        type = TREE_TYPE (TREE_OPERAND (cdesc, 0));
        if (TYPE_CANONICAL (type)
  	  && GFC_CLASS_TYPE_P (TYPE_CANONICAL (type)))
! 	vptr = gfc_class_vptr_get (TREE_OPERAND (cdesc, 0));
      }
  
    tmp = gfc_conv_array_data (desc);
--- 4493,4510 ----
        type = TREE_TYPE (TREE_OPERAND (cdesc, 0));
        if (TYPE_CANONICAL (type)
  	  && GFC_CLASS_TYPE_P (TYPE_CANONICAL (type)))
! 	{
! 	  vptr = gfc_class_vptr_get (TREE_OPERAND (cdesc, 0));
! 	  /* Pass the class container as decl so that gfc_build_array_ref can
! 	     correct the element size for an unlimited polymorphic character
! 	     payload (the _len field), which the vptr size alone omits.  Only do
! 	     this for a genuine array element reference; a scalar coarray has
! 	     nothing to span-correct and gfc_build_array_ref asserts decl is null
! 	     for it.  */
! 	  if (decl == NULL_TREE
! 	      && GFC_TYPE_ARRAY_RANK (TREE_TYPE (cdesc)) > 0)
! 	    decl = TREE_OPERAND (cdesc, 0);
! 	}
      }
  
    tmp = gfc_conv_array_data (desc);
diff -Nrcpad gcc-17-20260621/gcc/fortran/trans-expr.cc gcc-17-20260628/gcc/fortran/trans-expr.cc
*** gcc-17-20260621/gcc/fortran/trans-expr.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/trans-expr.cc	Sun Jun 28 22:32:08 2026
*************** gfc_conv_power_op (gfc_se * se, gfc_expr
*** 4058,4063 ****
--- 4058,4083 ----
  
  	case BT_REAL:
  	  /* Use builtins for real ** int4.  */
+ 
+ 	  if (real_minus_onep (lse.expr))
+ 	    {
+ 	      /* (-1.0)**n is (real) (1 - ((n & 1) << 1)), see the integer case
+ 		 above.  */
+ 
+ 	      tree lhs_type, rhs_type;
+ 	      tree tmp;
+ 	      lhs_type = TREE_TYPE (lse.expr);
+ 	      rhs_type = TREE_TYPE (rse.expr);
+ 	      tmp = fold_build2_loc (input_location, BIT_AND_EXPR, rhs_type,
+ 				     rse.expr, build_int_cst (rhs_type, 1));
+ 	      tmp = fold_build2_loc (input_location, LSHIFT_EXPR, rhs_type,
+ 				     tmp, build_int_cst (rhs_type, 1));
+ 	      tmp = fold_build2_loc (input_location, MINUS_EXPR, rhs_type,
+ 				     build_int_cst (rhs_type, 1), tmp);
+ 	      se->expr = fold_convert (lhs_type, tmp);
+ 	      return;
+ 	    }
+ 
  	  if (ikind == 0)
  	    {
  	      switch (kind)
*************** gfc_trans_alloc_subarray_assign (tree de
*** 9835,9842 ****
      gfc_add_block_to_block (final_block, &se.finalblock);
  
    if (expr->expr_type != EXPR_VARIABLE)
!     gfc_conv_descriptor_data_set (&block, se.expr,
! 				  null_pointer_node);
  
    /* We need to know if the argument of a conversion function is a
       variable, so that the correct lower bound can be used.  */
--- 9855,9869 ----
      gfc_add_block_to_block (final_block, &se.finalblock);
  
    if (expr->expr_type != EXPR_VARIABLE)
!     {
!       if (gfc_bt_struct (cm->ts.type) && cm->ts.u.derived->attr.alloc_comp)
! 	{
! 	  tmp = gfc_deallocate_alloc_comp_no_caf (cm->ts.u.derived,
! 						  se.expr, cm->as->rank, true);
! 	  gfc_add_expr_to_block (&block, tmp);
! 	}
!       gfc_conv_descriptor_data_set (&block, se.expr, null_pointer_node);
!     }
  
    /* We need to know if the argument of a conversion function is a
       variable, so that the correct lower bound can be used.  */
diff -Nrcpad gcc-17-20260621/gcc/fortran/trans-openmp.cc gcc-17-20260628/gcc/fortran/trans-openmp.cc
*** gcc-17-20260621/gcc/fortran/trans-openmp.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/trans-openmp.cc	Sun Jun 28 22:32:08 2026
*************** gfc_convert_expr_to_tree (stmtblock_t *b
*** 3352,3358 ****
  static vec<tree, va_heap, vl_embed> *doacross_steps;
  
  
! /* Translate an array section or array element.  */
  
  static void
  gfc_trans_omp_array_section (stmtblock_t *block, gfc_exec_op op,
--- 3352,3375 ----
  static vec<tree, va_heap, vl_embed> *doacross_steps;
  
  
! /* Map an array section or array element.
!    BLOCK will hold any output statements generated; if there are iterators,
!      it's a block for the current iterator group.
!    OP is the construct containing the map clause.
!    N is the entry that appears in the clause namelist.  It may contain iterator
!      variables.
!    DECL is the base object associated with the namelist entry.  It can be an
!      array descriptor, a bare array, or pointer to an array.
!    ELEMENT is true for an array element, false for an array section.
!    OPENMP is true for OpenMP, false for OpenACC.
!    PTR_KIND is the map operation.
!    NODE is an input operand representing the map clause.
!    NODE2, NODE3, and NODE4 are output operands that will hold new map clauses
!      generated by this function.  Not all of them are always needed.  NODE2
!      is for an array descriptor object, NODE3 is for its data array, NODE4
!      is for a pointer mapping.
!    ITERATOR is a list of active iterator descriptors, chained through
!      TREE_CHAIN.  */
  
  static void
  gfc_trans_omp_array_section (stmtblock_t *block, gfc_exec_op op,
*************** gfc_trans_omp_array_section (stmtblock_t
*** 3362,3368 ****
  			     tree iterator)
  {
    gfc_se se;
!   tree ptr, ptr2;
    tree elemsz = NULL_TREE;
  
    gfc_init_se (&se, NULL);
--- 3379,3388 ----
  			     tree iterator)
  {
    gfc_se se;
!   /* PTR is the array expression from n->expr.  If iterators are this
!      involved expression can involve iterator variables.  BASE points to the
!      base array object obtained from DECL.  */
!   tree ptr, base;
    tree elemsz = NULL_TREE;
  
    gfc_init_se (&se, NULL);
*************** gfc_trans_omp_array_section (stmtblock_t
*** 3429,3439 ****
--- 3449,3461 ----
        && OMP_CLAUSE_MAP_KIND (node) != GOMP_MAP_DELETE)
  
      {
+       /* NODE4 is a newly-generated map clause for the pointer.  */
        node4 = build_omp_clause (input_location,
  				OMP_CLAUSE_MAP);
        OMP_CLAUSE_SET_MAP_KIND (node4, GOMP_MAP_POINTER);
        OMP_CLAUSE_DECL (node4) = decl;
        OMP_CLAUSE_SIZE (node4) = size_int (0);
+       /* Make DECL be the descriptor rather than the pointer to it.  */
        decl = build_fold_indirect_ref (decl);
      }
    else if (ptr_kind == GOMP_MAP_ALWAYS_POINTER
*************** gfc_trans_omp_array_section (stmtblock_t
*** 3457,3463 ****
    if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
      {
        tree type = TREE_TYPE (decl);
!       ptr2 = gfc_conv_descriptor_data_get (decl);
        node2 = build_omp_clause (input_location, OMP_CLAUSE_MAP);
        OMP_CLAUSE_DECL (node2) = decl;
        OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type);
--- 3479,3486 ----
    if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl)))
      {
        tree type = TREE_TYPE (decl);
!       base = gfc_conv_descriptor_data_get (decl);
!       /* NODE2 is a newly-generated map clause for the array descriptor DECL.  */
        node2 = build_omp_clause (input_location, OMP_CLAUSE_MAP);
        OMP_CLAUSE_DECL (node2) = decl;
        OMP_CLAUSE_SIZE (node2) = TYPE_SIZE_UNIT (type);
*************** gfc_trans_omp_array_section (stmtblock_t
*** 3474,3479 ****
--- 3497,3503 ----
  	}
        else
  	OMP_CLAUSE_SET_MAP_KIND (node2, GOMP_MAP_TO_PSET);
+       /* NODE3 is a newly-generated map clause for the array data.  */
        node3 = build_omp_clause (input_location, OMP_CLAUSE_MAP);
        OMP_CLAUSE_SET_MAP_KIND (node3, ptr_kind);
        OMP_CLAUSE_DECL (node3) = gfc_conv_descriptor_data_get (decl);
*************** gfc_trans_omp_array_section (stmtblock_t
*** 3485,3498 ****
        if (ptr_kind == GOMP_MAP_ATTACH_DETACH && !openmp)
  	STRIP_NOPS (OMP_CLAUSE_DECL (node3));
      }
!   else
      {
        if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
  	{
  	  tree offset;
! 	  ptr2 = build_fold_addr_expr (decl);
  	  offset = fold_build2 (MINUS_EXPR, ptrdiff_type_node, ptr,
! 				fold_convert (ptrdiff_type_node, ptr2));
  	  offset = build2 (TRUNC_DIV_EXPR, ptrdiff_type_node,
  			   offset, fold_convert (ptrdiff_type_node, elemsz));
  	  offset = build4_loc (input_location, ARRAY_REF,
--- 3509,3522 ----
        if (ptr_kind == GOMP_MAP_ATTACH_DETACH && !openmp)
  	STRIP_NOPS (OMP_CLAUSE_DECL (node3));
      }
!   else  /* DECL is bare array or pointer to an array.  */
      {
        if (TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
  	{
  	  tree offset;
! 	  base = build_fold_addr_expr (decl);
  	  offset = fold_build2 (MINUS_EXPR, ptrdiff_type_node, ptr,
! 				fold_convert (ptrdiff_type_node, base));
  	  offset = build2 (TRUNC_DIV_EXPR, ptrdiff_type_node,
  			   offset, fold_convert (ptrdiff_type_node, elemsz));
  	  offset = build4_loc (input_location, ARRAY_REF,
*************** gfc_trans_omp_array_section (stmtblock_t
*** 3503,3528 ****
  	  if (ptr_kind == GOMP_MAP_ATTACH_DETACH && openmp)
  	    return;
  	}
!       else
  	{
  	  gcc_assert (POINTER_TYPE_P (TREE_TYPE (decl)));
! 	  ptr2 = decl;
  	}
        node3 = build_omp_clause (input_location,
  				OMP_CLAUSE_MAP);
        OMP_CLAUSE_SET_MAP_KIND (node3, ptr_kind);
        OMP_CLAUSE_DECL (node3) = decl;
      }
!   ptr2 = fold_convert (ptrdiff_type_node, ptr2);
    for (tree it = iterator; it; it = TREE_CHAIN (it))
      {
!       ptr = simplify_replace_tree (ptr, TREE_VEC_ELT (it, 0),
! 				   TREE_VEC_ELT (it, 1));
!       ptr2 = simplify_replace_tree (ptr2, TREE_VEC_ELT (it, 0),
! 				    TREE_VEC_ELT (it, 1));
      }
    OMP_CLAUSE_SIZE (node3) = fold_build2 (MINUS_EXPR, ptrdiff_type_node,
! 					 ptr, ptr2);
  }
  
  static tree
--- 3527,3564 ----
  	  if (ptr_kind == GOMP_MAP_ATTACH_DETACH && openmp)
  	    return;
  	}
!       else  /* DECL is a pointer.  */
  	{
  	  gcc_assert (POINTER_TYPE_P (TREE_TYPE (decl)));
! 	  base = decl;
  	}
        node3 = build_omp_clause (input_location,
  				OMP_CLAUSE_MAP);
        OMP_CLAUSE_SET_MAP_KIND (node3, ptr_kind);
        OMP_CLAUSE_DECL (node3) = decl;
      }
! 
!   /* FIXME: This is a broken hack.  The ptr expression is based on the
!      namelist entry and can contain references to iterator variables, which
!      are not yet set to their initial values when ptr is used.  This
!      tries to replace instances of the iterator values with the initial values
!      in ptr explicitly.  It's broken because the expansion of ptr can also
!      add statements to the iterator block that also contain references to
!      the uninitialized variables, and substituting those similarly breaks
!      other things.  */
!   base = fold_convert (ptrdiff_type_node, base);
    for (tree it = iterator; it; it = TREE_CHAIN (it))
      {
!       ptr = simplify_replace_tree (ptr, OMP_ITERATOR_VAR (it),
! 				   OMP_ITERATOR_BEGIN (it));
!       base = simplify_replace_tree (base, OMP_ITERATOR_VAR (it),
! 				    OMP_ITERATOR_BEGIN (it));
      }
+ 
+   /* The OMP_CLAUSE_SIZE field for the array data map clause node3
+      contains the initial offset of ptr from base, not the size.  */
    OMP_CLAUSE_SIZE (node3) = fold_build2 (MINUS_EXPR, ptrdiff_type_node,
! 					 ptr, base);
  }
  
  static tree
*************** handle_iterator (gfc_namespace *ns, stmt
*** 3534,3543 ****
        gfc_constructor *c;
        gfc_se se;
  
!       tree last = make_tree_vec (6);
        tree iter_var = gfc_get_symbol_decl (sym);
        tree type = TREE_TYPE (iter_var);
!       TREE_VEC_ELT (last, 0) = iter_var;
        DECL_CHAIN (iter_var) = BLOCK_VARS (block);
        BLOCK_VARS (block) = iter_var;
  
--- 3570,3579 ----
        gfc_constructor *c;
        gfc_se se;
  
!       tree last = make_omp_iterator ();
        tree iter_var = gfc_get_symbol_decl (sym);
        tree type = TREE_TYPE (iter_var);
!       OMP_ITERATOR_VAR (last) = iter_var;
        DECL_CHAIN (iter_var) = BLOCK_VARS (block);
        BLOCK_VARS (block) = iter_var;
  
*************** handle_iterator (gfc_namespace *ns, stmt
*** 3547,3564 ****
        gfc_conv_expr (&se, c->expr);
        gfc_add_block_to_block (iter_block, &se.pre);
        gfc_add_block_to_block (iter_block, &se.post);
!       TREE_VEC_ELT (last, 1) = fold_convert (type,
! 					     gfc_evaluate_now (se.expr,
! 							       iter_block));
        /* end */
        c = gfc_constructor_next (c);
        gfc_init_se (&se, NULL);
        gfc_conv_expr (&se, c->expr);
        gfc_add_block_to_block (iter_block, &se.pre);
        gfc_add_block_to_block (iter_block, &se.post);
!       TREE_VEC_ELT (last, 2) = fold_convert (type,
! 					     gfc_evaluate_now (se.expr,
! 							       iter_block));
        /* step */
        c = gfc_constructor_next (c);
        tree step;
--- 3583,3600 ----
        gfc_conv_expr (&se, c->expr);
        gfc_add_block_to_block (iter_block, &se.pre);
        gfc_add_block_to_block (iter_block, &se.post);
!       OMP_ITERATOR_BEGIN (last) = fold_convert (type,
! 						gfc_evaluate_now (se.expr,
! 								  iter_block));
        /* end */
        c = gfc_constructor_next (c);
        gfc_init_se (&se, NULL);
        gfc_conv_expr (&se, c->expr);
        gfc_add_block_to_block (iter_block, &se.pre);
        gfc_add_block_to_block (iter_block, &se.post);
!       OMP_ITERATOR_END (last) = fold_convert (type,
! 					      gfc_evaluate_now (se.expr,
! 								iter_block));
        /* step */
        c = gfc_constructor_next (c);
        tree step;
*************** handle_iterator (gfc_namespace *ns, stmt
*** 3575,3583 ****
  	}
        else
  	step = build_int_cst (type, 1);
!       TREE_VEC_ELT (last, 3) = step;
        /* orig_step */
!       TREE_VEC_ELT (last, 4) = save_expr (step);
        TREE_CHAIN (last) = list;
        list = last;
      }
--- 3611,3619 ----
  	}
        else
  	step = build_int_cst (type, 1);
!       OMP_ITERATOR_STEP (last) = step;
        /* orig_step */
!       OMP_ITERATOR_ORIG_STEP (last) = save_expr (step);
        TREE_CHAIN (last) = list;
        list = last;
      }
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 4164,4170 ****
  	      if (iterator && prev->u2.ns != n->u2.ns)
  		{
  		  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 		  TREE_VEC_ELT (iterator, 5) = tree_block;
  		  for (tree c = omp_clauses; c != prev_clauses;
  		       c = OMP_CLAUSE_CHAIN (c))
  		    OMP_CLAUSE_DECL (c) = build_tree_list (iterator,
--- 4200,4206 ----
  	      if (iterator && prev->u2.ns != n->u2.ns)
  		{
  		  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 		  OMP_ITERATOR_BLOCK (iterator) = tree_block;
  		  for (tree c = omp_clauses; c != prev_clauses;
  		       c = OMP_CLAUSE_CHAIN (c))
  		    OMP_CLAUSE_DECL (c) = build_tree_list (iterator,
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 4325,4331 ****
  	  if (iterator)
  	    {
  	      BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 	      TREE_VEC_ELT (iterator, 5) = tree_block;
  	      for (tree c = omp_clauses; c != prev_clauses;
  		   c = OMP_CLAUSE_CHAIN (c))
  		OMP_CLAUSE_DECL (c) = build_tree_list (iterator,
--- 4361,4367 ----
  	  if (iterator)
  	    {
  	      BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 	      OMP_ITERATOR_BLOCK (iterator) = tree_block;
  	      for (tree c = omp_clauses; c != prev_clauses;
  		   c = OMP_CLAUSE_CHAIN (c))
  		OMP_CLAUSE_DECL (c) = build_tree_list (iterator,
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 4382,4388 ****
  		{
  		  /* Finish previous iterator group.  */
  		  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 		  TREE_VEC_ELT (iterator, 5) = tree_block;
  		  for (tree c = omp_clauses; c != prev_clauses;
  		       c = OMP_CLAUSE_CHAIN (c))
  		    if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FIRSTPRIVATE_POINTER
--- 4418,4424 ----
  		{
  		  /* Finish previous iterator group.  */
  		  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 		  OMP_ITERATOR_BLOCK (iterator) = tree_block;
  		  for (tree c = omp_clauses; c != prev_clauses;
  		       c = OMP_CLAUSE_CHAIN (c))
  		    if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FIRSTPRIVATE_POINTER
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 5284,5290 ****
  	    {
  	      /* Finish last iterator group.  */
  	      BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 	      TREE_VEC_ELT (iterator, 5) = tree_block;
  	      for (tree c = omp_clauses; c != prev_clauses;
  		   c = OMP_CLAUSE_CHAIN (c))
  		if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FIRSTPRIVATE_POINTER
--- 5320,5326 ----
  	    {
  	      /* Finish last iterator group.  */
  	      BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 	      OMP_ITERATOR_BLOCK (iterator) = tree_block;
  	      for (tree c = omp_clauses; c != prev_clauses;
  		   c = OMP_CLAUSE_CHAIN (c))
  		if (OMP_CLAUSE_MAP_KIND (c) != GOMP_MAP_FIRSTPRIVATE_POINTER
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 5308,5314 ****
  		{
  		  /* Finish previous iterator group.  */
  		  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 		  TREE_VEC_ELT (iterator, 5) = tree_block;
  		  for (tree c = omp_clauses; c != prev_clauses;
  		       c = OMP_CLAUSE_CHAIN (c))
  		    OMP_CLAUSE_ITERATORS (c) = iterator;
--- 5344,5350 ----
  		{
  		  /* Finish previous iterator group.  */
  		  BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 		  OMP_ITERATOR_BLOCK (iterator) = tree_block;
  		  for (tree c = omp_clauses; c != prev_clauses;
  		       c = OMP_CLAUSE_CHAIN (c))
  		    OMP_CLAUSE_ITERATORS (c) = iterator;
*************** gfc_trans_omp_clauses (stmtblock_t *bloc
*** 5428,5434 ****
  	    {
  	      /* Finish last iterator group.  */
  	      BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 	      TREE_VEC_ELT (iterator, 5) = tree_block;
  	      for (tree c = omp_clauses; c != prev_clauses;
  		   c = OMP_CLAUSE_CHAIN (c))
  		OMP_CLAUSE_ITERATORS (c) = iterator;
--- 5464,5470 ----
  	    {
  	      /* Finish last iterator group.  */
  	      BLOCK_SUBBLOCKS (tree_block) = gfc_finish_block (&iter_block);
! 	      OMP_ITERATOR_BLOCK (iterator) = tree_block;
  	      for (tree c = omp_clauses; c != prev_clauses;
  		   c = OMP_CLAUSE_CHAIN (c))
  		OMP_CLAUSE_ITERATORS (c) = iterator;
*************** static tree
*** 6941,6947 ****
  gfc_trans_omp_barrier (void)
  {
    tree decl = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
!   return build_call_expr_loc (input_location, decl, 0);
  }
  
  static tree
--- 6977,6985 ----
  gfc_trans_omp_barrier (void)
  {
    tree decl = builtin_decl_explicit (BUILT_IN_GOMP_BARRIER);
!   return build_call_expr_loc (input_location, decl, 1,
! 			      build_int_cst (integer_type_node,
! 					     GOMP_BARRIER_EXPLICIT));
  }
  
  static tree
diff -Nrcpad gcc-17-20260621/gcc/fortran/trans-types.cc gcc-17-20260628/gcc/fortran/trans-types.cc
*** gcc-17-20260621/gcc/fortran/trans-types.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/trans-types.cc	Sun Jun 28 22:32:08 2026
*************** gfc_typenode_for_spec (gfc_typespec * sp
*** 1380,1388 ****
      case BT_CLASS:
        basetype = gfc_get_derived_type (spec->u.derived, codim);
  
-       if (spec->type == BT_CLASS)
- 	GFC_CLASS_TYPE_P (basetype) = 1;
- 
        /* If we're dealing with either C_PTR or C_FUNPTR, we modified the
           type and kind to fit a (void *) and the basetype returned was a
           ptr_type_node.  We need to pass up this new information to the
--- 1380,1385 ----
*************** gfc_get_derived_type (gfc_symbol * deriv
*** 2970,2975 ****
--- 2967,2974 ----
        TYPE_NAME (typenode) = get_identifier (derived->name);
        TYPE_PACKED (typenode) = flag_pack_derived;
        derived->backend_decl = typenode;
+       if (derived->attr.is_class)
+ 	GFC_CLASS_TYPE_P (typenode) = 1;
      }
  
    if (derived->components
*************** gfc_get_derived_type (gfc_symbol * deriv
*** 3132,3146 ****
  	  field_type = build_pointer_type_for_mode (TREE_TYPE (field_type),
  						    ptr_mode, true);
  
-       /* Ensure that the CLASS language specific flag is set.  */
-       if (c->ts.type == BT_CLASS)
- 	{
- 	  if (POINTER_TYPE_P (field_type))
- 	    GFC_CLASS_TYPE_P (TREE_TYPE (field_type)) = 1;
- 	  else
- 	    GFC_CLASS_TYPE_P (field_type) = 1;
- 	}
- 
        field = gfc_add_field_to_struct (typenode,
  				       get_identifier (c->name),
  				       field_type, &chain);
--- 3131,3136 ----
*************** copy_derived_types:
*** 3213,3218 ****
--- 3203,3211 ----
  	break;
      }
  
+   if (derived->attr.is_class)
+     GFC_CLASS_TYPE_P (derived->backend_decl) = 1;
+ 
    return derived->backend_decl;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/fortran/types.def gcc-17-20260628/gcc/fortran/types.def
*** gcc-17-20260621/gcc/fortran/types.def	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/fortran/types.def	Sun Jun 28 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 47,52 ****
--- 47,53 ----
  DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
  DEF_PRIMITIVE_TYPE (BT_BOOL, boolean_type_node)
  DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
+ DEF_PRIMITIVE_TYPE (BT_COMPLEX_INT, complex_integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node)
  DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
  DEF_PRIMITIVE_TYPE (BT_ULONGLONG, long_long_unsigned_type_node)
*************** DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR)
*** 76,83 ****
--- 77,86 ----
  DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL)
  DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
  DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
+ DEF_FUNCTION_TYPE_0 (BT_FN_COMPLEX_INT, BT_COMPLEX_INT)
  DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
  DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
+ DEF_FUNCTION_TYPE_0 (BT_FN_ULONGLONG, BT_ULONGLONG)
  
  DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
  DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTRPTR, BT_VOID, BT_PTR_PTR)
diff -Nrcpad gcc-17-20260621/gcc/genconfig.cc gcc-17-20260628/gcc/genconfig.cc
*** gcc-17-20260621/gcc/genconfig.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/genconfig.cc	Sun Jun 28 22:32:08 2026
*************** main (int argc, const char **argv)
*** 276,282 ****
    puts ("#ifndef GCC_INSN_CONFIG_H");
    puts ("#define GCC_INSN_CONFIG_H\n");
  
!   /* Allow at least 30 operands for the sake of asm constructs.  */
    /* ??? We *really* ought to reorganize things such that there
       is no fixed upper bound.  */
    max_recog_operands = 29;  /* We will add 1 later.  */
--- 276,285 ----
    puts ("#ifndef GCC_INSN_CONFIG_H");
    puts ("#define GCC_INSN_CONFIG_H\n");
  
!   /* Allow at least 30 operands for the sake of asm constructs.
!      This magic number is also used in genpreds to determine
!      validity of a referenced operand when parsing dynamic register
!      filters.  */
    /* ??? We *really* ought to reorganize things such that there
       is no fixed upper bound.  */
    max_recog_operands = 29;  /* We will add 1 later.  */
*************** main (int argc, const char **argv)
*** 361,366 ****
--- 364,370 ----
      }
  
    printf ("#define NUM_REGISTER_FILTERS %d\n", register_filters.length ());
+   printf ("#define NUM_DEPENDENT_FILTERS %u\n", num_dependent_filters);
  
    puts ("\n#endif /* GCC_INSN_CONFIG_H */");
  
diff -Nrcpad gcc-17-20260621/gcc/gengtype-lex.l gcc-17-20260628/gcc/gengtype-lex.l
*** gcc-17-20260621/gcc/gengtype-lex.l	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gengtype-lex.l	Sun Jun 28 22:32:08 2026
*************** update_lineno (const char *l, size_t len
*** 42,48 ****
  CID	[[:alpha:]_][[:alnum:]_]*
  WS	[[:space:]]+
  HWS	[ \t\r\v\f]*
! IWORD	short|long|(un)?signed|char|int|HOST_WIDE_INT|uint64_t|int64_t|bool|size_t|BOOL_BITFIELD|CPPCHAR_SIGNED_T|ino_t|dev_t|HARD_REG_SET
  ITYPE	{IWORD}({WS}{IWORD})*
      /* Include '::' in identifiers to capture C++ scope qualifiers.  */
  ID	{CID}({HWS}::{HWS}{CID})*
--- 42,48 ----
  CID	[[:alpha:]_][[:alnum:]_]*
  WS	[[:space:]]+
  HWS	[ \t\r\v\f]*
! IWORD	short|long|(un)?signed|char|int|HOST_WIDE_INT|uint64_t|int64_t|bool|size_t|CPPCHAR_SIGNED_T|ino_t|dev_t|HARD_REG_SET
  ITYPE	{IWORD}({WS}{IWORD})*
      /* Include '::' in identifiers to capture C++ scope qualifiers.  */
  ID	{CID}({HWS}::{HWS}{CID})*
diff -Nrcpad gcc-17-20260621/gcc/genmatch.cc gcc-17-20260628/gcc/genmatch.cc
*** gcc-17-20260621/gcc/genmatch.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/genmatch.cc	Sun Jun 28 22:32:08 2026
*************** choose_output (const vec<FILE *> &parts)
*** 999,1005 ****
     definition files.  */
  
  #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
! enum tree_code {
  #include "tree.def"
  MAX_TREE_CODES
  };
--- 999,1005 ----
     definition files.  */
  
  #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
! enum tree_code : unsigned {
  #include "tree.def"
  MAX_TREE_CODES
  };
diff -Nrcpad gcc-17-20260621/gcc/genpreds.cc gcc-17-20260628/gcc/genpreds.cc
*** gcc-17-20260621/gcc/genpreds.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/genpreds.cc	Sun Jun 28 22:32:08 2026
*************** public:
*** 678,683 ****
--- 678,686 ----
    const char *regclass;  /* for register constraints */
    rtx exp;               /* for other constraints */
    const char *filter;    /* the register filter condition, or null if none */
+   /* The operand a dependent filter depends on (references), or -1 if this
+      constraint has no dependent filter.  */
+   int dependent_filter_ref_opno;
    unsigned int is_register	: 1;
    unsigned int is_const_int	: 1;
    unsigned int is_const_dbl	: 1;
*************** public:
*** 690,695 ****
--- 693,702 ----
    unsigned int maybe_allows_mem : 1;
  };
  
+ /* List of dependent filters.  A dependent filter ID is an index of this
+    list.  */
+ static vec<class constraint_data *> dependent_filters;
+ 
  /* Overview of all constraints beginning with a given letter.  */
  
  static class constraint_data *
*************** static void
*** 779,785 ****
  add_constraint (const char *name, const char *regclass,
  		rtx exp, bool is_memory, bool is_special_memory,
  		bool is_relaxed_memory, bool is_address, file_location loc,
! 		const char *filter = nullptr)
  {
    class constraint_data *c, **iter, **slot;
    const char *p;
--- 786,792 ----
  add_constraint (const char *name, const char *regclass,
  		rtx exp, bool is_memory, bool is_special_memory,
  		bool is_relaxed_memory, bool is_address, file_location loc,
! 		const char *filter, int ref_opno)
  {
    class constraint_data *c, **iter, **slot;
    const char *p;
*************** add_constraint (const char *name, const
*** 913,918 ****
--- 920,928 ----
    c->regclass = regclass;
    c->exp = exp;
    c->filter = filter;
+   c->dependent_filter_ref_opno = ref_opno;
+   if (ref_opno >= 0)
+     dependent_filters.safe_push (c);
    c->is_register = regclass != 0;
    c->is_const_int = is_const_int;
    c->is_const_dbl = is_const_dbl;
*************** process_define_constraint (md_rtx_info *
*** 962,977 ****
  		  GET_CODE (info->def) == DEFINE_SPECIAL_MEMORY_CONSTRAINT,
  		  GET_CODE (info->def) == DEFINE_RELAXED_MEMORY_CONSTRAINT,
  		  GET_CODE (info->def) == DEFINE_ADDRESS_CONSTRAINT,
! 		  info->loc);
  }
  
  /* Process a DEFINE_REGISTER_CONSTRAINT expression, C.  */
  static void
  process_define_register_constraint (md_rtx_info *info)
  {
    add_constraint (XSTR (info->def, 0), XSTR (info->def, 1),
  		  0, false, false, false, false, info->loc,
! 		  XSTR (info->def, 3));
  }
  
  /* Put the constraints into enum order.  We want to keep constraints
--- 972,1015 ----
  		  GET_CODE (info->def) == DEFINE_SPECIAL_MEMORY_CONSTRAINT,
  		  GET_CODE (info->def) == DEFINE_RELAXED_MEMORY_CONSTRAINT,
  		  GET_CODE (info->def) == DEFINE_ADDRESS_CONSTRAINT,
! 		  info->loc, nullptr, -1);
  }
  
  /* Process a DEFINE_REGISTER_CONSTRAINT expression, C.  */
  static void
  process_define_register_constraint (md_rtx_info *info)
  {
+   /* Get the optional reference operand number the filter is
+      dependent on.  */
+   const char *ref_str = XSTR (info->def, 4);
+   int ref_opno = -1;
+ 
+   if (ref_str && !XSTR (info->def, 3))
+     {
+       error_at (info->loc, "reference operand specified without"
+ 		" a filter expression");
+       return;
+     }
+ 
+   /* Parse it.  */
+   if (ref_str)
+     {
+       char *end;
+       long n = strtol (ref_str, &end, 10);
+       /* MAX_RECOG_OPERANDS = 30 is defined in insn-config.h
+ 	 but is not available here.  */
+       if (*ref_str == '\0' || *end != '\0' || n < 0 || n >= 30)
+ 	{
+ 	  error_at (info->loc, "reference operand index '%s' must be a"
+ 		    " non-negative integer less than 30", ref_str);
+ 	  return;
+ 	}
+       ref_opno = (int) n;
+     }
+ 
    add_constraint (XSTR (info->def, 0), XSTR (info->def, 1),
  		  0, false, false, false, false, info->loc,
! 		  XSTR (info->def, 3), ref_opno);
  }
  
  /* Put the constraints into enum order.  We want to keep constraints
*************** write_get_register_filter ()
*** 1456,1462 ****
  	  register_filters.is_empty () ? "" : " c");
    printf ("{\n");
    FOR_ALL_CONSTRAINTS (c)
!     if (c->is_register && c->filter)
        {
  	printf ("  if (c == CONSTRAINT_%s)\n", c->c_name);
  	printf ("    return &this_target_constraints->register_filters[%d];\n",
--- 1494,1500 ----
  	  register_filters.is_empty () ? "" : " c");
    printf ("{\n");
    FOR_ALL_CONSTRAINTS (c)
!     if (c->is_register && c->filter && c->dependent_filter_ref_opno < 0)
        {
  	printf ("  if (c == CONSTRAINT_%s)\n", c->c_name);
  	printf ("    return &this_target_constraints->register_filters[%d];\n",
*************** write_get_register_filter_id ()
*** 1481,1487 ****
  	  register_filters.is_empty () ? "" : " c");
    printf ("{\n");
    FOR_ALL_CONSTRAINTS (c)
!     if (c->is_register && c->filter)
        {
  	printf ("  if (c == CONSTRAINT_%s)\n", c->c_name);
  	printf ("    return %d;\n", get_register_filter_id (c->filter));
--- 1519,1525 ----
  	  register_filters.is_empty () ? "" : " c");
    printf ("{\n");
    FOR_ALL_CONSTRAINTS (c)
!     if (c->is_register && c->filter && c->dependent_filter_ref_opno < 0)
        {
  	printf ("  if (c == CONSTRAINT_%s)\n", c->c_name);
  	printf ("    return %d;\n", get_register_filter_id (c->filter));
*************** write_get_register_filter_id ()
*** 1490,1495 ****
--- 1528,1646 ----
  	  "}\n");
  }
  
+ /* Print the get_dependent_filter_id, get_dependent_filter_ref functions,
+    and a forward declaration for the eval_dependent_filter function.
+    The first function maps a constraint to a dependent filter id or
+    returns -1.
+    The second function returns the referenced opno for a given filter
+    id, and the third function evaluates a dynamic filter
+    (again indexed by id) to true or false for a given regno, mode,
+    referenced regno and referenced mode.  */
+ 
+ static void
+ write_dependent_filter_helpers_h ()
+ {
+   bool empty_p = dependent_filters.is_empty ();
+ 
+   printf ("\n"
+ 	  "static inline int\n"
+ 	  "get_dependent_filter_id (constraint_num%s)\n"
+ 	  "{\n",
+ 	  empty_p ? "" : " c");
+   if (empty_p)
+     printf ("  return -1;\n");
+   else
+     {
+       for (unsigned i = 0; i < dependent_filters.length (); ++i)
+ 	printf ("  if (c == CONSTRAINT_%s) return %u;\n",
+ 		dependent_filters[i]->c_name, i);
+       printf ("  return -1;\n");
+     }
+   printf ("}\n");
+ 
+   printf ("\n"
+ 	  "static inline int\n"
+ 	  "get_dependent_filter_ref (int id)\n"
+ 	  "{\n");
+   if (empty_p)
+     printf ("  (void) id;\n  return -1;\n");
+   else
+     {
+       printf ("  switch (id)\n    {\n");
+       for (unsigned i = 0; i < dependent_filters.length (); ++i)
+ 	printf ("    case %u: return %d;\n",
+ 		i, dependent_filters[i]->dependent_filter_ref_opno);
+       printf ("    default: return -1;\n    }\n");
+     }
+   printf ("}\n");
+ 
+   printf ("\n"
+ 	  "extern bool\n"
+ 	  "eval_dependent_filter (int id, unsigned int regno,\n"
+ 	  "                       machine_mode mode,\n"
+ 	  "                       unsigned int ref_regno,\n"
+ 	  "                       machine_mode ref_mode);\n");
+ }
+ 
+ /* Print the eval_dependent_filter dispatcher function, and
+    eval_dependent_filter_0, 1,... functions that the dispatcher calls.
+    An eval_dependent_filter_0 calls a target-specified function
+    that determines whether a given regno, mode, referenced regno, and
+    referenced mode combination is valid for this particular constraint,
+    returning true or false.  */
+ 
+ static void
+ write_dependent_filter_functions_c ()
+ {
+   if (dependent_filters.is_empty ())
+     {
+       printf ("\n"
+ 	      "bool\n"
+ 	      "eval_dependent_filter (int, unsigned int, machine_mode,\n"
+ 	      "                       unsigned int, machine_mode)\n"
+ 	      "{\n"
+ 	      "  return true;\n"
+ 	      "}\n");
+       return;
+     }
+ 
+   for (unsigned id = 0; id < dependent_filters.length (); ++id)
+     {
+       const char *filter = dependent_filters[id]->filter;
+       printf ("\n"
+ 	      "/* Dependent filter id=%u.  */\n"
+ 	      "static inline bool\n"
+ 	      "dependent_filter_%u (unsigned int regno, machine_mode mode,\n"
+ 	      "                    unsigned int ref_regno,\n"
+ 	      "                    machine_mode ref_mode)\n"
+ 	      "{\n"
+ 	      "  (void) regno; (void) mode;\n"
+ 	      "  (void) ref_regno; (void) ref_mode;\n"
+ 	      "  return ",
+ 	      id, id);
+       rtx_reader_ptr->print_c_condition (stdout, filter);
+       printf (";\n}\n");
+     }
+ 
+   printf ("\n"
+ 	  "bool\n"
+ 	  "eval_dependent_filter (int id, unsigned int regno,\n"
+ 	  "                       machine_mode mode, unsigned int ref_regno,\n"
+ 	  "                       machine_mode ref_mode)\n"
+ 	  "{\n"
+ 	  "  switch (id)\n"
+ 	  "    {\n");
+   for (unsigned id = 0; id < dependent_filters.length (); ++id)
+     printf ("    case %u:\n"
+ 	    "      return dependent_filter_%u (regno, mode,\n"
+ 	    "                                  ref_regno, ref_mode);\n",
+ 	    id, id);
+   printf ("    default:\n"
+ 	  "      return true;\n"
+ 	  "    }\n"
+ 	  "}\n");
+ }
+ 
  /* Write tm-preds.h.  Unfortunately, it is impossible to forward-declare
     an enumeration in portable C, so we have to condition all these
     prototypes on HAVE_MACHINE_MODES.  */
*************** write_tm_preds_h (void)
*** 1679,1684 ****
--- 1830,1836 ----
  
    write_get_register_filter ();
    write_get_register_filter_id ();
+   write_dependent_filter_helpers_h ();
  
    puts ("#endif /* tm-preds.h */");
  }
*************** write_insn_preds_c (void)
*** 1749,1754 ****
--- 1901,1908 ----
      write_insn_const_int_ok_for_constraint ();
  
    write_init_reg_class_start_regs ();
+ 
+   write_dependent_filter_functions_c ();
  }
  
  /* Argument parsing.  */
*************** main (int argc, const char **argv)
*** 1807,1812 ****
--- 1961,1968 ----
  	break;
        }
  
+   gcc_assert (dependent_filters.length () == num_dependent_filters);
+ 
    choose_enum_order ();
  
    if (gen_header)
diff -Nrcpad gcc-17-20260621/gcc/gensupport.cc gcc-17-20260628/gcc/gensupport.cc
*** gcc-17-20260621/gcc/gensupport.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gensupport.cc	Sun Jun 28 22:32:08 2026
*************** static hash_map<nofree_string_hash, unsi
*** 407,412 ****
--- 407,414 ----
  /* All register filter conditions, indexed by identifier.  */
  vec<const char *> register_filters;
  
+ unsigned int num_dependent_filters;
+ 
  /* Return the unique identifier for filter condition FILTER.  Identifiers
     are assigned automatically when the define_register_constraint is
     parsed.  */
*************** get_register_filter_id (const char *filt
*** 424,442 ****
  static void
  process_define_register_constraint (rtx desc, file_location loc)
  {
!   /* Assign identifiers to each unique register filter condition.  */
!   if (const char *filter = XSTR (desc, 3))
      {
!       bool existed = false;
!       unsigned int &id = register_filter_map.get_or_insert (filter, &existed);
!       if (!existed)
! 	{
! 	  id = register_filters.length ();
! 	  if (id == 32)
! 	    fatal_at (loc, "too many distinct register filters, maximum"
! 		      " is 32");
! 	  register_filters.safe_push (filter);
! 	}
      }
  }
  
--- 426,455 ----
  static void
  process_define_register_constraint (rtx desc, file_location loc)
  {
!   const char *filter = XSTR (desc, 3);
!   if (!filter)
!     return;
! 
!   const char *reference_op = XSTR (desc, 4);
! 
!   if (reference_op)
      {
!       /* Nothing to do here, genpreds, handles dependent filter building.
! 	 genconfig needs to know the number of dependent filters, so at
! 	 least count them.  */
!       num_dependent_filters++;
!       return;
!     }
! 
!   bool existed = false;
!   unsigned int &id = register_filter_map.get_or_insert (filter, &existed);
!   if (!existed)
!     {
!       id = register_filters.length ();
!       if (id == 32)
! 	fatal_at (loc, "too many distinct register filters, maximum"
! 		  " is 32");
!       register_filters.safe_push (filter);
      }
  }
  
diff -Nrcpad gcc-17-20260621/gcc/gensupport.h gcc-17-20260628/gcc/gensupport.h
*** gcc-17-20260621/gcc/gensupport.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gensupport.h	Sun Jun 28 22:32:08 2026
*************** extern unsigned int num_optabs;
*** 111,116 ****
--- 111,118 ----
  extern vec<const char *> register_filters;
  extern unsigned int get_register_filter_id (const char *);
  
+ extern unsigned int num_dependent_filters;
+ 
  /* Information about an instruction name that matches an optab pattern.  */
  struct optab_pattern
  {
diff -Nrcpad gcc-17-20260621/gcc/gimple-fold.cc gcc-17-20260628/gcc/gimple-fold.cc
*** gcc-17-20260621/gcc/gimple-fold.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-fold.cc	Sun Jun 28 22:32:08 2026
*************** gimple_fold_builtin_stdarg (gimple_stmt_
*** 5409,5414 ****
--- 5409,5441 ----
      }
  }
  
+ /* Fold __builtin_call_{code_address,static_chain} builtins.  This handles
+    only the trivial left-over cases not processed in tree-nested.cc.  */
+ 
+ static bool
+ gimple_fold_builtin_call_info (gimple_stmt_iterator *gsi,
+ 			       enum built_in_function fcode)
+ {
+   gcall *stmt = as_a <gcall *>(gsi_stmt (*gsi));
+   tree arg = gimple_call_arg (stmt, 0);
+ 
+   /* The error will be emitted in builtins.cc.  */
+   if (TREE_CODE (arg) != ADDR_EXPR
+       || FUNCTION_DECL != TREE_CODE (TREE_OPERAND (arg, 0)))
+     return false;
+ 
+   /* The case with static chain is handled in tree-nested.cc.  */
+   gcc_assert (!DECL_STATIC_CHAIN (TREE_OPERAND (arg, 0)));
+ 
+   if (fcode == BUILT_IN_CALL_STATIC_CHAIN)
+     replace_call_with_value (gsi, null_pointer_node);
+   else
+     replace_call_with_value (gsi, arg);
+ 
+   return true;
+ }
+ 
+ 
  /* Fold the non-target builtin at *GSI and return whether any simplification
     was made.  */
  
*************** gimple_fold_builtin (gimple_stmt_iterato
*** 5589,5594 ****
--- 5616,5625 ----
      case BUILT_IN_CONSTANT_P:
        return gimple_fold_builtin_constant_p (gsi);
  
+     case BUILT_IN_CALL_CODE_ADDRESS:
+     case BUILT_IN_CALL_STATIC_CHAIN:
+       return gimple_fold_builtin_call_info (gsi, fcode);
+ 
      default:;
      }
  
diff -Nrcpad gcc-17-20260621/gcc/gimple-loop-versioning.cc gcc-17-20260628/gcc/gimple-loop-versioning.cc
*** gcc-17-20260621/gcc/gimple-loop-versioning.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-loop-versioning.cc	Sun Jun 28 22:32:08 2026
*************** hashval_t
*** 449,455 ****
  address_info_hasher::hash (const address_info *info)
  {
    inchash::hash hash;
!   hash.add_int (info->base ? TREE_CODE (info->base) : 0);
    hash.add_int (info->terms.length ());
    for (unsigned int i = 0; i < info->terms.length (); ++i)
      {
--- 449,455 ----
  address_info_hasher::hash (const address_info *info)
  {
    inchash::hash hash;
!   hash.add_int (info->base ? (unsigned) TREE_CODE (info->base) : 0);
    hash.add_int (info->terms.length ());
    for (unsigned int i = 0; i < info->terms.length (); ++i)
      {
diff -Nrcpad gcc-17-20260621/gcc/gimple-predicate-analysis.cc gcc-17-20260628/gcc/gimple-predicate-analysis.cc
*** gcc-17-20260621/gcc/gimple-predicate-analysis.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-predicate-analysis.cc	Sun Jun 28 22:32:08 2026
*************** predicate::superset_of (const predicate
*** 826,831 ****
--- 826,867 ----
    return true;
  }
  
+ /* Remove from every chain in *THIS any (comparison) conjunct whose domain is
+    a superset of every predicate in EDGE_CONDS, i.e. a conjunct implied by all
+    of them.  Returns true if any conjunct was removed.  */
+ 
+ bool
+ predicate::drop_conjuncts_implied_by (const vec<pred_info> &edge_conds)
+ {
+   if (edge_conds.is_empty ())
+     return false;
+ 
+   bool changed = false;
+   for (unsigned i = 0; i < m_preds.length (); i++)
+     {
+       pred_chain &chain = m_preds[i];
+       for (unsigned j = 0; j < chain.length (); )
+ 	{
+ 	  /* Only reason about comparison conjuncts: subset_of negates the
+ 	     code for inverted predicates, which is invalid for e.g. the
+ 	     BIT_AND_EXPR of an "x & mask" predicate.  */
+ 	  bool implied = TREE_CODE_CLASS (chain[j].cond_code) == tcc_comparison;
+ 	  for (unsigned k = 0; implied && k < edge_conds.length (); k++)
+ 	    if (!subset_of (edge_conds[k], chain[j]))
+ 	      implied = false;
+ 
+ 	  if (implied)
+ 	    {
+ 	      chain.ordered_remove (j);
+ 	      changed = true;
+ 	    }
+ 	  else
+ 	    j++;
+ 	}
+     }
+   return changed;
+ }
+ 
  /* Create a predicate of the form OP != 0 and push it the work list CHAIN.  */
  
  static void
*************** get_pred_info_from_cmp (const gimple *cm
*** 857,862 ****
--- 893,914 ----
    return pred;
  }
  
+ /* Return a pred_info for the GIMPLE_COND ending E's source block.  The true
+    edge corresponds to the condition holding, so a false edge yields the
+    inverted predicate.  */
+ 
+ static pred_info
+ get_pred_info_from_cond_edge (edge e)
+ {
+   gcond *cond = as_a<gcond *> (*gsi_last_bb (e->src));
+   pred_info pred;
+   pred.pred_lhs = gimple_cond_lhs (cond);
+   pred.pred_rhs = gimple_cond_rhs (cond);
+   pred.cond_code = gimple_cond_code (cond);
+   pred.invert = !!(e->flags & EDGE_FALSE_VALUE);
+   return pred;
+ }
+ 
  /* If PHI is a degenerate phi with all operands having the same value (relop)
     update *PRED to that value and return true.  Otherwise return false.  */
  
*************** predicate::init_from_control_deps (const
*** 1826,1836 ****
  	      /* The true edge corresponds to the uninteresting condition.
  		 Add the negated predicate(s) for the edge to record
  		 the interesting condition.  */
! 	      pred_info one_pred;
! 	      one_pred.pred_lhs = gimple_cond_lhs (cond_stmt);
! 	      one_pred.pred_rhs = gimple_cond_rhs (cond_stmt);
! 	      one_pred.cond_code = gimple_cond_code (cond_stmt);
! 	      one_pred.invert = !!(e->flags & EDGE_FALSE_VALUE);
  
  	      t_chain.safe_push (one_pred);
  
--- 1878,1884 ----
  	      /* The true edge corresponds to the uninteresting condition.
  		 Add the negated predicate(s) for the edge to record
  		 the interesting condition.  */
! 	      pred_info one_pred = get_pred_info_from_cond_edge (e);
  
  	      t_chain.safe_push (one_pred);
  
*************** uninit_analysis::is_use_guarded (gimple
*** 2242,2247 ****
--- 2290,2333 ----
    if (m_phi_def_preds.superset_of (use_preds))
      return true;
  
+   /* The superset test fails when a guard that distinguishes the defined from
+      the undefined value sits on the PHI's maybe-undef incoming edge rather
+      than on the use's control-dependence chain -- e.g. after ifcombine merges
+      the conditions guarding the definition.  A conjunct of the definition
+      predicate that is implied by the incoming-edge condition of every
+      maybe-undef operand cannot make the use unsafe: when that conjunct is
+      false the maybe-undef edge is not taken either, so no undefined value
+      reaches the PHI.  Drop such conjuncts from a copy of the definition
+      predicate and retry; bail unless every maybe-undef operand arrives on a
+      simple conditional edge.  */
+   auto_vec<pred_info, 4> edge_conds;
+   unsigned nargs = gimple_phi_num_args (phi);
+   for (unsigned i = 0; i < nargs && i < m_eval.max_phi_args; i++)
+     {
+       if (!MASK_TEST_BIT (opnds, i))
+ 	continue;
+       edge e = gimple_phi_arg_edge (phi, i);
+       /* Walk up through forwarder blocks to the controlling conditional; a
+ 	 single-predecessor forwarder preserves the implication.  */
+       while (single_pred_p (e->src) && single_succ_p (e->src))
+ 	e = single_pred_edge (e->src);
+       if (EDGE_COUNT (e->src->succs) != 2
+ 	  || !safe_dyn_cast <gcond *> (*gsi_last_bb (e->src)))
+ 	{
+ 	  edge_conds.truncate (0);
+ 	  break;
+ 	}
+       edge_conds.safe_push (get_pred_info_from_cond_edge (e));
+     }
+ 
+   if (!edge_conds.is_empty ())
+     {
+       predicate relaxed (m_phi_def_preds);
+       if (relaxed.drop_conjuncts_implied_by (edge_conds)
+ 	  && relaxed.superset_of (use_preds))
+ 	return true;
+     }
+ 
    return false;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/gimple-predicate-analysis.h gcc-17-20260628/gcc/gimple-predicate-analysis.h
*** gcc-17-20260621/gcc/gimple-predicate-analysis.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-predicate-analysis.h	Sun Jun 28 22:32:08 2026
*************** class predicate
*** 91,96 ****
--- 91,98 ----
  
    bool superset_of (const predicate &) const;
  
+   bool drop_conjuncts_implied_by (const vec<pred_info> &);
+ 
  private:
  
    bool includes (const pred_chain &) const;
diff -Nrcpad gcc-17-20260621/gcc/gimple-range.cc gcc-17-20260628/gcc/gimple-range.cc
*** gcc-17-20260621/gcc/gimple-range.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-range.cc	Sun Jun 28 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 36,41 ****
--- 36,42 ----
  #include "gimple-range.h"
  #include "gimple-fold.h"
  #include "gimple-walk.h"
+ #include "dbgcnt.h"
  
  gimple_ranger::gimple_ranger (bool use_imm_uses) :
  	non_executable_edge_flag (cfun),
*************** gimple_ranger::const_query ()
*** 78,86 ****
--- 79,93 ----
    return m_cache.const_query ();
  }
  
+ // Implement range of EXPR on stmt S, and return it in R.
+ // Return false if no range can be calculated.
+ 
  bool
  gimple_ranger::range_of_expr (vrange &r, tree expr, gimple *stmt)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_of_expr (r, expr, stmt);
+ 
    unsigned idx;
    if (!gimple_range_ssa_p (expr))
      return get_tree_range (r, expr, stmt);
*************** gimple_ranger::range_of_expr (vrange &r,
*** 98,105 ****
  	fputs ("\n", dump_file);
      }
  
!   // If there is no statement, just get the global value.
!   if (!stmt)
      {
        value_range tmp (TREE_TYPE (expr));
        // If there is no global range for EXPR yet, try to evaluate it.
--- 105,113 ----
  	fputs ("\n", dump_file);
      }
  
!   // If there is no statement or stmt happens to be not in the IL,
!   // just get the global value.
!   if (!stmt || !gimple_bb (stmt))
      {
        value_range tmp (TREE_TYPE (expr));
        // If there is no global range for EXPR yet, try to evaluate it.
*************** gimple_ranger::range_of_expr (vrange &r,
*** 155,160 ****
--- 163,171 ----
  bool
  gimple_ranger::range_on_entry (vrange &r, basic_block bb, tree name)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_on_entry (r, bb, name);
+ 
    if (!gimple_range_ssa_p (name))
      return get_tree_range (r, name, NULL, bb, NULL);
  
*************** gimple_ranger::range_on_entry (vrange &r
*** 185,190 ****
--- 196,204 ----
  bool
  gimple_ranger::range_on_exit (vrange &r, basic_block bb, tree name)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_on_exit (r, bb, name);
+ 
    if (!gimple_range_ssa_p (name))
      return get_tree_range (r, name, NULL, NULL, bb);
  
*************** gimple_ranger::range_on_exit (vrange &r,
*** 224,229 ****
--- 238,246 ----
  bool
  gimple_ranger::range_on_edge (vrange &r, edge e, tree name)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_on_edge (r, e, name);
+ 
    value_range edge_range (TREE_TYPE (name));
  
    if (!r.supports_type_p (TREE_TYPE (name)))
*************** gimple_ranger::fold_range_internal (vran
*** 291,296 ****
--- 308,316 ----
  bool
  gimple_ranger::range_of_stmt (vrange &r, gimple *s, tree name)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_of_stmt (r, s, name);
+ 
    bool res;
    r.set_undefined ();
  
*************** dom_ranger::~dom_ranger ()
*** 774,779 ****
--- 794,802 ----
  bool
  dom_ranger::range_of_expr (vrange &r, tree expr, gimple *s)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_of_expr (r, expr, s);
+ 
    unsigned idx;
    if (!gimple_range_ssa_p (expr))
      return get_tree_range (r, expr, s);
*************** dom_ranger::range_of_expr (vrange &r, tr
*** 807,812 ****
--- 830,838 ----
  bool
  dom_ranger::range_on_edge (vrange &r, edge e, tree expr)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_on_edge (r, e, expr);
+ 
    if (!gimple_range_ssa_p (expr))
      return get_tree_range (r, expr, NULL, NULL, NULL, e);
  
*************** dom_ranger::range_in_bb (vrange &r, basi
*** 855,860 ****
--- 881,889 ----
  bool
  dom_ranger::range_of_stmt (vrange &r, gimple *s, tree name)
  {
+   if (!dbg_cnt (ranger_cnt))
+     return get_global_range_query ()->range_of_stmt (r, s, name);
+ 
    unsigned idx;
    bool ret;
    if (!name)
diff -Nrcpad gcc-17-20260621/gcc/gimple-ssa-pta-constraints.cc gcc-17-20260628/gcc/gimple-ssa-pta-constraints.cc
*** gcc-17-20260621/gcc/gimple-ssa-pta-constraints.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-ssa-pta-constraints.cc	Sun Jun 28 22:32:08 2026
*************** handle_call_arg (gcall *stmt, tree arg,
*** 1464,1472 ****
      }
  }
  
! /* For non-IPA mode, generate constraints necessary for a call on the
!    RHS and collect return value constraint to RESULTS to be used later in
!    handle_lhs_call.
  
     IMPLICIT_EAF_FLAGS are added to each function argument.  If
     WRITES_GLOBAL_MEMORY is true function is assumed to possibly write to global
--- 1464,1472 ----
      }
  }
  
! /* For non-IPA mode or for a function with body not available.
!    Generate constraints necessary for a call on the RHS and collect return
!    value constraint to RESULTS to be used later in handle_lhs_call.
  
     IMPLICIT_EAF_FLAGS are added to each function argument.  If
     WRITES_GLOBAL_MEMORY is true function is assumed to possibly write to global
diff -Nrcpad gcc-17-20260621/gcc/gimple-walk.h gcc-17-20260628/gcc/gimple-walk.h
*** gcc-17-20260621/gcc/gimple-walk.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimple-walk.h	Sun Jun 28 22:32:08 2026
*************** struct walk_stmt_info
*** 57,76 ****
       statement 'foo (&var)', the flag VAL_ONLY will initially be set
       to true, however, when walking &var, the operand of that
       ADDR_EXPR does not need to be a GIMPLE value.  */
!   BOOL_BITFIELD val_only : 1;
  
    /* True if we are currently walking the LHS of an assignment.  */
!   BOOL_BITFIELD is_lhs : 1;
  
    /* Optional.  Set to true by the callback functions if they made any
       changes.  */
!   BOOL_BITFIELD changed : 1;
  
    /* True if we're interested in location information.  */
!   BOOL_BITFIELD want_locations : 1;
  
    /* True if we've removed the statement that was processed.  */
!   BOOL_BITFIELD removed_stmt : 1;
  };
  
  /* Callback for walk_gimple_stmt.  Called for every statement found
--- 57,76 ----
       statement 'foo (&var)', the flag VAL_ONLY will initially be set
       to true, however, when walking &var, the operand of that
       ADDR_EXPR does not need to be a GIMPLE value.  */
!   bool val_only : 1;
  
    /* True if we are currently walking the LHS of an assignment.  */
!   bool is_lhs : 1;
  
    /* Optional.  Set to true by the callback functions if they made any
       changes.  */
!   bool changed : 1;
  
    /* True if we're interested in location information.  */
!   bool want_locations : 1;
  
    /* True if we've removed the statement that was processed.  */
!   bool removed_stmt : 1;
  };
  
  /* Callback for walk_gimple_stmt.  Called for every statement found
diff -Nrcpad gcc-17-20260621/gcc/gimplify.cc gcc-17-20260628/gcc/gimplify.cc
*** gcc-17-20260621/gcc/gimplify.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/gimplify.cc	Sun Jun 28 22:32:08 2026
*************** gimplify_omp_affinity (tree *list_p, gim
*** 9618,9636 ****
  		  }
  		for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
  		  {
! 		    if (gimplify_expr (&TREE_VEC_ELT (it, 1), pre_p, NULL,
  				       is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| gimplify_expr (&TREE_VEC_ELT (it, 2), pre_p, NULL,
  					  is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| gimplify_expr (&TREE_VEC_ELT (it, 3), pre_p, NULL,
  					  is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| (gimplify_expr (&TREE_VEC_ELT (it, 4), pre_p, NULL,
! 					   is_gimple_val, fb_rvalue)
  			    == GS_ERROR))
  		      return;
  		  }
  	    last_iter = TREE_PURPOSE (t);
! 	    tree block = TREE_VEC_ELT (TREE_PURPOSE (t), 5);
  	    last_bind = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block),
  				NULL, block);
  	    last_body = &BIND_EXPR_BODY (last_bind);
--- 9618,9636 ----
  		  }
  		for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
  		  {
! 		    if (gimplify_expr (&OMP_ITERATOR_BEGIN (it), pre_p, NULL,
  				       is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| gimplify_expr (&OMP_ITERATOR_END (it), pre_p, NULL,
  					  is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| gimplify_expr (&OMP_ITERATOR_STEP (it), pre_p, NULL,
  					  is_gimple_val, fb_rvalue) == GS_ERROR
! 			|| (gimplify_expr (&OMP_ITERATOR_ORIG_STEP (it), pre_p,
! 					   NULL, is_gimple_val, fb_rvalue)
  			    == GS_ERROR))
  		      return;
  		  }
  	    last_iter = TREE_PURPOSE (t);
! 	    tree block = OMP_ITERATOR_BLOCK (TREE_PURPOSE (t));
  	    last_bind = build3 (BIND_EXPR, void_type_node, BLOCK_VARS (block),
  				NULL, block);
  	    last_body = &BIND_EXPR_BODY (last_bind);
*************** gimplify_omp_affinity (tree *list_p, gim
*** 9638,9647 ****
  	    location_t loc = OMP_CLAUSE_LOCATION (c);
  	    for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
  	      {
! 		tree var = TREE_VEC_ELT (it, 0);
! 		tree begin = TREE_VEC_ELT (it, 1);
! 		tree end = TREE_VEC_ELT (it, 2);
! 		tree step = TREE_VEC_ELT (it, 3);
  		loc = DECL_SOURCE_LOCATION (var);
  		tree tem = build2_loc (loc, MODIFY_EXPR, void_type_node,
  				       var, begin);
--- 9638,9647 ----
  	    location_t loc = OMP_CLAUSE_LOCATION (c);
  	    for (tree it = TREE_PURPOSE (t); it; it = TREE_CHAIN (it))
  	      {
! 		tree var = OMP_ITERATOR_VAR (it);
! 		tree begin = OMP_ITERATOR_BEGIN (it);
! 		tree end = OMP_ITERATOR_END (it);
! 		tree step = OMP_ITERATOR_STEP (it);
  		loc = DECL_SOURCE_LOCATION (var);
  		tree tem = build2_loc (loc, MODIFY_EXPR, void_type_node,
  				       var, begin);
*************** compute_omp_iterator_count (tree it, gim
*** 9718,9737 ****
    tree tcnt = size_one_node;
    for (; it; it = TREE_CHAIN (it))
      {
!       if (gimplify_expr (&TREE_VEC_ELT (it, 1), pre_p, NULL,
  			 is_gimple_val, fb_rvalue) == GS_ERROR
! 	  || gimplify_expr (&TREE_VEC_ELT (it, 2), pre_p, NULL,
  			    is_gimple_val, fb_rvalue) == GS_ERROR
! 	  || gimplify_expr (&TREE_VEC_ELT (it, 3), pre_p, NULL,
  			    is_gimple_val, fb_rvalue) == GS_ERROR
! 	  || (gimplify_expr (&TREE_VEC_ELT (it, 4), pre_p, NULL,
  			     is_gimple_val, fb_rvalue) == GS_ERROR))
  	return NULL_TREE;
!       tree var = TREE_VEC_ELT (it, 0);
!       tree begin = TREE_VEC_ELT (it, 1);
!       tree end = TREE_VEC_ELT (it, 2);
!       tree step = TREE_VEC_ELT (it, 3);
!       tree orig_step = TREE_VEC_ELT (it, 4);
        tree type = TREE_TYPE (var);
        tree stype = TREE_TYPE (step);
        location_t loc = DECL_SOURCE_LOCATION (var);
--- 9718,9737 ----
    tree tcnt = size_one_node;
    for (; it; it = TREE_CHAIN (it))
      {
!       if (gimplify_expr (&OMP_ITERATOR_BEGIN (it), pre_p, NULL,
  			 is_gimple_val, fb_rvalue) == GS_ERROR
! 	  || gimplify_expr (&OMP_ITERATOR_END (it), pre_p, NULL,
  			    is_gimple_val, fb_rvalue) == GS_ERROR
! 	  || gimplify_expr (&OMP_ITERATOR_STEP (it), pre_p, NULL,
  			    is_gimple_val, fb_rvalue) == GS_ERROR
! 	  || (gimplify_expr (&OMP_ITERATOR_ORIG_STEP (it), pre_p, NULL,
  			     is_gimple_val, fb_rvalue) == GS_ERROR))
  	return NULL_TREE;
!       tree var = OMP_ITERATOR_VAR (it);
!       tree begin = OMP_ITERATOR_BEGIN (it);
!       tree end = OMP_ITERATOR_END (it);
!       tree step = OMP_ITERATOR_STEP (it);
!       tree orig_step = OMP_ITERATOR_ORIG_STEP (it);
        tree type = TREE_TYPE (var);
        tree stype = TREE_TYPE (step);
        location_t loc = DECL_SOURCE_LOCATION (var);
*************** build_omp_iterator_loop (tree it, gimple
*** 9799,9805 ****
  {
    if (*last_bind)
      gimplify_and_add (*last_bind, pre_p);
!   tree block = TREE_VEC_ELT (it, 5);
    tree block_stmts = lang_GNU_Fortran () ? BLOCK_SUBBLOCKS (block) : NULL_TREE;
    *last_bind = build3 (BIND_EXPR, void_type_node,
  		       BLOCK_VARS (block), NULL, block);
--- 9799,9805 ----
  {
    if (*last_bind)
      gimplify_and_add (*last_bind, pre_p);
!   tree block = OMP_ITERATOR_BLOCK (it);
    tree block_stmts = lang_GNU_Fortran () ? BLOCK_SUBBLOCKS (block) : NULL_TREE;
    *last_bind = build3 (BIND_EXPR, void_type_node,
  		       BLOCK_VARS (block), NULL, block);
*************** build_omp_iterator_loop (tree it, gimple
*** 9807,9818 ****
    tree *p = &BIND_EXPR_BODY (*last_bind);
    for (; it; it = TREE_CHAIN (it))
      {
!       tree var = TREE_VEC_ELT (it, 0);
!       tree begin = TREE_VEC_ELT (it, 1);
!       tree end = TREE_VEC_ELT (it, 2);
!       tree step = TREE_VEC_ELT (it, 3);
!       tree orig_step = TREE_VEC_ELT (it, 4);
!       block = TREE_VEC_ELT (it, 5);
        tree type = TREE_TYPE (var);
        location_t loc = DECL_SOURCE_LOCATION (var);
        /* Emit:
--- 9807,9818 ----
    tree *p = &BIND_EXPR_BODY (*last_bind);
    for (; it; it = TREE_CHAIN (it))
      {
!       tree var = OMP_ITERATOR_VAR (it);
!       tree begin = OMP_ITERATOR_BEGIN (it);
!       tree end = OMP_ITERATOR_END (it);
!       tree step = OMP_ITERATOR_STEP (it);
!       tree orig_step = OMP_ITERATOR_ORIG_STEP (it);
!       block = OMP_ITERATOR_BLOCK (it);
        tree type = TREE_TYPE (var);
        location_t loc = DECL_SOURCE_LOCATION (var);
        /* Emit:
*************** find_var_decl (tree *tp, int *, void *da
*** 9888,9904 ****
    return NULL_TREE;
  }
  
! /* Returns an element-by-element copy of OMP iterator tree IT.  */
! 
  static tree
! copy_omp_iterator (tree it, int elem_count = -1)
  {
!   if (elem_count < 0)
!     elem_count = TREE_VEC_LENGTH (it);
!   tree new_it = make_tree_vec (elem_count);
    for (int i = 0; i < TREE_VEC_LENGTH (it); i++)
      TREE_VEC_ELT (new_it, i) = TREE_VEC_ELT (it, i);
- 
    return new_it;
  }
  
--- 9888,9904 ----
    return NULL_TREE;
  }
  
! /* Returns an element-by-element copy of OMP iterator tree IT.  If
!    EXPAND is true, force the result to be an expanded iterator; otherwise
!    it makes the copy the same size as IT.  */
  static tree
! copy_omp_iterator (tree it, bool expand = false)
  {
!   int elem_count = TREE_VEC_LENGTH (it);
!   tree new_it =
!     (expand ? make_expanded_omp_iterator () : make_tree_vec (elem_count));
    for (int i = 0; i < TREE_VEC_LENGTH (it); i++)
      TREE_VEC_ELT (new_it, i) = TREE_VEC_ELT (it, i);
    return new_it;
  }
  
*************** remove_unused_omp_iterator_vars (tree *l
*** 9943,9949 ****
        bool need_new_iterators = false;
        for (tree it = OMP_CLAUSE_ITERATORS (c); it; it = TREE_CHAIN (it))
  	{
! 	  tree var = TREE_VEC_ELT (it, 0);
  	  tree t = walk_tree (&OMP_CLAUSE_DECL (c), find_var_decl, var, NULL);
  	  if (t == NULL_TREE)
  	    t = walk_tree (&OMP_CLAUSE_SIZE (c), find_var_decl, var, NULL);
--- 9943,9949 ----
        bool need_new_iterators = false;
        for (tree it = OMP_CLAUSE_ITERATORS (c); it; it = TREE_CHAIN (it))
  	{
! 	  tree var = OMP_ITERATOR_VAR (it);
  	  tree t = walk_tree (&OMP_CLAUSE_DECL (c), find_var_decl, var, NULL);
  	  if (t == NULL_TREE)
  	    t = walk_tree (&OMP_CLAUSE_SIZE (c), find_var_decl, var, NULL);
*************** remove_unused_omp_iterator_vars (tree *l
*** 9989,9995 ****
  	  for (tree it = OMP_CLAUSE_ITERATORS (c); it && i < vars.length();
  	       it = TREE_CHAIN (it))
  	    {
! 	      tree var = TREE_VEC_ELT (it, 0);
  	      if (var == vars[i])
  		{
  		  *new_iters_p = copy_omp_iterator (it);
--- 9989,9995 ----
  	  for (tree it = OMP_CLAUSE_ITERATORS (c); it && i < vars.length();
  	       it = TREE_CHAIN (it))
  	    {
! 	      tree var = OMP_ITERATOR_VAR (it);
  	      if (var == vars[i])
  		{
  		  *new_iters_p = copy_omp_iterator (it);
*************** remove_unused_omp_iterator_vars (tree *l
*** 9997,10009 ****
  					    DECL_NAME (var), TREE_TYPE (var));
  		  DECL_ARTIFICIAL (*new_vars_p) = 1;
  		  DECL_CONTEXT (*new_vars_p) = DECL_CONTEXT (var);
! 		  TREE_VEC_ELT (*new_iters_p, 0) = *new_vars_p;
  		  new_iters_p = &TREE_CHAIN (*new_iters_p);
  		  new_vars_p = &DECL_CHAIN (*new_vars_p);
  		  i++;
  		}
  	    }
! 	  tree old_block = TREE_VEC_ELT (OMP_CLAUSE_ITERATORS (c), 5);
  	  tree new_block = make_node (BLOCK);
  	  BLOCK_VARS (new_block) = new_vars;
  	  if (BLOCK_SUBBLOCKS (old_block))
--- 9997,10009 ----
  					    DECL_NAME (var), TREE_TYPE (var));
  		  DECL_ARTIFICIAL (*new_vars_p) = 1;
  		  DECL_CONTEXT (*new_vars_p) = DECL_CONTEXT (var);
! 		  OMP_ITERATOR_VAR (*new_iters_p) = *new_vars_p;
  		  new_iters_p = &TREE_CHAIN (*new_iters_p);
  		  new_vars_p = &DECL_CHAIN (*new_vars_p);
  		  i++;
  		}
  	    }
! 	  tree old_block = OMP_ITERATOR_BLOCK (OMP_CLAUSE_ITERATORS (c));
  	  tree new_block = make_node (BLOCK);
  	  BLOCK_VARS (new_block) = new_vars;
  	  if (BLOCK_SUBBLOCKS (old_block))
*************** remove_unused_omp_iterator_vars (tree *l
*** 10011,10017 ****
  	      BLOCK_SUBBLOCKS (new_block) = BLOCK_SUBBLOCKS (old_block);
  	      BLOCK_SUBBLOCKS (old_block) = NULL_TREE;
  	    }
! 	  TREE_VEC_ELT (new_iters, 5) = new_block;
  	  new_iterators.safe_push (new_iters);
  	  iter_vars.safe_push (vars.copy ());
  	  OMP_CLAUSE_ITERATORS (c) = new_iters;
--- 10011,10017 ----
  	      BLOCK_SUBBLOCKS (new_block) = BLOCK_SUBBLOCKS (old_block);
  	      BLOCK_SUBBLOCKS (old_block) = NULL_TREE;
  	    }
! 	  OMP_ITERATOR_BLOCK (new_iters) = new_block;
  	  new_iterators.safe_push (new_iters);
  	  iter_vars.safe_push (vars.copy ());
  	  OMP_CLAUSE_ITERATORS (c) = new_iters;
*************** remove_unused_omp_iterator_vars (tree *l
*** 10022,10028 ****
        for (tree it = OMP_CLAUSE_ITERATORS (c); it; it = TREE_CHAIN (it))
  	{
  	  tree old_var = vars[i++];
! 	  tree new_var = TREE_VEC_ELT (it, 0);
  	  remap_omp_iterator_var (&OMP_CLAUSE_DECL (c), old_var, new_var);
  	  remap_omp_iterator_var (&OMP_CLAUSE_SIZE (c), old_var, new_var);
  	}
--- 10022,10028 ----
        for (tree it = OMP_CLAUSE_ITERATORS (c); it; it = TREE_CHAIN (it))
  	{
  	  tree old_var = vars[i++];
! 	  tree new_var = OMP_ITERATOR_VAR (it);
  	  remap_omp_iterator_var (&OMP_CLAUSE_DECL (c), old_var, new_var);
  	  remap_omp_iterator_var (&OMP_CLAUSE_SIZE (c), old_var, new_var);
  	}
*************** build_omp_iterators_loops (tree *list_p,
*** 10127,10138 ****
        gimplify_and_add (tem, loops_seq_p);
  
        /* Make a copy of the iterator with extra info at the end.  */
!       int elem_count = TREE_VEC_LENGTH (OMP_CLAUSE_ITERATORS (c));
!       tree new_iterator = copy_omp_iterator (OMP_CLAUSE_ITERATORS (c),
! 					     elem_count + 3);
!       TREE_VEC_ELT (new_iterator, elem_count) = loop.body_label;
!       TREE_VEC_ELT (new_iterator, elem_count + 1) = elems;
!       TREE_VEC_ELT (new_iterator, elem_count + 2) = loop.index;
        TREE_CHAIN (new_iterator) = TREE_CHAIN (OMP_CLAUSE_ITERATORS (c));
        OMP_CLAUSE_ITERATORS (c) = new_iterator;
  
--- 10127,10136 ----
        gimplify_and_add (tem, loops_seq_p);
  
        /* Make a copy of the iterator with extra info at the end.  */
!       tree new_iterator = copy_omp_iterator (OMP_CLAUSE_ITERATORS (c), true);
!       OMP_ITERATOR_LABEL (new_iterator) = loop.body_label;
!       OMP_ITERATOR_INDEX (new_iterator) = loop.index;
!       OMP_ITERATOR_ELEMS (new_iterator) = elems;
        TREE_CHAIN (new_iterator) = TREE_CHAIN (OMP_CLAUSE_ITERATORS (c));
        OMP_CLAUSE_ITERATORS (c) = new_iterator;
  
*************** enter_omp_iterator_loop_context_1 (tree
*** 10183,10189 ****
  	  {
  	    glabel *label_stmt = as_a<glabel *> (stmt);
  	    tree label = gimple_label_label (label_stmt);
! 	    if (label == TREE_VEC_ELT (iterator, 6))
  	      return loops_seq_p;
  	  }
  	  break;
--- 10181,10187 ----
  	  {
  	    glabel *label_stmt = as_a<glabel *> (stmt);
  	    tree label = gimple_label_label (label_stmt);
! 	    if (label == OMP_ITERATOR_LABEL (iterator))
  	      return loops_seq_p;
  	  }
  	  break;
*************** extract_base_bit_offset (tree base, poly
*** 10705,10712 ****
  	 actual locations of the iterated mappings are elsewhere.  */
        tree it;
        for (it = iterator; it; it = TREE_CHAIN (it))
! 	base = simplify_replace_tree (base, TREE_VEC_ELT (it, 0),
! 				      TREE_VEC_ELT (it, 1));
      }
  
    base = get_inner_reference (base, &bitsize, &bitpos, &offset, &mode,
--- 10703,10710 ----
  	 actual locations of the iterated mappings are elsewhere.  */
        tree it;
        for (it = iterator; it; it = TREE_CHAIN (it))
! 	base = simplify_replace_tree (base, OMP_ITERATOR_VAR (it),
! 				      OMP_ITERATOR_BEGIN (it));
      }
  
    base = get_inner_reference (base, &bitsize, &bitpos, &offset, &mode,
diff -Nrcpad gcc-17-20260621/gcc/ira-build.cc gcc-17-20260628/gcc/ira-build.cc
*** gcc-17-20260621/gcc/ira-build.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ira-build.cc	Sun Jun 28 22:32:08 2026
*************** ira_create_allocno (int regno, bool cap_
*** 499,504 ****
--- 499,505 ----
    ALLOCNO_FREQ (a) = 0;
    ALLOCNO_MIGHT_CONFLICT_WITH_PARENT_P (a) = false;
    ALLOCNO_SET_REGISTER_FILTERS (a, 0);
+   ALLOCNO_DEPENDENT_FILTERS (a) = NULL;
    ALLOCNO_HARD_REGNO (a) = -1;
    ALLOCNO_CALL_FREQ (a) = 0;
    ALLOCNO_CALLS_CROSSED_NUM (a) = 0;
*************** ira_print_expanded_allocno (ira_allocno_
*** 874,879 ****
--- 875,893 ----
    fprintf (ira_dump_file, ")");
  }
  
+ /* Copy SRC's dependent-filter list to DST's.  */
+ 
+ static void
+ copy_dependent_filters (ira_allocno_t dst, ira_allocno_t src)
+ {
+   for (auto *filter = ALLOCNO_DEPENDENT_FILTERS (src);
+        filter;
+        filter = filter->next)
+     ira_add_dependent_filter (dst, filter->id, filter->mode,
+ 			      filter->ref_allocno, filter->ref_hard_regno,
+ 			      filter->ref_mode);
+ }
+ 
  /* Create and return the cap representing allocno A in the
     parent loop.  */
  static ira_allocno_t
*************** create_cap_allocno (ira_allocno_t a)
*** 904,909 ****
--- 918,925 ----
    ALLOCNO_FREQ (cap) = ALLOCNO_FREQ (a);
    ALLOCNO_CALL_FREQ (cap) = ALLOCNO_CALL_FREQ (a);
    ALLOCNO_SET_REGISTER_FILTERS (cap, ALLOCNO_REGISTER_FILTERS (a));
+   ALLOCNO_DEPENDENT_FILTERS (cap) = NULL;
+   copy_dependent_filters (cap, a);
  
    merge_hard_reg_conflicts (a, cap, false);
  
*************** ira_free_allocno_costs (ira_allocno_t a)
*** 1144,1149 ****
--- 1160,1172 ----
  static void
  finish_allocno (ira_allocno_t a)
  {
+   auto *filter = ALLOCNO_DEPENDENT_FILTERS (a);
+   while (filter)
+     {
+       auto *next = filter->next;
+       ira_free (filter);
+       filter = next;
+     }
    ira_free_allocno_costs (a);
    allocno_pool.remove (a);
  }
*************** propagate_allocno_info (void)
*** 2070,2075 ****
--- 2093,2099 ----
  	  ALLOCNO_SET_REGISTER_FILTERS (parent_a,
  					ALLOCNO_REGISTER_FILTERS (parent_a)
  					| ALLOCNO_REGISTER_FILTERS (a));
+ 	  copy_dependent_filters (parent_a, a);
  
  	  /* If A's allocation can differ from PARENT_A's, we can if necessary
  	     spill PARENT_A on entry to A's loop and restore it afterwards.
*************** propagate_some_info_from_allocno (ira_al
*** 2474,2479 ****
--- 2498,2504 ----
    ALLOCNO_SET_REGISTER_FILTERS (a,
  				ALLOCNO_REGISTER_FILTERS (from_a)
  				| ALLOCNO_REGISTER_FILTERS (a));
+   copy_dependent_filters (a, from_a);
  
    ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (a)
      += ALLOCNO_EXCESS_PRESSURE_POINTS_NUM (from_a);
diff -Nrcpad gcc-17-20260621/gcc/ira-color.cc gcc-17-20260628/gcc/ira-color.cc
*** gcc-17-20260621/gcc/ira-color.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ira-color.cc	Sun Jun 28 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 35,46 ****
--- 35,85 ----
  #include "ira-int.h"
  #include "reload.h"
  #include "cfgloop.h"
+ #include "lra.h"
  
  /* To prevent soft conflict detection becoming quadratic in the
     loop depth.  Only for very pathological cases, so it hardly
     seems worth a --param.  */
  const int max_soft_conflict_loop_depth = 64;
  
+ /* Return the regset for allocno A that represents all registers
+    allowed by A's dependent filters.  */
+ 
+ static HARD_REG_SET
+ ira_dependent_filter (ira_allocno_t a)
+ {
+   HARD_REG_SET allowed;
+   SET_HARD_REG_SET (allowed);
+ 
+   for (auto *dep_filter = ALLOCNO_DEPENDENT_FILTERS (a);
+        dep_filter;
+        dep_filter = dep_filter->next)
+     {
+       unsigned int ref_regno;
+       /* Nothing to filter if the referenced allocno didn't get a
+ 	 hardreg.  */
+       if (dep_filter->ref_allocno)
+ 	{
+ 	  int hr = ALLOCNO_HARD_REGNO (dep_filter->ref_allocno);
+ 	  if (hr < 0)
+ 	    continue;
+ 	  ref_regno = (unsigned int) hr;
+ 	}
+       else
+ 	{
+ 	  ref_regno = dep_filter->ref_hard_regno;
+ 	  if (ref_regno >= FIRST_PSEUDO_REGISTER)
+ 	    continue;
+ 	}
+       const HARD_REG_SET *filter
+ 	= lra_get_dependent_filter (dep_filter->id, dep_filter->mode,
+ 				    ref_regno, dep_filter->ref_mode,
+ 				    false);
+       allowed &= *filter;
+     }
+   return allowed;
+ }
+ 
  typedef struct allocno_hard_regs *allocno_hard_regs_t;
  
  /* The structure contains information about hard registers can be
*************** spill_soft_conflicts (ira_allocno_t a, b
*** 1968,1979 ****
  static bool
  assign_hard_reg (ira_allocno_t a, bool retry_p)
  {
!   HARD_REG_SET conflicting_regs[2], profitable_hard_regs;
    int i, j, hard_regno, best_hard_regno, class_size;
    int cost, mem_cost, min_cost, full_cost, min_full_cost, nwords, word;
    int *a_costs;
    enum reg_class aclass;
    machine_mode mode;
    static int costs[FIRST_PSEUDO_REGISTER], full_costs[FIRST_PSEUDO_REGISTER];
    int saved_nregs;
    enum reg_class rclass;
--- 2007,2019 ----
  static bool
  assign_hard_reg (ira_allocno_t a, bool retry_p)
  {
!   HARD_REG_SET conflicting_regs[2], profitable_hard_regs, dep_allowed;
    int i, j, hard_regno, best_hard_regno, class_size;
    int cost, mem_cost, min_cost, full_cost, min_full_cost, nwords, word;
    int *a_costs;
    enum reg_class aclass;
    machine_mode mode;
+   bool dep_filter_p;
    static int costs[FIRST_PSEUDO_REGISTER], full_costs[FIRST_PSEUDO_REGISTER];
    int saved_nregs;
    enum reg_class rclass;
*************** assign_hard_reg (ira_allocno_t a, bool r
*** 2194,2199 ****
--- 2234,2242 ----
       allocated first (it is usual practice to put them first in
       REG_ALLOC_ORDER).  */
    mode = ALLOCNO_MODE (a);
+   dep_filter_p = NUM_DEPENDENT_FILTERS && ALLOCNO_DEPENDENT_FILTERS (a);
+   if (dep_filter_p)
+     dep_allowed = ira_dependent_filter (a);
    for (i = 0; i < class_size; i++)
      {
        hard_regno = ira_class_hard_regs[aclass][i];
*************** assign_hard_reg (ira_allocno_t a, bool r
*** 2208,2213 ****
--- 2251,2258 ----
        if (NUM_REGISTER_FILTERS
  	  && !test_register_filters (ALLOCNO_REGISTER_FILTERS (a), hard_regno))
  	continue;
+       if (dep_filter_p && !TEST_HARD_REG_BIT (dep_allowed, hard_regno))
+ 	continue;
        cost = costs[i];
        full_cost = full_costs[i];
        if (!HONOR_REG_ALLOC_ORDER)
*************** improve_allocation (void)
*** 3266,3271 ****
--- 3311,3321 ----
  					      &profitable_hard_regs);
        class_size = ira_class_hard_regs_num[aclass];
        mode = ALLOCNO_MODE (a);
+       HARD_REG_SET dep_filter_allowed;
+       bool dep_filter_p
+ 	= NUM_DEPENDENT_FILTERS && ALLOCNO_DEPENDENT_FILTERS (a);
+       if (dep_filter_p)
+ 	dep_filter_allowed = ira_dependent_filter (a);
        /* Set up cost improvement for usage of each profitable hard
  	 register for allocno A.  */
        for (j = 0; j < class_size; j++)
*************** improve_allocation (void)
*** 3277,3282 ****
--- 3327,3334 ----
  	  if (NUM_REGISTER_FILTERS
  	      && !test_register_filters (ALLOCNO_REGISTER_FILTERS (a), hregno))
  	    continue;
+ 	  if (dep_filter_p && !TEST_HARD_REG_BIT (dep_filter_allowed, hregno))
+ 	    continue;
  	  ira_assert (ira_class_hard_reg_index[aclass][hregno] == j);
  	  k = allocno_costs == NULL ? 0 : j;
  	  costs[hregno] = (allocno_costs == NULL
*************** improve_allocation (void)
*** 3371,3376 ****
--- 3423,3430 ----
  	  if (NUM_REGISTER_FILTERS
  	      && !test_register_filters (ALLOCNO_REGISTER_FILTERS (a), hregno))
  	    continue;
+ 	  if (dep_filter_p && !TEST_HARD_REG_BIT (dep_filter_allowed, hregno))
+ 	    continue;
  	  if (check_hard_reg_p (a, hregno,
  				conflicting_regs, profitable_hard_regs)
  	      && min_cost > costs[hregno])
diff -Nrcpad gcc-17-20260621/gcc/ira-conflicts.cc gcc-17-20260628/gcc/ira-conflicts.cc
*** gcc-17-20260621/gcc/ira-conflicts.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ira-conflicts.cc	Sun Jun 28 22:32:08 2026
*************** process_regs_for_copy (rtx reg1, rtx reg
*** 384,389 ****
--- 384,430 ----
    return true;
  }
  
+ /* Go through all of OP's dependent filters, check if they reference
+    REF, and if so, check for all eligible hard regs in its class
+    whether the filter allows the same regno for both (dependent) operand,
+    as well as referenced operand.  Return true if all filters allow that,
+    or false otherwise.  */
+ 
+ static bool
+ dependent_filter_same_reg_ok_p (const operand_alternative *op_alt,
+ 				int op, int ref)
+ {
+   unsigned mask = alternative_dependent_filters (op_alt, op);
+   if (!mask)
+     return true;
+ 
+   enum reg_class cl
+     = ira_reg_class_intersect[op_alt[op].cl][op_alt[ref].cl];
+ 
+   machine_mode mode = recog_data.operand_mode[op];
+   machine_mode ref_mode = recog_data.operand_mode[ref];
+ 
+   for (int id = 0; id < NUM_DEPENDENT_FILTERS; ++id)
+     {
+       if (!(mask & (1U << id)))
+ 	continue;
+       if (get_dependent_filter_ref (id) != ref)
+ 	continue;
+ 
+       bool ok = false;
+       for (int i = 0; i < ira_class_hard_regs_num[cl]; ++i)
+ 	{
+ 	  unsigned regno = ira_class_hard_regs[cl][i];
+ 	  ok = eval_dependent_filter (id, regno, mode, regno, ref_mode);
+ 	  if (ok)
+ 	    break;
+ 	}
+       if (!ok)
+ 	return false;
+     }
+   return true;
+ }
+ 
  /* Return true if output operand OUTPUT and input operand INPUT of
     INSN can use the same register class for at least one alternative.
     INSN is already described in recog_data and recog_op_alt.  */
*************** can_use_same_reg_p (rtx_insn *insn, int
*** 405,412 ****
  	continue;
  
        if (ira_reg_class_intersect[op_alt[input].cl][op_alt[output].cl]
! 	  != NO_REGS)
! 	return true;
      }
    return false;
  }
--- 446,460 ----
  	continue;
  
        if (ira_reg_class_intersect[op_alt[input].cl][op_alt[output].cl]
! 	  == NO_REGS)
! 	continue;
! 
!       if (NUM_DEPENDENT_FILTERS
! 	  && (!dependent_filter_same_reg_ok_p (op_alt, input, output)
! 	      || !dependent_filter_same_reg_ok_p (op_alt, output, input)))
! 	continue;
! 
!       return true;
      }
    return false;
  }
diff -Nrcpad gcc-17-20260621/gcc/ira-int.h gcc-17-20260628/gcc/ira-int.h
*** gcc-17-20260621/gcc/ira-int.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ira-int.h	Sun Jun 28 22:32:08 2026
*************** struct ira_object
*** 264,269 ****
--- 264,286 ----
    unsigned int conflict_vec_p : 1;
  };
  
+ 
+ /* Filter that restricts an allocno's hard regnos by referencing
+    another allocno.  */
+ struct ira_dependent_filter
+ {
+   /* Filter ID and MODE of this (dependent) op.  */
+   int id;
+   ENUM_BITFIELD (machine_mode) mode : MACHINE_MODE_BITSIZE;
+ 
+   /* Allocno, hard regno and mode of the referenced op.  */
+   ira_allocno_t ref_allocno;
+   unsigned int ref_hard_regno;
+   ENUM_BITFIELD (machine_mode) ref_mode : MACHINE_MODE_BITSIZE;
+ 
+   struct ira_dependent_filter *next;
+ };
+ 
  /* A structure representing an allocno (allocation entity).  Allocno
     represents a pseudo-register in an allocation region.  If
     pseudo-register does not live in a region but it lives in the
*************** struct ira_allocno
*** 335,340 ****
--- 352,359 ----
       alternatives that accept class ACLASS.  */
    unsigned int register_filters : NUM_REGISTER_FILTERS;
  #endif
+   /* List of dependent filters.  */
+   struct ira_dependent_filter *dependent_filters;
    /* Accumulated usage references of the allocno.  Here and below,
       word 'accumulated' means info for given region and all nested
       subregions.  In this case, 'accumulated' means sum of references
*************** struct ira_allocno
*** 446,451 ****
--- 465,471 ----
  #define ALLOCNO_REGISTER_FILTERS(A) 0
  #define ALLOCNO_SET_REGISTER_FILTERS(A, X) ((void) (A), gcc_assert ((X) == 0))
  #endif
+ #define ALLOCNO_DEPENDENT_FILTERS(A) ((A)->dependent_filters)
  #define ALLOCNO_HARD_REGNO(A) ((A)->hard_regno)
  #define ALLOCNO_CALL_FREQ(A) ((A)->call_freq)
  #define ALLOCNO_CALLS_CROSSED_NUM(A) ((A)->calls_crossed_num)
*************** extern void ira_compress_allocno_live_ra
*** 1081,1086 ****
--- 1101,1109 ----
  extern void ira_finish_allocno_live_ranges (void);
  extern void ira_implicitly_set_insn_hard_regs (HARD_REG_SET *,
  					       alternative_mask);
+ extern void ira_add_dependent_filter (ira_allocno_t, int,
+ 				      machine_mode, ira_allocno_t,
+ 				      unsigned int, machine_mode);
  
  /* ira-conflicts.cc */
  extern void ira_debug_conflicts (bool);
diff -Nrcpad gcc-17-20260621/gcc/ira-lives.cc gcc-17-20260628/gcc/ira-lives.cc
*** gcc-17-20260621/gcc/ira-lives.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ira-lives.cc	Sun Jun 28 22:32:08 2026
*************** process_register_constraint_filters ()
*** 1135,1140 ****
--- 1135,1236 ----
      }
  }
  
+ /* Append a dependent filter ID with mode MODE, referenced allocno
+    REF_ALLOCNO, hardreg REF_HARD_REGNO, and REF_MODE to allocno A.  */
+ 
+ void
+ ira_add_dependent_filter (ira_allocno_t a, int id,
+ 			  machine_mode mode, ira_allocno_t ref_allocno,
+ 			  unsigned int ref_hard_regno, machine_mode ref_mode)
+ {
+   /* Check if we already have the filter that should be added.
+      This is a linear search and the assumption is that we'll never
+      have more than a handful of dependent filters.  Right now, the
+      maximum is 32 (see gensupport.cc).  */
+   for (auto *filter = ALLOCNO_DEPENDENT_FILTERS (a);
+        filter;
+        filter = filter->next)
+     if (filter->id == id
+ 	&& filter->ref_allocno == ref_allocno
+ 	&& filter->ref_hard_regno == ref_hard_regno
+ 	&& filter->mode == mode
+ 	&& filter->ref_mode == ref_mode)
+       return;
+ 
+   auto *filter = (ira_dependent_filter *)
+     ira_allocate (sizeof (ira_dependent_filter));
+   filter->id = id;
+   filter->ref_allocno = ref_allocno;
+   filter->ref_hard_regno = ref_hard_regno;
+   filter->mode = mode;
+   filter->ref_mode = ref_mode;
+   filter->next = ALLOCNO_DEPENDENT_FILTERS (a);
+   ALLOCNO_DEPENDENT_FILTERS (a) = filter;
+ }
+ 
+ /* Walk the operand alternatives of the current insn.  For each
+    operand with a dependent-filter constraint, add one
+    ira_dependent_filter in the appropriate allocno.  */
+ 
+ static void
+ process_dependent_filters ()
+ {
+   if (!NUM_DEPENDENT_FILTERS)
+     return;
+ 
+   for (int opno = 0; opno < recog_data.n_operands; ++opno)
+     {
+       rtx op = recog_data.operand[opno];
+       if (SUBREG_P (op))
+ 	op = SUBREG_REG (op);
+       if (!REG_P (op) || HARD_REGISTER_P (op))
+ 	continue;
+ 
+       ira_allocno_t a = ira_curr_regno_allocno_map[REGNO (op)];
+ 
+       for (int alt = 0; alt < recog_data.n_alternatives; alt++)
+ 	{
+ 	  if (!TEST_BIT (preferred_alternatives, alt))
+ 	    continue;
+ 
+ 	  auto *op_alt = &recog_op_alt[alt * recog_data.n_operands];
+ 	  auto cl = alternative_class (op_alt, opno);
+ 	  if (!ira_class_subset_p[ALLOCNO_CLASS (a)][cl])
+ 	    continue;
+ 
+ 	  auto dep_filter_mask = alternative_dependent_filters (op_alt, opno);
+ 	  if (!dep_filter_mask)
+ 	    continue;
+ 
+ 	  for (int id = 0; id < NUM_DEPENDENT_FILTERS; ++id)
+ 	    {
+ 	      if (!(dep_filter_mask & (1U << id)))
+ 		continue;
+ 
+ 	      int ref_opno = get_dependent_filter_ref (id);
+ 	      if (ref_opno < 0 || ref_opno >= recog_data.n_operands)
+ 		continue;
+ 	      rtx ref_op = recog_data.operand[ref_opno];
+ 	      if (SUBREG_P (ref_op))
+ 		ref_op = SUBREG_REG (ref_op);
+ 	      if (!REG_P (ref_op))
+ 		continue;
+ 
+ 	      ira_allocno_t ref_a = NULL;
+ 	      unsigned int ref_hard_regno = INVALID_REGNUM;
+ 	      if (HARD_REGISTER_P (ref_op))
+ 		ref_hard_regno = REGNO (ref_op);
+ 	      else
+ 		ref_a = ira_curr_regno_allocno_map[REGNO (ref_op)];
+ 
+ 	      ira_add_dependent_filter (a, id, GET_MODE (op),
+ 					ref_a, ref_hard_regno,
+ 					GET_MODE (ref_op));
+ 	    }
+ 	}
+     }
+ }
+ 
  /* Look through the CALL_INSN_FUNCTION_USAGE of a call insn INSN, and see if
     we find a SET rtx that we can use to deduce that a register can be cheaply
     caller-saved.  Return such a register, or NULL_RTX if none is found.  */
*************** process_bb_node_lives (ira_loop_tree_nod
*** 1443,1448 ****
--- 1539,1545 ----
  
  	  preferred_alternatives = ira_setup_alts (insn);
  	  process_register_constraint_filters ();
+ 	  process_dependent_filters ();
  	  process_single_reg_class_operands (false, freq);
  
  	  if (call_p)
diff -Nrcpad gcc-17-20260621/gcc/ira.cc gcc-17-20260628/gcc/ira.cc
*** gcc-17-20260621/gcc/ira.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/ira.cc	Sun Jun 28 22:32:08 2026
*************** ira (FILE *f)
*** 5680,5685 ****
--- 5680,5686 ----
    bool output_jump_reload_p = false;
  
    setup_hard_regno_nrefs ();
+   lra_reset_dependent_filters ();
    if (ira_use_lra_p)
      {
        /* First put potential jump output reloads on the output edges
diff -Nrcpad gcc-17-20260621/gcc/lra-assigns.cc gcc-17-20260628/gcc/lra-assigns.cc
*** gcc-17-20260621/gcc/lra-assigns.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/lra-assigns.cc	Sun Jun 28 22:32:08 2026
*************** find_hard_regno_for_1 (int regno, int *c
*** 629,634 ****
--- 629,657 ----
  		 lra_reg_info[conflict_regno].preferred_hard_regno_profit2);
  	  }
        }
+ 
+   /* If a reference/partner pseudo already has a hardreg, restrict this one
+      to what the filter permits.  */
+   if (!lra_reg_info[regno].dependent_filters.is_empty ())
+     {
+       unsigned int i;
+       dependent_filter *filter;
+       FOR_EACH_VEC_ELT (lra_reg_info[regno].dependent_filters, i, filter)
+ 	{
+ 	  int partner_regno = live_pseudos_reg_renumber[filter->partner_regno];
+ 	  if (partner_regno < 0)
+ 	    partner_regno = reg_renumber[filter->partner_regno];
+ 	  if (partner_regno < 0)
+ 	    continue;
+ 
+ 	  const HARD_REG_SET *allowed
+ 	    = lra_get_dependent_filter (filter->id, filter->mode,
+ 					(unsigned int) partner_regno,
+ 					filter->partner_mode, filter->is_ref);
+ 	  conflict_set |= ~*allowed;
+ 	}
+     }
+ 
    /* Make sure that all registers in a multi-word pseudo belong to the
       required class.  */
    conflict_set |= ~reg_class_contents[rclass];
diff -Nrcpad gcc-17-20260621/gcc/lra-constraints.cc gcc-17-20260628/gcc/lra-constraints.cc
*** gcc-17-20260621/gcc/lra-constraints.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/lra-constraints.cc	Sun Jun 28 22:32:08 2026
*************** print_curr_insn_alt (int alt_number)
*** 2174,2179 ****
--- 2174,2392 ----
      }
  }
  
+ struct dependent_filter_cache_hasher
+   : free_ptr_hash <dependent_filter_entry>
+ {
+   static inline hashval_t hash (const dependent_filter_entry *e)
+   {
+     hashval_t h = (hashval_t) e->id;
+     h = iterative_hash_hashval_t ((hashval_t) e->mode, h);
+     h = iterative_hash_hashval_t ((hashval_t) e->partner_mode, h);
+     h = iterative_hash_hashval_t (e->partner_regno, h);
+     h = iterative_hash_hashval_t ((hashval_t) e->is_ref, h);
+     return h;
+   }
+   static inline bool equal (const dependent_filter_entry *a,
+ 			    const dependent_filter_entry *b)
+   {
+     return (a->id == b->id && a->mode == b->mode
+ 	    && a->partner_mode == b->partner_mode
+ 	    && a->partner_regno == b->partner_regno
+ 	    && a->is_ref == b->is_ref);
+   }
+ };
+ 
+ static hash_table<dependent_filter_cache_hasher> *dependent_filter_htab;
+ 
+ /* Allocate the dependent-filter cache.  */
+ 
+ void
+ lra_init_dependent_filter_cache (void)
+ {
+   gcc_assert (!dependent_filter_htab);
+   dependent_filter_htab = new hash_table<dependent_filter_cache_hasher> (16);
+ }
+ 
+ /* Release the dependent-filter cache.  */
+ 
+ void
+ lra_finish_dependent_filter_cache (void)
+ {
+   delete dependent_filter_htab;
+   dependent_filter_htab = nullptr;
+ }
+ 
+ /* Reset the dependent-filter cache.  */
+ 
+ void
+ lra_reset_dependent_filters (void)
+ {
+   if (dependent_filter_htab)
+     dependent_filter_htab->empty ();
+ }
+ 
+ /* Return the set of hardregs allowed by dependent filter ID for an operand
+    of mode MODE when the referenced operand has PARTNER_REGNO in
+    PARTNER_MODE.  That is when IS_REF is false.  If it is true, the roles are
+    reversed and PARTNER_REGNO as well as PARTNER_MODE refer to the dependent
+    operand.
+ 
+    We fill the set for all hardregs and add the resulting regset to
+    a hash table if it doesn't already exist in it.  */
+ 
+ const HARD_REG_SET *
+ lra_get_dependent_filter (int id, machine_mode mode,
+ 			  unsigned int partner_regno,
+ 			  machine_mode partner_mode, bool is_ref)
+ {
+   dependent_filter_entry key;
+   key.id = id;
+   key.mode = mode;
+   key.partner_mode = partner_mode;
+   key.partner_regno = partner_regno;
+   key.is_ref = is_ref;
+ 
+   dependent_filter_entry **slot
+     = dependent_filter_htab->find_slot (&key, INSERT);
+   if (*slot)
+     return &(*slot)->allowed;
+ 
+   auto *e = XCNEW (dependent_filter_entry);
+   e->id = id;
+   e->mode = mode;
+   e->partner_mode = partner_mode;
+   e->partner_regno = partner_regno;
+   e->is_ref = is_ref;
+ 
+   /* ??? Should we restrict ourselves to a register class here?  */
+   for (unsigned regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno)
+     {
+       bool ok;
+       if (is_ref)
+ 	ok = eval_dependent_filter (id, partner_regno, partner_mode,
+ 				    regno, mode);
+       else
+ 	ok = eval_dependent_filter (id, regno, mode,
+ 				    partner_regno, partner_mode);
+       if (ok)
+ 	SET_HARD_REG_BIT (e->allowed, regno);
+     }
+   *slot = e;
+   return &e->allowed;
+ }
+ 
+ /* Add the dependent filter ID to REGNO's dependent filters with
+    referenced PARTNER_REGNO and PARTNER_MODE if IS_REF is false.
+    If IS_REF is true, the roles are reversed.  We need both
+    directions in case the referenced op is assigned a hardreg first.  */
+ 
+ void
+ lra_add_dependent_filter (int regno, int id, machine_mode mode,
+ 			  int partner_regno, machine_mode partner_mode,
+ 			  bool is_ref)
+ {
+   /* Only meaningful for pseudo partners.  */
+   if (partner_regno < FIRST_PSEUDO_REGISTER)
+     return;
+ 
+   vec<dependent_filter> &filters = lra_reg_info[regno].dependent_filters;
+   unsigned int i;
+   dependent_filter *filter;
+ 
+   /* If this filter already exists, do nothing.  */
+   FOR_EACH_VEC_ELT (filters, i, filter)
+     if (filter->id == id
+ 	&& filter->partner_regno == (unsigned int) partner_regno
+ 	&& filter->mode == mode && filter->partner_mode == partner_mode
+ 	&& filter->is_ref == is_ref)
+       return;
+ 
+   /* Otherwise, create a new filter.  */
+   dependent_filter new_filter;
+   new_filter.id = id;
+   new_filter.mode = mode;
+   new_filter.partner_mode = partner_mode;
+   new_filter.partner_regno = (unsigned int) partner_regno;
+   new_filter.is_ref = is_ref;
+   filters.safe_push (new_filter);
+ }
+ 
+ /* Return the set of hardregs for the constraint CN in MODE,
+    allowed by its dependent filter.
+    If there is no dependent filter or the involved registers are no
+    hardregs, return NULL.  */
+ 
+ static const HARD_REG_SET *
+ get_dependent_filter (constraint_num cn, machine_mode mode)
+ {
+   int id = get_dependent_filter_id (cn);
+   if (id < 0)
+     return nullptr;
+ 
+   gcc_assert (reg_class_for_constraint (cn) != NO_REGS);
+ 
+   int ref_opno = get_dependent_filter_ref (id);
+   gcc_assert (ref_opno >= 0 && ref_opno < curr_static_id->n_operands);
+ 
+   rtx ref_op = *curr_id->operand_loc[ref_opno];
+   if (!REG_P (ref_op))
+     return nullptr;
+   unsigned int ref_regno = REGNO (ref_op);
+   if (ref_regno >= FIRST_PSEUDO_REGISTER)
+     {
+       int ref_hard_regno = reg_renumber[ref_regno];
+       if (ref_hard_regno < 0)
+ 	return nullptr;
+       ref_regno = (unsigned int) ref_hard_regno;
+     }
+ 
+   return lra_get_dependent_filter (id, mode, ref_regno, GET_MODE (ref_op),
+ 				   false);
+ }
+ 
+ /* Go through all operands and their constraints, looking for a dependent
+    filter.  If we find one, add it to the respective reg_info's
+    dependent-filter list.  After assigning a hardreg to either the dependent
+    or the referenced op, this allows us to filter the other's regset.  */
+ 
+ static void
+ process_dependent_filters (void)
+ {
+   int n_operands = curr_static_id->n_operands;
+   for (int i = 0; i < n_operands; i++)
+     {
+       rtx op = *curr_id->operand_loc[i];
+       if (!REG_P (op) || HARD_REGISTER_P (op))
+ 	continue;
+       const char *constraint
+ 	= curr_static_id->operand_alternative
+ 	    [goal_alt_number * n_operands + i].constraint;
+       for (const char *p = constraint;
+ 	   *p && *p != ',' && *p != '#';
+ 	   p += CONSTRAINT_LEN (*p, p))
+ 	{
+ 	  enum constraint_num cn = lookup_constraint (p);
+ 	  int id = get_dependent_filter_id (cn);
+ 	  if (id < 0)
+ 	    continue;
+ 	  if (reg_class_for_constraint (cn) == NO_REGS)
+ 	    continue;
+ 	  int ref_opno = get_dependent_filter_ref (id);
+ 	  if (ref_opno < 0 || ref_opno >= n_operands)
+ 	    continue;
+ 	  rtx ref_op = *curr_id->operand_loc[ref_opno];
+ 	  if (!REG_P (ref_op) || HARD_REGISTER_P (ref_op))
+ 	    continue;
+ 	  machine_mode mode = curr_operand_mode[i];
+ 	  lra_add_dependent_filter (REGNO (op), id, mode,
+ 				    REGNO (ref_op), GET_MODE (ref_op),
+ 				    false);
+ 	  lra_add_dependent_filter (REGNO (ref_op), id, GET_MODE (ref_op),
+ 				    REGNO (op), mode, true);
+ 	}
+     }
+ }
+ 
  /* Major function to choose the current insn alternative and what
     operands should be reloaded and how.	 If ONLY_ALTERNATIVE is not
     negative we should consider only this alternative.  Return false if
*************** process_alt_operands (int only_alternati
*** 2356,2361 ****
--- 2569,2575 ----
  
  	  win = did_match = winreg = offmemok = constmemok = false;
  	  badop = true;
+ 	  const HARD_REG_SET *cl_dep_filter = nullptr;
  
  	  early_clobber_p = false;
  	  p = curr_static_id->operand_alternative[opalt_num].constraint;
*************** process_alt_operands (int only_alternati
*** 2617,2622 ****
--- 2831,2837 ----
  		    }
  		  cl = GENERAL_REGS;
  		  cl_filter = nullptr;
+ 		  cl_dep_filter = nullptr;
  		  goto reg;
  
  		case '{':
*************** process_alt_operands (int only_alternati
*** 2630,2635 ****
--- 2845,2851 ----
  		      CLEAR_HARD_REG_SET (hard_reg_constraint);
  		      SET_HARD_REG_BIT (hard_reg_constraint, regno);
  		      cl_filter = &hard_reg_constraint;
+ 		      cl_dep_filter = nullptr;
  		      goto reg;
  		    }
  
*************** process_alt_operands (int only_alternati
*** 2642,2647 ****
--- 2858,2864 ----
  		      if (cl != NO_REGS)
  			{
  			  cl_filter = get_register_filter (cn);
+ 			  cl_dep_filter = get_dependent_filter (cn, mode);
  			  goto reg;
  			}
  		      break;
*************** process_alt_operands (int only_alternati
*** 2688,2693 ****
--- 2905,2911 ----
  		      cl = base_reg_class (VOIDmode, ADDR_SPACE_GENERIC,
  					   ADDRESS, SCRATCH);
  		      cl_filter = nullptr;
+ 		      cl_dep_filter = nullptr;
  		      badop = false;
  		      goto reg;
  
*************** process_alt_operands (int only_alternati
*** 2723,2728 ****
--- 2941,2948 ----
  		  this_alternative_set |= reg_class_contents[cl];
  		  if (cl_filter)
  		    this_alternative_exclude_start_hard_regs |= ~*cl_filter;
+ 		  if (cl_dep_filter)
+ 		    this_alternative_exclude_start_hard_regs |= ~*cl_dep_filter;
  		  if (costly_p)
  		    {
  		      this_costly_alternative
*************** process_alt_operands (int only_alternati
*** 2746,2751 ****
--- 2966,2974 ----
  			  && (!cl_filter
  			      || TEST_HARD_REG_BIT (*cl_filter,
  						    hard_regno[nop]))
+ 			  && (!cl_dep_filter
+ 			      || TEST_HARD_REG_BIT (*cl_dep_filter,
+ 						    hard_regno[nop]))
  			  && ((REG_ATTRS (op) && (decl = REG_EXPR (op)) != NULL
  			       && VAR_P (decl) && DECL_HARD_REGISTER (decl))
  			      || !(TEST_HARD_REG_BIT
*************** curr_insn_transform (bool check_only_p)
*** 5135,5140 ****
--- 5358,5367 ----
  		     REGNO (op), regno);
  	}
      }
+ 
+   /* After the dust has settled, collect and attach dependent filters.  */
+   process_dependent_filters ();
+ 
    if (before != NULL_RTX || after != NULL_RTX
        || max_regno_before != max_reg_num ())
      change_p = true;
diff -Nrcpad gcc-17-20260621/gcc/lra-int.h gcc-17-20260628/gcc/lra-int.h
*** gcc-17-20260621/gcc/lra-int.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/lra-int.h	Sun Jun 28 22:32:08 2026
*************** along with GCC; see the file COPYING3.	I
*** 30,35 ****
--- 30,55 ----
  
  typedef struct lra_live_range *lra_live_range_t;
  
+ struct dependent_filter
+ {
+   int id;
+   machine_mode mode;
+   unsigned int partner_regno;
+   machine_mode partner_mode;
+   bool is_ref;
+ };
+ 
+ /* Cache entry of a dependent filter.  The same fields as above, just with
+    a hard-reg set of allowed hardregs.  */
+ 
+ struct dependent_filter_entry : dependent_filter
+ {
+   HARD_REG_SET allowed;
+ };
+ 
+ extern void lra_init_dependent_filter_cache (void);
+ extern void lra_finish_dependent_filter_cache (void);
+ 
  /* The structure describes program points where a given pseudo lives.
     The live ranges can be used to find conflicts with other pseudos.
     If the live ranges of two pseudos are intersected, the pseudos are
*************** public:
*** 113,118 ****
--- 133,140 ----
    /* This member is set up in lra-lives.cc for subsequent
       assignments.  */
    lra_copy_t copies;
+   /* Dependent filters for this reg.  */
+   vec<dependent_filter> dependent_filters;
  };
  
  /* References to the common info about each register.  */
diff -Nrcpad gcc-17-20260621/gcc/lra.cc gcc-17-20260628/gcc/lra.cc
*** gcc-17-20260621/gcc/lra.cc	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/lra.cc	Sun Jun 28 22:32:08 2026
*************** initialize_lra_reg_info_element (int i)
*** 1373,1378 ****
--- 1373,1379 ----
    lra_reg_info[i].val = get_new_reg_value ();
    lra_reg_info[i].offset = 0;
    lra_reg_info[i].copies = NULL;
+   lra_reg_info[i].dependent_filters = vNULL;
  }
  
  /* Initialize common reg info and copies.  */
*************** finish_reg_info (void)
*** 1398,1404 ****
    int i;
  
    for (i = 0; i < reg_info_size; i++)
!     bitmap_clear (&lra_reg_info[i].insn_bitmap);
    free (lra_reg_info);
    reg_info_size = 0;
  }
--- 1399,1408 ----
    int i;
  
    for (i = 0; i < reg_info_size; i++)
!     {
!       bitmap_clear (&lra_reg_info[i].insn_bitmap);
!       lra_reg_info[i].dependent_filters.release ();
!     }
    free (lra_reg_info);
    reg_info_size = 0;
  }
*************** lra (FILE *f, int verbose)
*** 2453,2458 ****
--- 2457,2465 ----
  
    setup_reg_spill_flag ();
  
+   /* Reset the dependent-filter hash table.  */
+   lra_reset_dependent_filters ();
+ 
    /* Function remove_scratches can creates new pseudos for clobbers --
       so set up lra_constraint_new_regno_start before its call to
       permit changing reg classes for pseudos created by this
*************** void
*** 2698,2703 ****
--- 2705,2711 ----
  lra_init_once (void)
  {
    init_insn_code_data_once ();
+   lra_init_dependent_filter_cache ();
  }
  
  /* Called once per compiler to finish LRA data which are initialize
*************** void
*** 2706,2709 ****
--- 2714,2718 ----
  lra_finish_once (void)
  {
    finish_insn_code_data_once ();
+   lra_finish_dependent_filter_cache ();
  }
diff -Nrcpad gcc-17-20260621/gcc/lra.h gcc-17-20260628/gcc/lra.h
*** gcc-17-20260621/gcc/lra.h	Sun Jun 21 22:32:06 2026
--- gcc-17-20260628/gcc/lra.h	Sun Jun 28 22:32:08 2026
*************** extern rtx lra_eliminate_regs (rtx, mach
*** 38,42 ****
--- 38,45 ----
  extern void lra (FILE *, int);
  extern void lra_init_once (void);
  extern void lra_finish_once (void);
+ extern const HARD_REG_SET *lra_get_dependent_filter
+   (int, machine_mode, unsigned int, machine_mode, bool);
+ extern void lra_reset_dependent_filters (void);
  
  #endif /* GCC_LRA_H */
diff -Nrcpad gcc-17-20260621/gcc/match-sat-alu.pd gcc-17-20260628/gcc/match-sat-alu.pd
*** gcc-17-20260621/gcc/match-sat-alu.pd	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/match-sat-alu.pd	Sun Jun 28 22:32:08 2026
*************** along with GCC; see the file COPYING3.
*** 512,518 ****
  			       INTEGER_CST@2)
  		       integer_zerop)
  		   @3 INTEGER_CST@4))
!    (if (types_match (type, @0, @1))
      (with
       {
        unsigned prec = TYPE_PRECISION (type);
--- 512,543 ----
  			       INTEGER_CST@2)
  		       integer_zerop)
  		   @3 INTEGER_CST@4))
!    (if (types_match (type, @0, @1) && tree_fits_uhwi_p (@2))
!     (with
!      {
!       unsigned prec = TYPE_PRECISION (type);
!       unsigned widen_prec = TYPE_PRECISION (TREE_TYPE (@3));
!       wide_int c4 = wi::to_wide (@4);
!       wide_int max = wi::mask (prec, false, widen_prec);
!       bool c4_is_max_p = wi::eq_p (c4, max);
!       unsigned c2 = tree_to_uhwi (@2);
!       bool c2_is_type_precision_p = c2 == prec;
!      }
!      (if (widen_prec > prec && c2_is_type_precision_p && c4_is_max_p)))))
!   (match (unsigned_integer_sat_mul @0 @1)
!    /* SAT_U_MUL (X, Y) = {
! 	WT x = (WT)a * (WT)b;
! 	if ((x >> sizeof(a) * 8) != 0)
! 	  return (T)-1;
! 	else
! 	  return (T)x;
!       }
!       while WT is uint128_t, T is uint8_t, uint16_t, uint32_t or uint64_t.  */
!    (convert (cond^ (ne (rshift (mult:c@3 (convert @0) (convert @1))
! 			       INTEGER_CST@2)
! 		       integer_zerop)
! 		   INTEGER_CST@4 @3))
!    (if (types_match (type, @0, @1) && tree_fits_uhwi_p (@2))
      (with
       {
        unsigned prec = TYPE_PRECISION (type);
*************** along with GCC; see the file COPYING3.
*** 537,543 ****
       (negate
        (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
      (convert (usmul_widen_mult@3 @0 @1)))
!    (if (types_match (type, @0, @1))
      (with
       {
        unsigned prec = TYPE_PRECISION (type);
--- 562,568 ----
       (negate
        (convert (ne (convert2? (rshift @3 INTEGER_CST@2)) integer_zerop))))
      (convert (usmul_widen_mult@3 @0 @1)))
!    (if (types_match (type, @0, @1) && tree_fits_uhwi_p (@2))
      (with
       {
        unsigned prec = TYPE_PRECISION (type);
diff -Nrcpad gcc-17-20260621/gcc/match.pd gcc-17-20260628/gcc/match.pd
*** gcc-17-20260621/gcc/match.pd	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/match.pd	Sun Jun 28 22:32:08 2026
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 2776,2781 ****
--- 2776,2787 ----
   )
  )
  
+ /* Canonicalize `(type) (a CMP b)` to `(a CMP b) ? (type) true : (type) false`
+    for floating point types.   */
+ (simplify
+  (float (convert:s (tcc_comparison@0 @1 @2)))
+  (cond @0 { build_one_cst (type); } { build_zero_cst (type); } ))
+ 
  /* For integral types with undefined overflow and C != 0 fold
     x * C EQ/NE y * C into x EQ/NE y.  */
  (for cmp (eq ne)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 4738,4752 ****
    (cmp (minmax @0 INTEGER_CST@1) INTEGER_CST@2)
    (comb (cmp @0 @2) (cmp @1 @2))))
  
! /* MAX (A, B) == 0 -> (A|B) == 0 iff unsigned.
!    MAX (A, B) != 0 -> (A|B) != 0 iff unsigned.  */
  (for cmp (eq ne)
   (simplify
!   (cmp (max @0 @1) integer_zerop)
!   (if (TYPE_UNSIGNED (TREE_TYPE (@0)))
!    (with { tree utype = unsigned_type_for (TREE_TYPE (@0)); }
!     (cmp (bit_ior (convert:utype @0) (convert:utype @1))
!          { build_zero_cst (utype); } )))))
  
  /* Undo fancy ways of writing max/min or other ?: expressions, like
     a - ((a - b) & -(a < b))  and  a - (a - b) * (a < b) into (a < b) ? b : a.
--- 4744,4757 ----
    (cmp (minmax @0 INTEGER_CST@1) INTEGER_CST@2)
    (comb (cmp @0 @2) (cmp @1 @2))))
  
! /* MAX (A, B) == 0 -> (A|B) == 0 iff non-negative.
!    MAX (A, B) != 0 -> (A|B) != 0 iff non-negative.  */
  (for cmp (eq ne)
   (simplify
!   (cmp (max tree_expr_nonnegative_p@0 tree_expr_nonnegative_p@1) integer_zerop)
!   (with { tree utype = unsigned_type_for (TREE_TYPE (@0)); }
!    (cmp (bit_ior (convert:utype @0) (convert:utype @1))
!         { build_zero_cst (utype); } ))))
  
  /* Undo fancy ways of writing max/min or other ?: expressions, like
     a - ((a - b) & -(a < b))  and  a - (a - b) * (a < b) into (a < b) ? b : a.
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7610,7616 ****
  (for cmp  (lt le eq ne ge gt unordered ordered unlt unle ungt unge uneq ltgt)
       icmp (lt le eq ne ge gt unordered ordered lt   le   gt   ge   eq   ne)
   (simplify
!   (cmp (float@0 @1) (float @2))
     (if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@0))
  	&& ! DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@0)))
      (with
--- 7615,7621 ----
  (for cmp  (lt le eq ne ge gt unordered ordered unlt unle ungt unge uneq ltgt)
       icmp (lt le eq ne ge gt unordered ordered lt   le   gt   ge   eq   ne)
   (simplify
!   (cmp (float@0 @1) (float@3 @2))
     (if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@0))
  	&& ! DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@0)))
      (with
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7618,7628 ****
         format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@0))));
         tree type1 = TREE_TYPE (@1);
         bool type1_signed_p = TYPE_SIGN (type1) == SIGNED;
         tree type2 = TREE_TYPE (@2);
         bool type2_signed_p = TYPE_SIGN (type2) == SIGNED;
       }
!      (if (fmt.can_represent_integral_type_p (type1)
! 	  && fmt.can_represent_integral_type_p (type2))
        (if (cmp == ORDERED_EXPR || cmp == UNORDERED_EXPR)
         { constant_boolean_node (cmp == ORDERED_EXPR, type); }
         (if (TYPE_PRECISION (type1) > TYPE_PRECISION (type2)
--- 7623,7643 ----
         format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@0))));
         tree type1 = TREE_TYPE (@1);
         bool type1_signed_p = TYPE_SIGN (type1) == SIGNED;
+        bool type1_ok = fmt.can_represent_integral_type_p (type1);
         tree type2 = TREE_TYPE (@2);
         bool type2_signed_p = TYPE_SIGN (type2) == SIGNED;
+        bool type2_ok = fmt.can_represent_integral_type_p (type2);
+ #if GIMPLE
+        int_range_max vr1, vr2;
+        if (!type1_ok
+ 	   && gimple_match_range_of_expr (vr1, @1, @0))
+ 	 type1_ok = fmt.can_represent_range_value_p (&vr1);
+        if (!type2_ok
+ 	   && gimple_match_range_of_expr (vr2, @2, @3))
+ 	 type2_ok = fmt.can_represent_range_value_p (&vr2);
+ #endif
       }
!      (if (type1_ok && type2_ok)
        (if (cmp == ORDERED_EXPR || cmp == UNORDERED_EXPR)
         { constant_boolean_node (cmp == ORDERED_EXPR, type); }
         (if (TYPE_PRECISION (type1) > TYPE_PRECISION (type2)
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7639,7651 ****
  (for cmp  (lt le eq ne ge gt)
       icmp (le le eq ne ge ge)
   (simplify
!   (cmp (float @0) REAL_CST@1)
     (if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@1))
  	&& ! DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@1)))
      (with
       {
         tree itype = TREE_TYPE (@0);
         format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@1))));
         const REAL_VALUE_TYPE *cst = TREE_REAL_CST_PTR (@1);
         /* Be careful to preserve any potential exceptions due to NaNs.
  	  qNaNs are ok in == or != context.  */
--- 7654,7668 ----
  (for cmp  (lt le eq ne ge gt)
       icmp (le le eq ne ge ge)
   (simplify
!   (cmp (float@2 @0) REAL_CST@1)
     (if (SCALAR_FLOAT_TYPE_P (TREE_TYPE (@1))
  	&& ! DECIMAL_FLOAT_TYPE_P (TREE_TYPE (@1)))
      (with
       {
         tree itype = TREE_TYPE (@0);
         format_helper fmt (REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@1))));
+        bool itype_ok = fmt.can_represent_integral_type_p (itype);
+        bool value_ok = itype_ok;
         const REAL_VALUE_TYPE *cst = TREE_REAL_CST_PTR (@1);
         /* Be careful to preserve any potential exceptions due to NaNs.
  	  qNaNs are ok in == or != context.  */
*************** DEFINE_INT_AND_FLOAT_ROUND_FN (RINT)
*** 7654,7669 ****
  			  && ((cmp != EQ_EXPR && cmp != NE_EXPR)
  			      || (cst->signalling
  				  && HONOR_SNANS (TREE_TYPE (@1))));
       }
       /* TODO: allow non-fitting itype and SNaNs when
  	-fno-trapping-math.  */
!      (if (fmt.can_represent_integral_type_p (itype) && ! exception_p)
        (with
         {
  	 signop isign = TYPE_SIGN (itype);
  	 REAL_VALUE_TYPE imin, imax;
! 	 real_from_integer (&imin, fmt, wi::min_value (itype), isign);
! 	 real_from_integer (&imax, fmt, wi::max_value (itype), isign);
  
  	 REAL_VALUE_TYPE icst;
  	 if (cmp == GT_EXPR || cmp == GE_EXPR)
--- 7671,7701 ----
  			  && ((cmp != EQ_EXPR && cmp != NE_EXPR)
  			      || (cst->signalling
  				  && HONOR_SNANS (TREE_TYPE (@1))));
+ #if GIMPLE
+        int_range_max vr;
+        if (!value_ok
+ 	   && gimple_match_range_of_expr (vr, @0, @2))
+ 	 value_ok = fmt.can_represent_range_value_p (&vr);
+ #endif
       }
       /* TODO: allow non-fitting itype and SNaNs when
  	-fno-trapping-math.  */
!      (if (value_ok && ! exception_p)
        (with
         {
  	 signop isign = TYPE_SIGN (itype);
+ 	 wide_int imin_val = wi::min_value (itype);
+ 	 wide_int imax_val = wi::max_value (itype);
+ #if GIMPLE
+ 	 if (!itype_ok)
+ 	   {
+ 	     imin_val = vr.lower_bound ();
+ 	     imax_val = vr.upper_bound ();
+ 	   }
+ #endif
  	 REAL_VALUE_TYPE imin, imax;
! 	 real_from_integer (&imin, fmt, imin_val, isign);
! 	 real_from_integer (&imax, fmt, imax_val, isign);
  
  	 REAL_VALUE_TYPE icst;
  	 if (cmp == GT_EXPR || cmp == GE_EXPR)
*************** and,
*** 11702,11720 ****
       machine_mode result_mode = TYPE_MODE (type);
       machine_mode op_mode = TYPE_MODE (TREE_TYPE (@2));
       int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
!      vec_perm_builder builder0;
!      vec_perm_builder builder1;
!      vec_perm_builder builder2 (nelts, nelts, 1);
     }
!    (if (tree_to_vec_perm_builder (&builder0, @4)
! 	&& tree_to_vec_perm_builder (&builder1, @5)
  	&& TYPE_SIZE (TREE_TYPE (TREE_TYPE (@0)))
  	   == TYPE_SIZE (TREE_TYPE (TREE_TYPE (@1))))
      (with
       {
!        vec_perm_indices sel0 (builder0, 2, nelts);
!        vec_perm_indices sel1 (builder1, 2, nelts);
! 
         for (int i = 0; i < nelts; i++)
  	 builder2.quick_push (sel0[sel1[i].to_constant ()]);
  
--- 11734,11748 ----
       machine_mode result_mode = TYPE_MODE (type);
       machine_mode op_mode = TYPE_MODE (TREE_TYPE (@2));
       int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
!      vec_perm_indices sel0, sel1;
     }
!    (if (tree_to_vec_perm_indices (&sel0, @2, @3, @4)
! 	&& tree_to_vec_perm_indices (&sel1, @0, @0, @5)
  	&& TYPE_SIZE (TREE_TYPE (TREE_TYPE (@0)))
  	   == TYPE_SIZE (TREE_TYPE (TREE_TYPE (@1))))
      (with
       {
!        vec_perm_builder builder2 (nelts, nelts, 1);
         for (int i = 0; i < nelts; i++)
  	 builder2.quick_push (sel0[sel1[i].to_constant ()]);
  
*************** and,
*** 11728,11736 ****
  	  number of VEC_PERM_EXPRs that can't be handled.  */
         if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
  	   || (single_use (@0)
! 	       ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, false)
! 		  || !can_vec_perm_const_p (result_mode, op_mode, sel1, false))
! 	       : !can_vec_perm_const_p (result_mode, op_mode, sel1, false)))
  	 op0 = vec_perm_indices_to_tree (TREE_TYPE (@5), sel2);
       }
       (if (op0)
--- 11756,11764 ----
  	  number of VEC_PERM_EXPRs that can't be handled.  */
         if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
  	   || (single_use (@0)
! 	       ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
! 		  || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
! 	       : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
  	 op0 = vec_perm_indices_to_tree (TREE_TYPE (@5), sel2);
       }
       (if (op0)
*************** and,
*** 11752,11769 ****
       machine_mode result_mode = TYPE_MODE (type);
       machine_mode op_mode = TYPE_MODE (TREE_TYPE (@1));
       int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
!      vec_perm_builder builder0;
!      vec_perm_builder builder1;
!      vec_perm_builder builder2 (nelts, nelts, 2);
     }
!    (if (tree_to_vec_perm_builder (&builder0, @3)
! 	&& tree_to_vec_perm_builder (&builder1, @4))
      (with
       {
-        vec_perm_indices sel0 (builder0, 2, nelts);
-        vec_perm_indices sel1 (builder1, 2, nelts);
         bool use_1 = false, use_2 = false;
  
         for (int i = 0; i < nelts; i++)
           {
  	   if (known_lt ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
--- 11780,11794 ----
       machine_mode result_mode = TYPE_MODE (type);
       machine_mode op_mode = TYPE_MODE (TREE_TYPE (@1));
       int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
!      vec_perm_indices sel0, sel1;
     }
!    (if (tree_to_vec_perm_indices (&sel0, @1, @2, @3)
!         && tree_to_vec_perm_indices (&sel1, @5, @0, @4))
      (with
       {
         bool use_1 = false, use_2 = false;
  
+        vec_perm_builder builder2 (nelts, nelts, 2);
         for (int i = 0; i < nelts; i++)
           {
  	   if (known_lt ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
*************** and,
*** 11795,11803 ****
  	    number of VEC_PERM_EXPRs that can't be handled.  */
  	 if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
  	     || (single_use (@0)
! 		 ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, false)
! 		    || !can_vec_perm_const_p (result_mode, op_mode, sel1, false))
! 		 : !can_vec_perm_const_p (result_mode, op_mode, sel1, false)))
  	   op0 = vec_perm_indices_to_tree (TREE_TYPE (@4), sel2);
         }
         (if (op0)
--- 11820,11828 ----
  	    number of VEC_PERM_EXPRs that can't be handled.  */
  	 if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
  	     || (single_use (@0)
! 		 ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
! 		    || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
! 		 : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
  	   op0 = vec_perm_indices_to_tree (TREE_TYPE (@4), sel2);
         }
         (if (op0)
*************** and,
*** 11817,11834 ****
       machine_mode result_mode = TYPE_MODE (type);
       machine_mode op_mode = TYPE_MODE (TREE_TYPE (@1));
       int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
!      vec_perm_builder builder0;
!      vec_perm_builder builder1;
!      vec_perm_builder builder2 (nelts, nelts, 2);
     }
!    (if (tree_to_vec_perm_builder (&builder0, @3)
! 	&& tree_to_vec_perm_builder (&builder1, @4))
      (with
       {
-        vec_perm_indices sel0 (builder0, 2, nelts);
-        vec_perm_indices sel1 (builder1, 2, nelts);
         bool use_1 = false, use_2 = false;
  
         for (int i = 0; i < nelts; i++)
           {
  	   if (known_ge ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
--- 11842,11856 ----
       machine_mode result_mode = TYPE_MODE (type);
       machine_mode op_mode = TYPE_MODE (TREE_TYPE (@1));
       int nelts = TYPE_VECTOR_SUBPARTS (type).to_constant ();
!      vec_perm_indices sel0, sel1;
     }
!    (if (tree_to_vec_perm_indices (&sel0, @1, @2, @3)
!         && tree_to_vec_perm_indices (&sel1, @0, @5, @4))
      (with
       {
         bool use_1 = false, use_2 = false;
  
+        vec_perm_builder builder2 (nelts, nelts, 2);
         for (int i = 0; i < nelts; i++)
           {
  	   if (known_ge ((poly_uint64)sel1[i], sel1.nelts_per_input ()))
*************** and,
*** 11859,11867 ****
  	    number of VEC_PERM_EXPRs that can't be handled.  */
  	 if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
  	     || (single_use (@0)
! 		 ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, false)
! 		    || !can_vec_perm_const_p (result_mode, op_mode, sel1, false))
! 		 : !can_vec_perm_const_p (result_mode, op_mode, sel1, false)))
  	   op0 = vec_perm_indices_to_tree (TREE_TYPE (@4), sel2);
         }
         (if (op0)
--- 11881,11889 ----
  	    number of VEC_PERM_EXPRs that can't be handled.  */
  	 if (can_vec_perm_const_p (result_mode, op_mode, sel2, false)
  	     || (single_use (@0)
! 		 ? (!can_vec_perm_const_p (result_mode, op_mode, sel0, true)
! 		    || !can_vec_perm_const_p (result_mode, op_mode, sel1, true))
! 		 : !can_vec_perm_const_p (result_mode, op_mode, sel1, true)))
  	   op0 = vec_perm_indices_to_tree (TREE_TYPE (@4), sel2);
         }
         (if (op0)
diff -Nrcpad gcc-17-20260621/gcc/objc/objc-act.h gcc-17-20260628/gcc/objc/objc-act.h
*** gcc-17-20260621/gcc/objc/objc-act.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/objc/objc-act.h	Sun Jun 28 22:32:08 2026
*************** struct GTY(()) imp_entry {
*** 302,308 ****
    tree imp_template;
    tree class_decl;		/* _OBJC[_v2]_CLASS/CATEGORY_<my_name>; */
    tree meta_decl;		/* _OBJC[_v2]_METACLASS_<my_name>; */
!   BOOL_BITFIELD has_cxx_cdtors : 1;
  };
  
  extern GTY(()) struct imp_entry *imp_list;
--- 302,308 ----
    tree imp_template;
    tree class_decl;		/* _OBJC[_v2]_CLASS/CATEGORY_<my_name>; */
    tree meta_decl;		/* _OBJC[_v2]_METACLASS_<my_name>; */
!   bool has_cxx_cdtors : 1;
  };
  
  extern GTY(()) struct imp_entry *imp_list;
diff -Nrcpad gcc-17-20260621/gcc/objcp/ChangeLog gcc-17-20260628/gcc/objcp/ChangeLog
*** gcc-17-20260621/gcc/objcp/ChangeLog	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/objcp/ChangeLog	Sun Jun 28 22:32:08 2026
***************
*** 1,3 ****
--- 1,7 ----
+ 2026-06-25  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* Make-lang.in: Test in parallel with up to 6 instances.
+ 
  2025-06-12  Jakub Jelinek  <jakub@redhat.com>
  
  	* objcp-decl.h (TYPE_OBJC_INFO): Define to info.objc_info
diff -Nrcpad gcc-17-20260621/gcc/objcp/Make-lang.in gcc-17-20260628/gcc/objcp/Make-lang.in
*** gcc-17-20260621/gcc/objcp/Make-lang.in	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/objcp/Make-lang.in	Sun Jun 28 22:32:08 2026
*************** obj-c++.tags: force
*** 140,145 ****
--- 140,147 ----
  	$(ETAGS) --include TAGS.sub --include ../TAGS.sub
  
  lang_checks += check-obj-c++
+ lang_checks_parallelized += check-obj-c++
+ check_obj-c++_parallelize = 6
  
  # No objc-c++-specific selftests
  selftest-obj-c++:
diff -Nrcpad gcc-17-20260621/gcc/omp-builtins.def gcc-17-20260628/gcc/omp-builtins.def
*** gcc-17-20260621/gcc/omp-builtins.def	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/omp-builtins.def	Sun Jun 28 22:32:08 2026
*************** DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_S
*** 98,107 ****
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_END, "GOMP_atomic_end",
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER_CANCEL, "GOMP_barrier_cancel",
! 		  BT_FN_BOOL, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT, "GOMP_taskwait",
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT_DEPEND, "GOMP_taskwait_depend",
--- 98,111 ----
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ATOMIC_END, "GOMP_atomic_end",
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_REDUCTION_START, "GOMP_reduction_start",
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_REDUCTION_END, "GOMP_reduction_end",
! 		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier_ext", BT_FN_VOID_INT,
! 		  ATTR_NOTHROW_LEAF_LIST)
! DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER_CANCEL, "GOMP_barrier_cancel_ext",
! 		  BT_FN_BOOL_INT, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT, "GOMP_taskwait",
  		  BT_FN_VOID, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_TASKWAIT_DEPEND, "GOMP_taskwait_depend",
*************** DEF_GOMP_BUILTIN (BUILT_IN_GOMP_WARNING,
*** 496,498 ****
--- 500,511 ----
  		  BT_FN_VOID_CONST_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
  DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ERROR, "GOMP_error",
  		  BT_FN_VOID_CONST_PTR_SIZE, ATTR_COLD_NORETURN_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_HAS_MASKED_THREAD_NUM,
+ 		  "GOMP_has_masked_thread_num", BT_FN_BOOL_INT,
+ 		  ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING,
+ 		  "GOMP_loop_static_worksharing", BT_FN_COMPLEX_INT,
+ 		  ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GOMP_BUILTIN (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING,
+ 		  "GOMP_distribute_static_worksharing", BT_FN_COMPLEX_INT,
+ 		  ATTR_CONST_NOTHROW_LEAF_LIST)
diff -Nrcpad gcc-17-20260621/gcc/omp-expand.cc gcc-17-20260628/gcc/omp-expand.cc
*** gcc-17-20260621/gcc/omp-expand.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/omp-expand.cc	Sun Jun 28 22:32:08 2026
*************** expand_omp_for_static_nochunk (struct om
*** 5190,5216 ****
  	  release_ssa_name (gimple_assign_lhs (g));
  	}
      }
    switch (gimple_omp_for_kind (fd->for_stmt))
      {
      case GF_OMP_FOR_KIND_FOR:
!       nthreads = builtin_decl_explicit (BUILT_IN_OMP_GET_NUM_THREADS);
!       threadid = builtin_decl_explicit (BUILT_IN_OMP_GET_THREAD_NUM);
        break;
      case GF_OMP_FOR_KIND_DISTRIBUTE:
!       nthreads = builtin_decl_explicit (BUILT_IN_OMP_GET_NUM_TEAMS);
!       threadid = builtin_decl_explicit (BUILT_IN_OMP_GET_TEAM_NUM);
        break;
      default:
        gcc_unreachable ();
      }
!   nthreads = build_call_expr (nthreads, 0);
!   nthreads = fold_convert (itype, nthreads);
!   nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
! 				       true, GSI_SAME_STMT);
!   threadid = build_call_expr (threadid, 0);
!   threadid = fold_convert (itype, threadid);
!   threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
  				       true, GSI_SAME_STMT);
  
    n1 = fd->loop.n1;
    n2 = fd->loop.n2;
--- 5190,5227 ----
  	  release_ssa_name (gimple_assign_lhs (g));
  	}
      }
+   /* Fetch the thread/team id and the number of threads/teams in a single
+      call to GOMP_loop_static_worksharing or GOMP_distribute_static_worksharing.
+      The helper returns both values packed into one complex int, with
+      the id as the imaginary part and the count as the real part.  Returning
+      (rather than writing through pointers) keeps both values as plain SSA
+      names, which lets later passes - notably IPA-CP propagating constants
+      into the outlined kernel - reason about them.  */
+   tree decl;
    switch (gimple_omp_for_kind (fd->for_stmt))
      {
      case GF_OMP_FOR_KIND_FOR:
!       decl = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING);
        break;
      case GF_OMP_FOR_KIND_DISTRIBUTE:
!       decl = builtin_decl_explicit (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING);
        break;
      default:
        gcc_unreachable ();
      }
!   {
!     tree packed = build_call_expr (decl, 0);
!     packed = force_gimple_operand_gsi (&gsi, packed, true, NULL_TREE,
  				       true, GSI_SAME_STMT);
+     threadid = fold_build1 (IMAGPART_EXPR, integer_type_node, packed);
+     threadid = fold_convert (itype, threadid);
+     threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
+ 					 true, GSI_SAME_STMT);
+     nthreads = fold_build1 (REALPART_EXPR, integer_type_node, packed);
+     nthreads = fold_convert (itype, nthreads);
+     nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
+ 					 true, GSI_SAME_STMT);
+   }
  
    n1 = fd->loop.n1;
    n2 = fd->loop.n2;
*************** expand_omp_for_static_nochunk (struct om
*** 5591,5597 ****
  	  gsi_insert_after (&gsi, g, GSI_SAME_STMT);
  	}
        else
! 	gsi_insert_after (&gsi, omp_build_barrier (t), GSI_SAME_STMT);
      }
    else if ((fd->have_pointer_condtemp || fd->have_scantemp)
  	   && !fd->have_nonctrl_scantemp)
--- 5602,5611 ----
  	  gsi_insert_after (&gsi, g, GSI_SAME_STMT);
  	}
        else
! 	gsi_insert_after (&gsi,
! 			  omp_build_barrier (t,
! 					     GOMP_BARRIER_IMPLICIT_WORKSHARE),
! 			  GSI_SAME_STMT);
      }
    else if ((fd->have_pointer_condtemp || fd->have_scantemp)
  	   && !fd->have_nonctrl_scantemp)
*************** expand_omp_for_static_chunk (struct omp_
*** 5944,5970 ****
  	  release_ssa_name (gimple_assign_lhs (g));
  	}
      }
    switch (gimple_omp_for_kind (fd->for_stmt))
      {
      case GF_OMP_FOR_KIND_FOR:
!       nthreads = builtin_decl_explicit (BUILT_IN_OMP_GET_NUM_THREADS);
!       threadid = builtin_decl_explicit (BUILT_IN_OMP_GET_THREAD_NUM);
        break;
      case GF_OMP_FOR_KIND_DISTRIBUTE:
!       nthreads = builtin_decl_explicit (BUILT_IN_OMP_GET_NUM_TEAMS);
!       threadid = builtin_decl_explicit (BUILT_IN_OMP_GET_TEAM_NUM);
        break;
      default:
        gcc_unreachable ();
      }
!   nthreads = build_call_expr (nthreads, 0);
!   nthreads = fold_convert (itype, nthreads);
!   nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
! 				       true, GSI_SAME_STMT);
!   threadid = build_call_expr (threadid, 0);
!   threadid = fold_convert (itype, threadid);
!   threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
  				       true, GSI_SAME_STMT);
  
    n1 = fd->loop.n1;
    n2 = fd->loop.n2;
--- 5958,5995 ----
  	  release_ssa_name (gimple_assign_lhs (g));
  	}
      }
+   /* Fetch the thread/team id and the number of threads/teams in a single
+      call to GOMP_loop_static_worksharing or GOMP_distribute_static_worksharing.
+      The helper returns both values packed into one complex int, with
+      the id as the imaginary part and the count as the real part.  Returning
+      (rather than writing through pointers) keeps both values as plain SSA
+      names, which lets later passes - notably IPA-CP propagating constants
+      into the outlined kernel - reason about them.  */
+   tree decl;
    switch (gimple_omp_for_kind (fd->for_stmt))
      {
      case GF_OMP_FOR_KIND_FOR:
!       decl = builtin_decl_explicit (BUILT_IN_GOMP_LOOP_STATIC_WORKSHARING);
        break;
      case GF_OMP_FOR_KIND_DISTRIBUTE:
!       decl = builtin_decl_explicit (BUILT_IN_GOMP_DISTRIBUTE_STATIC_WORKSHARING);
        break;
      default:
        gcc_unreachable ();
      }
!   {
!     tree packed = build_call_expr (decl, 0);
!     packed = force_gimple_operand_gsi (&gsi, packed, true, NULL_TREE,
  				       true, GSI_SAME_STMT);
+     threadid = fold_build1 (IMAGPART_EXPR, integer_type_node, packed);
+     threadid = fold_convert (itype, threadid);
+     threadid = force_gimple_operand_gsi (&gsi, threadid, true, NULL_TREE,
+ 					 true, GSI_SAME_STMT);
+     nthreads = fold_build1 (REALPART_EXPR, integer_type_node, packed);
+     nthreads = fold_convert (itype, nthreads);
+     nthreads = force_gimple_operand_gsi (&gsi, nthreads, true, NULL_TREE,
+ 					 true, GSI_SAME_STMT);
+   }
  
    n1 = fd->loop.n1;
    n2 = fd->loop.n2;
*************** expand_omp_for_static_chunk (struct omp_
*** 6302,6308 ****
  	  gsi_insert_after (&gsi, g, GSI_SAME_STMT);
  	}
        else
! 	gsi_insert_after (&gsi, omp_build_barrier (t), GSI_SAME_STMT);
      }
    else if (fd->have_pointer_condtemp)
      {
--- 6327,6336 ----
  	  gsi_insert_after (&gsi, g, GSI_SAME_STMT);
  	}
        else
! 	gsi_insert_after (&gsi,
! 			  omp_build_barrier (t,
! 					     GOMP_BARRIER_IMPLICIT_WORKSHARE),
! 			  GSI_SAME_STMT);
      }
    else if (fd->have_pointer_condtemp)
      {
*************** expand_omp_single (struct omp_region *re
*** 8680,8686 ****
    if (!gimple_omp_return_nowait_p (gsi_stmt (si)))
      {
        tree t = gimple_omp_return_lhs (gsi_stmt (si));
!       gsi_insert_after (&si, omp_build_barrier (t), GSI_SAME_STMT);
      }
    gsi_remove (&si, true);
    single_succ_edge (exit_bb)->flags = EDGE_FALLTHRU;
--- 8708,8716 ----
    if (!gimple_omp_return_nowait_p (gsi_stmt (si)))
      {
        tree t = gimple_omp_return_lhs (gsi_stmt (si));
!       gsi_insert_after (&si,
! 			omp_build_barrier (t, GOMP_BARRIER_IMPLICIT_WORKSHARE),
! 			GSI_SAME_STMT);
      }
    gsi_remove (&si, true);
    single_succ_edge (exit_bb)->flags = EDGE_FALLTHRU;
diff -Nrcpad gcc-17-20260621/gcc/omp-general.cc gcc-17-20260628/gcc/omp-general.cc
*** gcc-17-20260621/gcc/omp-general.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/omp-general.cc	Sun Jun 28 22:32:08 2026
*************** omp_extract_for_data (gomp_for *for_stmt
*** 920,930 ****
  /* Build a call to GOMP_barrier.  */
  
  gimple *
! omp_build_barrier (tree lhs)
  {
    tree fndecl = builtin_decl_explicit (lhs ? BUILT_IN_GOMP_BARRIER_CANCEL
  					   : BUILT_IN_GOMP_BARRIER);
!   gcall *g = gimple_build_call (fndecl, 0);
    if (lhs)
      gimple_call_set_lhs (g, lhs);
    return g;
--- 920,931 ----
  /* Build a call to GOMP_barrier.  */
  
  gimple *
! omp_build_barrier (tree lhs, int kind)
  {
    tree fndecl = builtin_decl_explicit (lhs ? BUILT_IN_GOMP_BARRIER_CANCEL
  					   : BUILT_IN_GOMP_BARRIER);
!   gcall *g = gimple_build_call (fndecl, 1,
! 				build_int_cst (integer_type_node, kind));
    if (lhs)
      gimple_call_set_lhs (g, lhs);
    return g;
*************** omp_runtime_api_procname (const char *na
*** 3959,3974 ****
    static const char *omp_runtime_apis[] =
      {
        /* This array has 3 sections.  First omp_* calls that don't
! 	 have any suffixes.  */
        "aligned_alloc",
        "aligned_calloc",
        "alloc",
        "calloc",
        "free",
        "get_interop_int",
        "get_interop_ptr",
        "get_mapped_ptr",
        "get_num_interop_properties",
        "realloc",
        "target_alloc",
        "target_associate_ptr",
--- 3960,3984 ----
    static const char *omp_runtime_apis[] =
      {
        /* This array has 3 sections.  First omp_* calls that don't
! 	 have any suffixes; this implies bind(C) either in the
! 	 specification or implementation choice.  */
        "aligned_alloc",
        "aligned_calloc",
        "alloc",
        "calloc",
        "free",
+       "get_device_distances",
        "get_interop_int",
        "get_interop_ptr",
        "get_mapped_ptr",
        "get_num_interop_properties",
+       "get_num_teams_dim",
+       "get_num_threads_dim",
+       "get_supported_teams_dim",
+       "get_supported_threads_dim",
+       "get_team_num_dim",
+       "get_thread_limit_dim",
+       "get_thread_num_dim",
        "realloc",
        "target_alloc",
        "target_associate_ptr",
*************** omp_runtime_api_procname (const char *na
*** 4016,4022 ****
--- 4026,4034 ----
        "get_partition_num_places",
        "get_place_num",
        "get_proc_bind",
+       "get_supported_active_league_dims",
        "get_supported_active_levels",
+       "get_supported_active_team_dims",
        "get_team_num",
        "get_teams_thread_limit",
        "get_thread_limit",
*************** omp_runtime_api_procname (const char *na
*** 4059,4065 ****
        "set_num_teams",
        "set_num_threads",
        "set_schedule",
!       "set_teams_thread_limit"
      };
  
    int mode = 0;
--- 4071,4078 ----
        "set_num_teams",
        "set_num_threads",
        "set_schedule",
!       "set_teams_thread_limit",
!       "target_memset"
      };
  
    int mode = 0;
diff -Nrcpad gcc-17-20260621/gcc/omp-general.h gcc-17-20260628/gcc/omp-general.h
*** gcc-17-20260621/gcc/omp-general.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/omp-general.h	Sun Jun 28 22:32:08 2026
*************** extern void omp_adjust_for_condition (lo
*** 189,195 ****
  extern tree omp_get_for_step_from_incr (location_t loc, tree incr);
  extern void omp_extract_for_data (gomp_for *for_stmt, struct omp_for_data *fd,
  				  struct omp_for_data_loop *loops);
! extern gimple *omp_build_barrier (tree lhs);
  extern tree find_combined_omp_for (tree *, int *, void *);
  extern poly_uint64 omp_max_vf (bool);
  extern int omp_max_simt_vf (void);
--- 189,195 ----
  extern tree omp_get_for_step_from_incr (location_t loc, tree incr);
  extern void omp_extract_for_data (gomp_for *for_stmt, struct omp_for_data *fd,
  				  struct omp_for_data_loop *loops);
! extern gimple *omp_build_barrier (tree lhs, int kind);
  extern tree find_combined_omp_for (tree *, int *, void *);
  extern poly_uint64 omp_max_vf (bool);
  extern int omp_max_simt_vf (void);
diff -Nrcpad gcc-17-20260621/gcc/omp-low.cc gcc-17-20260628/gcc/omp-low.cc
*** gcc-17-20260621/gcc/omp-low.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/omp-low.cc	Sun Jun 28 22:32:08 2026
*************** scan_omp_1_stmt (gimple_stmt_iterator *g
*** 4168,4176 ****
  		      || strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)),
  				 "omp_get_num_teams") != 0)
  		  && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl))
  		       != strlen ("omp_get_team_num"))
  		      || strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)),
! 				 "omp_get_team_num") != 0))
  		{
  		  remove = true;
  		  error_at (gimple_location (stmt),
--- 4168,4184 ----
  		      || strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)),
  				 "omp_get_num_teams") != 0)
  		  && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl))
+ 		       != strlen ("omp_get_num_teams_dim"))
+ 		      || strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)),
+ 				 "omp_get_num_teams_dim") != 0)
+ 		  && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl))
  		       != strlen ("omp_get_team_num"))
  		      || strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)),
! 				 "omp_get_team_num") != 0)
! 		  && ((IDENTIFIER_LENGTH (DECL_NAME (fndecl))
! 		       != strlen ("omp_get_team_num_dim"))
! 		      || strcmp (IDENTIFIER_POINTER (DECL_NAME (fndecl)),
! 				 "omp_get_team_num_dim") != 0))
  		{
  		  remove = true;
  		  error_at (gimple_location (stmt),
*************** lower_rec_input_clauses (tree clauses, g
*** 7035,7041 ****
        if (!is_task_ctx (ctx)
  	  && (gimple_code (ctx->stmt) != GIMPLE_OMP_FOR
  	      || gimple_omp_for_kind (ctx->stmt) == GF_OMP_FOR_KIND_FOR))
! 	gimple_seq_add_stmt (ilist, omp_build_barrier (NULL_TREE));
      }
  
    /* If max_vf is non-zero, then we can use only a vectorization factor
--- 7043,7067 ----
        if (!is_task_ctx (ctx)
  	  && (gimple_code (ctx->stmt) != GIMPLE_OMP_FOR
  	      || gimple_omp_for_kind (ctx->stmt) == GF_OMP_FOR_KIND_FOR))
! 	{
! 	  int barrier_kind;
! 	  switch (gimple_code (ctx->stmt))
! 	    {
! 	    case GIMPLE_OMP_SECTIONS:
! 	    case GIMPLE_OMP_SCOPE:
! 	    case GIMPLE_OMP_FOR:
! 	      barrier_kind = GOMP_BARRIER_IMPLICIT_WORKSHARE;
! 	      break;
! 	    case GIMPLE_OMP_PARALLEL:
! 	    case GIMPLE_OMP_TEAMS:
! 	      barrier_kind = GOMP_BARRIER_IMPLICIT_PARALLEL;
! 	      break;
! 	    default:
! 	      gcc_unreachable ();
! 	    }
! 	  gimple_seq_add_stmt (ilist,
! 			       omp_build_barrier (NULL_TREE, barrier_kind));
! 	}
      }
  
    /* If max_vf is non-zero, then we can use only a vectorization factor
*************** lower_reduction_clauses (tree clauses, g
*** 7974,7981 ****
  	}
      }
  
!   stmt = gimple_build_call (builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_START),
! 			    0);
    gimple_seq_add_stmt (stmt_seqp, stmt);
  
    gimple_seq_add_seq (stmt_seqp, sub_seq);
--- 8000,8008 ----
  	}
      }
  
!   stmt
!     = gimple_build_call (builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_START),
! 			 0);
    gimple_seq_add_stmt (stmt_seqp, stmt);
  
    gimple_seq_add_seq (stmt_seqp, sub_seq);
*************** lower_reduction_clauses (tree clauses, g
*** 7986,7992 ****
        *clist = NULL;
      }
  
!   stmt = gimple_build_call (builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_END),
  			    0);
    gimple_seq_add_stmt (stmt_seqp, stmt);
  }
--- 8013,8019 ----
        *clist = NULL;
      }
  
!   stmt = gimple_build_call (builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_END),
  			    0);
    gimple_seq_add_stmt (stmt_seqp, stmt);
  }
*************** lower_omp_sections (gimple_stmt_iterator
*** 8690,8700 ****
  			   &clist, ctx);
    if (clist)
      {
!       tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_START);
        gcall *g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&olist, g);
        gimple_seq_add_seq (&olist, clist);
!       fndecl = builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_END);
        g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&olist, g);
      }
--- 8717,8727 ----
  			   &clist, ctx);
    if (clist)
      {
!       tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_START);
        gcall *g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&olist, g);
        gimple_seq_add_seq (&olist, clist);
!       fndecl = builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_END);
        g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&olist, g);
      }
*************** lower_omp_scope (gimple_stmt_iterator *g
*** 8969,8979 ****
  			   &bind_body, &clist, ctx);
    if (clist)
      {
!       tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_START);
        gcall *g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&bind_body, g);
        gimple_seq_add_seq (&bind_body, clist);
!       fndecl = builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_END);
        g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&bind_body, g);
      }
--- 8996,9006 ----
  			   &bind_body, &clist, ctx);
    if (clist)
      {
!       tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_START);
        gcall *g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&bind_body, g);
        gimple_seq_add_seq (&bind_body, clist);
!       fndecl = builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_END);
        g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&bind_body, g);
      }
*************** lower_omp_master (gimple_stmt_iterator *
*** 9060,9068 ****
    gsi_replace (gsi_p, bind, true);
    gimple_bind_add_stmt (bind, stmt);
  
!   bfn_decl = builtin_decl_explicit (BUILT_IN_OMP_GET_THREAD_NUM);
!   x = build_call_expr_loc (loc, bfn_decl, 0);
!   x = build2 (EQ_EXPR, boolean_type_node, x, filter);
    x = build3 (COND_EXPR, void_type_node, x, NULL, build_and_jump (&lab));
    tseq = NULL;
    gimplify_and_add (x, &tseq);
--- 9087,9094 ----
    gsi_replace (gsi_p, bind, true);
    gimple_bind_add_stmt (bind, stmt);
  
!   bfn_decl = builtin_decl_explicit (BUILT_IN_GOMP_HAS_MASKED_THREAD_NUM);
!   x = build_call_expr_loc (loc, bfn_decl, 1, filter);
    x = build3 (COND_EXPR, void_type_node, x, NULL, build_and_jump (&lab));
    tseq = NULL;
    gimplify_and_add (x, &tseq);
*************** lower_omp_for_scan (gimple_seq *body_p,
*** 11470,11476 ****
    g = gimple_build_label (lab1);
    gimple_seq_add_stmt (body_p, g);
  
!   g = omp_build_barrier (NULL);
    gimple_seq_add_stmt (body_p, g);
  
    tree down = create_tmp_var (unsigned_type_node);
--- 11496,11502 ----
    g = gimple_build_label (lab1);
    gimple_seq_add_stmt (body_p, g);
  
!   g = omp_build_barrier (NULL, GOMP_BARRIER_IMPLICIT_WORKSHARE);
    gimple_seq_add_stmt (body_p, g);
  
    tree down = create_tmp_var (unsigned_type_node);
*************** lower_omp_for_scan (gimple_seq *body_p,
*** 11587,11593 ****
    g = gimple_build_label (lab12);
    gimple_seq_add_stmt (body_p, g);
  
!   g = omp_build_barrier (NULL);
    gimple_seq_add_stmt (body_p, g);
  
    g = gimple_build_cond (NE_EXPR, k, build_zero_cst (unsigned_type_node),
--- 11613,11619 ----
    g = gimple_build_label (lab12);
    gimple_seq_add_stmt (body_p, g);
  
!   g = omp_build_barrier (NULL, GOMP_BARRIER_IMPLICIT_WORKSHARE);
    gimple_seq_add_stmt (body_p, g);
  
    g = gimple_build_cond (NE_EXPR, k, build_zero_cst (unsigned_type_node),
*************** lower_omp_for (gimple_stmt_iterator *gsi
*** 11927,11937 ****
  
    if (clist)
      {
!       tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_START);
        gcall *g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&body, g);
        gimple_seq_add_seq (&body, clist);
!       fndecl = builtin_decl_explicit (BUILT_IN_GOMP_ATOMIC_END);
        g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&body, g);
      }
--- 11953,11963 ----
  
    if (clist)
      {
!       tree fndecl = builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_START);
        gcall *g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&body, g);
        gimple_seq_add_seq (&body, clist);
!       fndecl = builtin_decl_explicit (BUILT_IN_GOMP_REDUCTION_END);
        g = gimple_build_call (fndecl, 0);
        gimple_seq_add_stmt (&body, g);
      }
*************** lower_omp_map_iterator_expr (tree expr,
*** 12704,12711 ****
      return expr;
  
    tree iterator = OMP_CLAUSE_ITERATORS (c);
!   tree elems = TREE_VEC_ELT (iterator, 7);
!   tree index = TREE_VEC_ELT (iterator, 8);
    gimple_seq *loop_body_p = enter_omp_iterator_loop_context (c, stmt);
  
     /* IN LOOP BODY:  */
--- 12730,12737 ----
      return expr;
  
    tree iterator = OMP_CLAUSE_ITERATORS (c);
!   tree index = OMP_ITERATOR_INDEX (iterator);
!   tree elems = OMP_ITERATOR_ELEMS (iterator);
    gimple_seq *loop_body_p = enter_omp_iterator_loop_context (c, stmt);
  
     /* IN LOOP BODY:  */
*************** lower_omp_map_iterator_size (tree size,
*** 12732,12739 ****
      return size;
  
    tree iterator = OMP_CLAUSE_ITERATORS (c);
!   tree elems = TREE_VEC_ELT (iterator, 7);
!   tree index = TREE_VEC_ELT (iterator, 8);
    gimple_seq *loop_body_p = enter_omp_iterator_loop_context (c, stmt);
  
    /* IN LOOP BODY:  */
--- 12758,12765 ----
      return size;
  
    tree iterator = OMP_CLAUSE_ITERATORS (c);
!   tree index = OMP_ITERATOR_INDEX (iterator);
!   tree elems = OMP_ITERATOR_ELEMS (iterator);
    gimple_seq *loop_body_p = enter_omp_iterator_loop_context (c, stmt);
  
    /* IN LOOP BODY:  */
diff -Nrcpad gcc-17-20260621/gcc/optabs-query.cc gcc-17-20260628/gcc/optabs-query.cc
*** gcc-17-20260621/gcc/optabs-query.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/optabs-query.cc	Sun Jun 28 22:32:08 2026
*************** can_vec_perm_var_p (machine_mode mode)
*** 415,426 ****
  /* Return true if the target directly supports VEC_PERM_EXPRs on vectors
     of mode OP_MODE and result vector of mode MODE using the selector SEL.
     ALLOW_VARIABLE_P is true if it is acceptable to force the selector into a
!    register and use a variable permute (if the target supports that).
! 
!    Note that additional permutations representing whole-vector shifts may
!    also be handled via the vec_shr or vec_shl optab, but only where the
!    second input vector is entirely constant zeroes; this case is not dealt
!    with here.  */
  
  bool
  can_vec_perm_const_p (machine_mode mode, machine_mode op_mode,
--- 415,421 ----
  /* Return true if the target directly supports VEC_PERM_EXPRs on vectors
     of mode OP_MODE and result vector of mode MODE using the selector SEL.
     ALLOW_VARIABLE_P is true if it is acceptable to force the selector into a
!    register and use a variable permute (if the target supports that).  */
  
  bool
  can_vec_perm_const_p (machine_mode mode, machine_mode op_mode,
*************** can_vec_perm_const_p (machine_mode mode,
*** 465,470 ****
--- 460,511 ----
  	 into integer operations.  */
      }
  
+   unsigned elements;
+   if (mode == op_mode
+       && GET_MODE_NUNITS (mode).is_constant (&elements))
+     {
+       if (sel.input_bitwise_zero_p (0)
+ 	  && can_implement_p (vec_shl_optab, mode))
+ 	{
+ 	  unsigned int first = 0, i;
+ 	  for (i = 0; i < elements; ++i)
+ 	    if (known_eq (poly_uint64 (sel[i]), elements))
+ 	      {
+ 		if (i == 0 || first)
+ 		  break;
+ 		first = i;
+ 	      }
+ 	    else if (first
+ 		     ? maybe_ne (poly_uint64 (sel[i]),
+ 				 elements + i - first)
+ 		     : maybe_ge (poly_uint64 (sel[i]), elements))
+ 	      break;
+ 	  if (first && i == elements)
+ 	    return true;
+ 	}
+       if (sel.input_bitwise_zero_p (1)
+ 	  && maybe_ne (sel[0], 0)
+ 	  && known_lt (sel[0], elements)
+ 	  && can_implement_p (vec_shr_optab, mode))
+ 	{
+ 	  if (sel.series_p (0, 1, sel[0], 1))
+ 	    return true;
+ 	  unsigned i;
+ 	  for (i = 1; i < elements; ++i)
+ 	    {
+ 	      poly_uint64 actual = sel[i];
+ 	      poly_uint64 expected = i + sel[0];
+ 	      /* Indices into the second vector are all equivalent.  */
+ 	      if (maybe_lt (actual, elements)
+ 		  ? maybe_ne (actual, expected)
+ 		  : maybe_lt (expected, elements))
+ 		break;
+ 	    }
+ 	  if (i == elements)
+ 	    return true;
+ 	}
+     }
+ 
    return false;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/opts.h gcc-17-20260628/gcc/opts.h
*** gcc-17-20260621/gcc/opts.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/opts.h	Sun Jun 28 22:32:08 2026
*************** struct cl_option
*** 95,125 ****
    /* CL_* flags for this option.  */
    unsigned int flags;
    /* Disabled in this configuration.  */
!   BOOL_BITFIELD cl_disabled : 1;
    /* Options marked with CL_SEPARATE take a number of separate
       arguments (1 to 4) that is one more than the number in this
       bit-field.  */
    unsigned int cl_separate_nargs : 2;
    /* Option is an alias when used with separate argument.  */
!   BOOL_BITFIELD cl_separate_alias : 1;
    /* Alias to negative form of option.  */
!   BOOL_BITFIELD cl_negative_alias : 1;
    /* Option takes no argument in the driver.  */
!   BOOL_BITFIELD cl_no_driver_arg : 1;
    /* Reject this option in the driver.  */
!   BOOL_BITFIELD cl_reject_driver : 1;
    /* Reject no- form.  */
!   BOOL_BITFIELD cl_reject_negative : 1;
    /* Missing argument OK (joined).  */
!   BOOL_BITFIELD cl_missing_ok : 1;
    /* Argument is an integer >=0.  */
!   BOOL_BITFIELD cl_uinteger : 1;
    /* Argument is a HOST_WIDE_INT.  */
!   BOOL_BITFIELD cl_host_wide_int : 1;
    /* Argument should be converted to lowercase.  */
!   BOOL_BITFIELD cl_tolower : 1;
    /* Argument is an unsigned integer with an optional byte suffix.  */
!   BOOL_BITFIELD cl_byte_size: 1;
    /* Offset of field for this option in struct gcc_options, or
       (unsigned short) -1 if none.  */
    unsigned short flag_var_offset;
--- 95,125 ----
    /* CL_* flags for this option.  */
    unsigned int flags;
    /* Disabled in this configuration.  */
!   bool cl_disabled : 1;
    /* Options marked with CL_SEPARATE take a number of separate
       arguments (1 to 4) that is one more than the number in this
       bit-field.  */
    unsigned int cl_separate_nargs : 2;
    /* Option is an alias when used with separate argument.  */
!   bool cl_separate_alias : 1;
    /* Alias to negative form of option.  */
!   bool cl_negative_alias : 1;
    /* Option takes no argument in the driver.  */
!   bool cl_no_driver_arg : 1;
    /* Reject this option in the driver.  */
!   bool cl_reject_driver : 1;
    /* Reject no- form.  */
!   bool cl_reject_negative : 1;
    /* Missing argument OK (joined).  */
!   bool cl_missing_ok : 1;
    /* Argument is an integer >=0.  */
!   bool cl_uinteger : 1;
    /* Argument is a HOST_WIDE_INT.  */
!   bool cl_host_wide_int : 1;
    /* Argument should be converted to lowercase.  */
!   bool cl_tolower : 1;
    /* Argument is an unsigned integer with an optional byte suffix.  */
!   bool cl_byte_size: 1;
    /* Offset of field for this option in struct gcc_options, or
       (unsigned short) -1 if none.  */
    unsigned short flag_var_offset;
diff -Nrcpad gcc-17-20260621/gcc/real.cc gcc-17-20260628/gcc/real.cc
*** gcc-17-20260621/gcc/real.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/real.cc	Sun Jun 28 22:32:10 2026
***************
*** 22,30 ****
--- 22,34 ----
  #include "config.h"
  #include "system.h"
  #include "coretypes.h"
+ #include "bitmap.h"
+ #include "function.h"
  #include "tm.h"
  #include "rtl.h"
  #include "tree.h"
+ #include "value-range.h"
+ #include "vr-values.h"
  #include "realmpfr.h"
  #include "dfp.h"
  
*************** bool format_helper::can_represent_integr
*** 5512,5517 ****
--- 5516,5541 ----
    return TYPE_PRECISION (type) - signed_p <= significand_size (*this);
  }
  
+ /* True if all values in integer range *VR can be represented by this
+    floating-point type exactly.  */
+ 
+ bool
+ format_helper::can_represent_range_value_p (const irange *vr) const
+ {
+   gcc_assert (!decimal_p ());
+ 
+   if (vr->undefined_p () || vr->varying_p ())
+     return false;
+ 
+   tree type = vr->type ();
+   unsigned precision = significand_size (*this);
+ 
+   if (TYPE_SIGN (type) == SIGNED)
+     precision++;
+ 
+   return range_fits_type_p (vr, precision, TYPE_SIGN (type));
+ }
+ 
  /* True if mode M has a NaN representation and
     the treatment of NaN operands is important.  */
  
diff -Nrcpad gcc-17-20260621/gcc/real.h gcc-17-20260628/gcc/real.h
*** gcc-17-20260621/gcc/real.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/real.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 223,228 ****
--- 223,229 ----
  
    bool decimal_p () const { return m_format && m_format->b == 10; }
    bool can_represent_integral_type_p (tree type) const;
+   bool can_represent_range_value_p (const class irange *) const;
  
  private:
    const real_format *m_format;
diff -Nrcpad gcc-17-20260621/gcc/recog.cc gcc-17-20260628/gcc/recog.cc
*** gcc-17-20260621/gcc/recog.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/recog.cc	Sun Jun 28 22:32:10 2026
*************** preprocess_constraints (int n_operands,
*** 2948,2953 ****
--- 2948,2954 ----
  	{
  	  op_alt[i].cl = NO_REGS;
  	  op_alt[i].register_filters = 0;
+ 	  op_alt[i].dependent_filters = 0;
  	  op_alt[i].constraint = p;
  	  op_alt[i].matches = -1;
  	  op_alt[i].matched = -1;
*************** preprocess_constraints (int n_operands,
*** 3015,3020 ****
--- 3016,3024 ----
  			  auto filter_id = get_register_filter_id (cn);
  			  if (filter_id >= 0)
  			    op_alt[i].register_filters |= 1U << filter_id;
+ 			  auto dep_filter_id = get_dependent_filter_id (cn);
+ 			  if (dep_filter_id >= 0)
+ 			    op_alt[i].dependent_filters |= 1U << dep_filter_id;
  			}
  		      break;
  
*************** struct funny_match
*** 3138,3143 ****
--- 3142,3170 ----
    int this_op, other;
  };
  
+ /* For a register constraint CN with a dependent filter, return true if
+    the respective filter allows REGNO (OP) + OFFSET given the ref-operand
+    in recog_data.operand or false if it doesn't.
+    If the filter cannot be evaluated, for example when no hard reg
+    has been chosen yet, return true.  */
+ 
+ static bool
+ test_dependent_filter (constraint_num cn, rtx op, int offset,
+ 		       machine_mode mode)
+ {
+   int id = get_dependent_filter_id (cn);
+   if (id < 0 || !REG_P (op))
+     return true;
+   int ref_opno = get_dependent_filter_ref (id);
+   if (ref_opno < 0 || ref_opno >= recog_data.n_operands)
+     return true;
+   rtx ref_op = recog_data.operand[ref_opno];
+   if (!REG_P (ref_op))
+     return true;
+   return eval_dependent_filter (id, REGNO (op) + offset, mode,
+ 				REGNO (ref_op), GET_MODE (ref_op));
+ }
+ 
  bool
  constrain_operands (int strict, alternative_mask alternatives)
  {
*************** constrain_operands (int strict, alternat
*** 3339,3345 ****
  			      && reg_fits_class_p (op, cl, offset, mode)
  			      && (!filter
  				  || TEST_HARD_REG_BIT (*filter,
! 							REGNO (op) + offset))))
  			win = true;
  		    }
  
--- 3366,3375 ----
  			      && reg_fits_class_p (op, cl, offset, mode)
  			      && (!filter
  				  || TEST_HARD_REG_BIT (*filter,
! 							REGNO (op) + offset))
! 			      && (strict <= 0
! 				  || test_dependent_filter (cn, op, offset,
! 							    mode))))
  			win = true;
  		    }
  
diff -Nrcpad gcc-17-20260621/gcc/recog.h gcc-17-20260628/gcc/recog.h
*** gcc-17-20260621/gcc/recog.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/recog.h	Sun Jun 28 22:32:10 2026
*************** struct operand_alternative
*** 68,73 ****
--- 68,77 ----
       to test whether REGNO is a valid start register for the operand.  */
    unsigned int register_filters : MAX (NUM_REGISTER_FILTERS, 1);
  
+   /* Bit ID is set if the constraint string includes a dependent
+      register constraint with dependent-filter id ID.  */
+   unsigned int dependent_filters : MAX (NUM_DEPENDENT_FILTERS, 1);
+ 
    /* Nonzero if '&' was found in the constraint string.  */
    unsigned int earlyclobber : 1;
    /* Nonzero if TARGET_MEM_CONSTRAINT was found in the constraint
*************** alternative_register_filters (const oper
*** 99,104 ****
--- 103,120 ----
  	  ? alt[alt[i].matches].register_filters
  	  : alt[i].register_filters);
  }
+ 
+ /* Return the mask of dynamic register filters that should be applied to
+    operand I of alternative ALT, taking matching constraints into
+    account.  */
+ 
+ inline unsigned int
+ alternative_dependent_filters (const operand_alternative *alt, int i)
+ {
+   return (alt[i].matches >= 0
+ 	  ? alt[alt[i].matches].dependent_filters
+ 	  : alt[i].dependent_filters);
+ }
  #endif
  
  /* A class for substituting one rtx for another within an instruction,
diff -Nrcpad gcc-17-20260621/gcc/rtl-ssa/accesses.cc gcc-17-20260628/gcc/rtl-ssa/accesses.cc
*** gcc-17-20260621/gcc/rtl-ssa/accesses.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rtl-ssa/accesses.cc	Sun Jun 28 22:32:10 2026
***************
*** 1,4 ****
! // Implementation of access-related functions for RTL SSA           -*- C++ -*-
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
--- 1,4 ----
! // Implementation of access-related functions for RTL SSA.
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
diff -Nrcpad gcc-17-20260621/gcc/rtl-ssa/blocks.cc gcc-17-20260628/gcc/rtl-ssa/blocks.cc
*** gcc-17-20260621/gcc/rtl-ssa/blocks.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rtl-ssa/blocks.cc	Sun Jun 28 22:32:10 2026
***************
*** 1,4 ****
! // Implementation of basic-block-related functions for RTL SSA      -*- C++ -*-
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
--- 1,4 ----
! // Implementation of basic-block-related functions for RTL SSA.
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
diff -Nrcpad gcc-17-20260621/gcc/rtl-ssa/changes.cc gcc-17-20260628/gcc/rtl-ssa/changes.cc
*** gcc-17-20260621/gcc/rtl-ssa/changes.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rtl-ssa/changes.cc	Sun Jun 28 22:32:10 2026
***************
*** 1,4 ****
! // RTL SSA routines for changing instructions                       -*- C++ -*-
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
--- 1,4 ----
! // RTL SSA routines for changing instructions.
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
diff -Nrcpad gcc-17-20260621/gcc/rtl-ssa/functions.cc gcc-17-20260628/gcc/rtl-ssa/functions.cc
*** gcc-17-20260621/gcc/rtl-ssa/functions.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rtl-ssa/functions.cc	Sun Jun 28 22:32:10 2026
***************
*** 1,4 ****
! // Implementation of function-related RTL SSA functions             -*- C++ -*-
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
--- 1,4 ----
! // Implementation of function-related RTL SSA functions.
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
diff -Nrcpad gcc-17-20260621/gcc/rtl-ssa/insns.cc gcc-17-20260628/gcc/rtl-ssa/insns.cc
*** gcc-17-20260621/gcc/rtl-ssa/insns.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rtl-ssa/insns.cc	Sun Jun 28 22:32:10 2026
***************
*** 1,4 ****
! // Implementation of instruction-related RTL SSA functions          -*- C++ -*-
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
--- 1,4 ----
! // Implementation of instruction-related RTL SSA functions.
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
diff -Nrcpad gcc-17-20260621/gcc/rtl.def gcc-17-20260628/gcc/rtl.def
*** gcc-17-20260621/gcc/rtl.def	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rtl.def	Sun Jun 28 22:32:10 2026
*************** DEF_RTL_EXPR(DEFINE_SPECIAL_PREDICATE, "
*** 1018,1025 ****
        used, in future will be incorporated into the manual's list of
        machine-specific operand constraints.
     3: A C expression that evaluates to true if "regno" is a valid
!       start register.  */
! DEF_RTL_EXPR(DEFINE_REGISTER_CONSTRAINT, "define_register_constraint", "sssS", RTX_EXTRA)
  
  /* Definition of a non-register operand constraint.  These look at the
     operand and decide whether it fits the constraint.
--- 1018,1031 ----
        used, in future will be incorporated into the manual's list of
        machine-specific operand constraints.
     3: A C expression that evaluates to true if "regno" is a valid
!       start register.  When the constraint has a dependent filter
!       (see operand 4), the expression can also reference "ref_regno"
!       and "ref_mode" of the operand it depends on.
!    4: Optional operand index for a dependent, dynamic filter.
!       When specified, the C expression of operand 3 is evaluated at
!       runtime with the additional "ref_regno" and "ref_mode" of the
!       referenced operand.  */
! DEF_RTL_EXPR(DEFINE_REGISTER_CONSTRAINT, "define_register_constraint", "sssSS", RTX_EXTRA)
  
  /* Definition of a non-register operand constraint.  These look at the
     operand and decide whether it fits the constraint.
diff -Nrcpad gcc-17-20260621/gcc/rust/ChangeLog gcc-17-20260628/gcc/rust/ChangeLog
*** gcc-17-20260621/gcc/rust/ChangeLog	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/ChangeLog	Sun Jun 28 22:32:10 2026
***************
*** 1,3 ****
--- 1,436 ----
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* Make-lang.in: Add rust-hir-type-check-intrinsic.o.
+ 	* typecheck/rust-hir-type-check-implitem.cc
+ 	(TypeCheckTopLevelExternItem::visit): Check intrinsic signature.
+ 	* typecheck/rust-hir-type-check-intrinsic.cc: New file.
+ 	* typecheck/rust-hir-type-check-intrinsic.h: New file.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-builtins.cc
+ 	(BuiltinsContext::register_rust_mappings): Use Values::Intrinsics
+ 	constants instead of raw strings.
+ 	* util/rust-intrinsic-values.h (class Intrinsics): Add missing
+ 	builtin intrinsics.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-intrinsic.cc (generic_intrinsics): Add
+ 	min_align_of to map.
+ 	* backend/rust-intrinsic-handlers.cc (min_align_of_handler):
+ 	New function.
+ 	* backend/rust-intrinsic-handlers.h (min_align_of_handler):
+ 	New declaration.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* typecheck/rust-hir-type-check-type.cc (TypeCheckType::resolve_root_path): Add
+ 	special casing for resolving to the builtin type definition if the found type
+ 	has the same name and is a module.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-name-resolution-context.hxx: Remove hacks.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* util/rust-hir-map.cc (Mappings::insert_module_id): New function.
+ 	(Mappings::is_module): Likewise.
+ 	* util/rust-hir-map.h: Store a set of AST modules, declare functions for adding and
+ 	retrieving them.
+ 	* resolve/rust-toplevel-name-resolver-2.0.cc (TopLevel::visit): Insert modules in the type
+ 	namespace and store them in mappings.
+ 	* resolve/rust-late-name-resolver-2.0.cc (resolve_type_path_like): Error out when an
+ 	expected type resolves to a module.
+ 	* resolve/rust-name-resolution.h: Add empty Definition constructor.
+ 	* resolve/rust-resolve-builtins.cc (find_builtin_node_id): New function.
+ 	* resolve/rust-resolve-builtins.h: Declare it.
+ 
+ 2026-06-25  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* resolve/rust-name-resolution-context.h (NameResolutionContext): Add new function
+ 	definition for `should_search_prelude`.
+ 	* resolve/rust-name-resolution-context.hxx (NameResolutionContext::should_search_prelude):
+ 	Add implementation.
+ 	(NameResolutionContext::resolve_segments): Update the check to trigger lang_prelude search
+ 	during name resolution in modules.
+ 
+ 2026-06-25  Lishin  <lishin1008@gmail.com>
+ 
+ 	* backend/rust-compile-context.h: Include
+ 	rust-compile-drop-candidate.h instead of rust-compile-drop.h.
+ 	* backend/rust-compile-drop.cc: Add copyright header.
+ 	(CompileDrop::compile_drop_call): Assert that Drop lookup returns a
+ 	single function candidate.
+ 	* backend/rust-compile-drop.h: Add copyright header. Include
+ 	rust-compile-context.h.
+ 	(RUST_COMPILE_DROP): Rename to...
+ 	(RUST_COMPILE_DROP_H): ...this.
+ 	(DropCandidate): Move to...
+ 	* backend/rust-compile-drop-candidate.h: ...this new file.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* backend/rust-compile-base.cc (HIRCompileBase::compile_function_body):
+ 	Add drop calls at the end of function bodies.
+ 
+ 2026-06-25  Lishin  <lishin1008@gmail.com>
+ 
+ 	* Make-lang.in: Add rust-compile-drop.o.
+ 	* backend/rust-compile-block.cc (compile_drop_call): Move to CompileDrop.
+ 	(CompileBlock::visit): Use CompileDrop to emit scope drop calls.
+ 	* backend/rust-compile-context.h (struct DropCandidate): Move to rust-compile-drop.h.
+ 	* backend/rust-compile-pattern.cc (type_has_drop_impl): Move to CompileDrop.
+ 	(CompilePatternLet::visit): Use CompileDrop to check Drop impls.
+ 	* backend/rust-compile-drop.cc: New file.
+ 	* backend/rust-compile-drop.h: New file.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* backend/rust-compile-pattern.cc (CompilePatternLet::visit): Check ref
+ 	pattern base types and emit a sorry for unsupported Drop ref/subpatterns.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* backend/rust-compile-block.cc (compile_drop_call): New helper to
+ 	build a drop call.
+ 	(CompileBlock::visit): Add drop calls for candidates.
+ 	* backend/rust-compile-pattern.cc (type_has_drop_impl): New helper to
+ 	check whether a type implements Drop.
+ 	(CompilePatternLet::visit): Save initialized simple drop candidates.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* backend/rust-compile-context.h (struct DropCandidate): New struct
+ 	for tracking block-local drop candidates.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-base.cc (HIRCompileBase::setup_fndecl): Dispatch the new
+ 	attributes.
+ 	(HIRCompileBase::handle_rustc_allocator_on_fndecl): New function.
+ 	(HIRCompileBase::handle_rustc_allocator_nounwind_on_fndecl): New function.
+ 	* backend/rust-compile-base.h (handle_rustc_allocator_on_fndecl): New declaration.
+ 	(handle_rustc_allocator_nounwind_on_fndecl): Likewise.
+ 	* util/rust-attribute-values.h (Attributes): Add RUSTC_ALLOCATOR and
+ 	RUSTC_ALLOCATOR_NOUNWIND constexprs.
+ 	* util/rust-attributes.cc (__definitions): Register rustc_allocator and
+ 	rustc_allocator_nounwind in the BuiltinAttributes list.
+ 	* checks/errors/rust-builtin-attribute-checker.cc (rustc_allocator): New function.
+ 	(rustc_allocator_nounwind): New function.
+ 	(attribute_checking_handlers): Add rustc_allocator and rustc_allocator_nounwind
+ 	functions.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-base.cc (should_mangle_item): Bypass
+ 	mangling for rustc_std_internal_symbol.
+ 	(HIRCompileBase::setup_fndecl): Dispatch the new attribute.
+ 	(HIRCompileBase::handle_rustc_std_internal_symbol_attribute_on_fndecl):
+ 	New function.
+ 	* backend/rust-compile-base.h:
+ 	(handle_rustc_std_internal_symbol_attribute_on_fndecl): New declaration.
+ 	* util/rust-attribute-values.h (Attributes): Add
+ 	RUSTC_STD_INTERNAL_SYMBOL constexpr.
+ 	* util/rust-attributes.cc (__definitions): Register
+ 	rustc_std_internal_symbol in the BuiltinAttributes list.
+ 	* checks/errors/rust-builtin-attribute-checker.cc (rustc_std_internal_symbol):
+ 	New function.
+ 	(attribute_checking_handlers): Add rustc_std_internal_symbol function.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* backend/rust-compile-base.cc (HIRCompileBase::setup_fndecl):
+ 	Remove reduntant as_string calls.
+ 
+ 2026-06-25  Pierre-Emmanuel Patry  <pierre-emmanuel.patry@embecosm.com>
+ 
+ 	* lex/rust-lex.cc (Lexer::parse_decimal_int_or_float): Prevent use
+ 	after move.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit): Call the new name.
+ 	(CompileExpr::lookup_temp_var): Rename it to...
+ 	(CompileExpr::lookup_label_temp_var): ...this.
+ 	* backend/rust-compile-expr.h: Likewise.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Add Types as a
+ 	namespace in which to lookup PathInExpressions.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* checks/errors/privacy/rust-privacy-reporter.cc
+ 	(PrivacyReporter::check_for_privacy_violation): Add new overload for two namespaces.
+ 	(PrivacyReporter::visit): Call it.
+ 	(PrivacyReporter::check_violation_inner): New function.
+ 	* checks/errors/privacy/rust-privacy-reporter.h: Declare it.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-finalized-name-resolution-context.cc
+ 	(FinalizedNameResolutionContext::lookup): New function.
+ 	* resolve/rust-finalized-name-resolution-context.h: Declare it.
+ 	* resolve/rust-name-resolution-context.cc (NameResolutionContext::lookup): New function.
+ 	* resolve/rust-name-resolution-context.h: Declare it.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.cc (Early::finalize_simple_import): Cleanup
+ 	dead code.
+ 	(Early::finalize_rebind_import): Likewise.
+ 	* resolve/rust-finalized-name-resolution-context.h: Add class documentation.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-forever-stack.h: Comment out flatten with an explanation.
+ 	* resolve/rust-forever-stack.hxx: Likewise.
+ 	* resolve/rust-name-resolution-context.cc (NameResolutionContext::flatten): Likewise.
+ 	* resolve/rust-name-resolution-context.h: Likewise.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.cc
+ 	(Early::finalize_rebind_import): Remove locus variable.
+ 
+ 2026-06-25  Enes Cevik  <nsvke@proton.me>
+ 
+ 	* checks/lints/rust-lint-marklive.cc (MarkLive::visit_path_segment): Add Types namespace
+ 	lookup.
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit): Use safe optional
+ 	unwrapping.
+ 	* checks/lints/unused/rust-unused-collector.cc (UnusedCollector::visit): Likewise.
+ 	* checks/lints/unused/rust-unused-collector.h: Use helper for multiple namespace lookups.
+ 	* resolve/rust-early-name-resolver-2.0.cc (Early::finalize_simple_import): Prevent ICE on
+ 	single self imports.
+ 	(Early::finalize_rebind_import): Return early to prevent ICE.
+ 	* resolve/rust-name-resolution-context.hxx: Use value_or for safe leaf module lookup.
+ 	* rust-session-manager.cc (Session::compile_crate): Remove obsolete flatten() calls.
+ 	* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Look up enum variants
+ 	in Types namespace.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.cc (Early::try_insert_once): Use new
+ 	Usage -> Definition map for macros.
+ 	* resolve/rust-finalized-name-resolution-context.cc
+ 	(FinalizedNameResolutionContext::map_usage): Dispatch to proper resolution map.
+ 	* resolve/rust-forever-stack.h (enum class LookupFinalizeError): Move here.
+ 	* resolve/rust-forever-stack.hxx: Make resolution take a resolve_segment lambda with
+ 	an extra namespace parameter.
+ 	* resolve/rust-name-resolution-context.hxx: Likewise.
+ 	* resolve/rust-name-resolution-context.cc (find_leaf_definition_inner): Move here...
+ 	(NameResolutionContext::find_leaf_definition): Likewise.
+ 	(NameResolutionContext::flatten): Likewise.
+ 	* resolve/rust-name-resolution-context.h: ...from here.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.h: Properly insert resolutions in
+ 	the returned vector as that was previously missing.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* checks/lints/rust-lint-marklive.cc (MarkLive::find_value_definition): Use Types NS
+ 	alongside Values NS for lookup.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-finalized-name-resolution-context.cc
+ 	(FinalizedNameResolutionContext::lookup): New function.
+ 	* resolve/rust-finalized-name-resolution-context.h: Declare it.
+ 	* resolve/rust-forever-stack.h: Remove assertion in map_usage.
+ 	* resolve/rust-name-resolution-context.h: Add new NSLookup return type.
+ 	* resolve/rust-name-resolution-context.cc (NameResolutionContext::lookup): Use it.
+ 	* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_root_path): Likewise.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* backend/rust-compile-implitem.cc (CompileTraitItem::visit): Adapt for new NR APIs.
+ 	* backend/rust-compile-item.cc (CompileItem::visit): Likewise.
+ 	* backend/rust-compile-resolve-path.cc (ResolvePathRef::resolve): Likewise.
+ 	* checks/errors/borrowck/rust-bir-builder-internal.h: Likewise.
+ 	* checks/errors/privacy/rust-privacy-reporter.cc
+ 	(PrivacyReporter::check_for_privacy_violation): Likewise.
+ 	(PrivacyReporter::check_base_type_privacy): Likewise.
+ 	(PrivacyReporter::visit): Likewise.
+ 	* checks/errors/privacy/rust-privacy-reporter.h: Likewise.
+ 	* checks/errors/privacy/rust-visibility-resolver.cc
+ 	(VisibilityResolver::resolve_module_path): Likewise.
+ 	* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
+ 	* checks/errors/rust-hir-pattern-analysis.cc (PatternChecker::visit): Likewise.
+ 	* checks/errors/rust-readonly-check.cc (ReadonlyChecker::visit): Likewise.
+ 	* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Likewise.
+ 	* checks/lints/rust-lint-marklive.cc (MarkLive::visit): Likewise.
+ 	(MarkLive::visit_path_segment): Likewise.
+ 	(MarkLive::find_ref_node_id): Likewise.
+ 	(MarkLive::find_value_definition): Likewise.
+ 	* checks/lints/rust-lint-marklive.h: Likewise.
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::visit): Likewise.
+ 	* checks/lints/unused/rust-unused-collector.cc (UnusedCollector::visit): Likewise.
+ 	* checks/lints/unused/rust-unused-collector.h: Likewise.
+ 	* resolve/rust-early-name-resolver-2.0.cc (Early::resolve_glob_import): Likewise.
+ 	(Early::resolve_rebind_import): Likewise.
+ 	(Early::visit): Likewise.
+ 	(Early::visit_derive_attribute): Likewise.
+ 	(Early::visit_non_builtin_attribute): Likewise.
+ 	(Early::finalize_simple_import): Likewise.
+ 	(Early::finalize_rebind_import): Likewise.
+ 	* resolve/rust-early-name-resolver-2.0.h: Likewise.
+ 	* resolve/rust-finalized-name-resolution-context.cc
+ 	(FinalizedNameResolutionContext::map_usage): Likewise.
+ 	(FinalizedNameResolutionContext::lookup): Likewise.
+ 	(FinalizedNameResolutionContext::to_canonical_path): Likewise.
+ 	* resolve/rust-finalized-name-resolution-context.h: Likewise.
+ 	* resolve/rust-forever-stack.h: Likewise.
+ 	* resolve/rust-late-name-resolver-2.0.cc (visit_identifier_as_pattern): Likewise.
+ 	(Late::visit): Likewise.
+ 	(Late::resolve_label): Likewise.
+ 	(resolve_type_path_like): Likewise.
+ 	* resolve/rust-name-resolution-context.cc
+ 	(CanonicalPathRecordCrateRoot::as_path): Likewise.
+ 	(CanonicalPathRecordNormal::as_path): Likewise.
+ 	(CanonicalPathRecordLookup::as_path): Likewise.
+ 	(CanonicalPathRecordImpl::as_path): Likewise.
+ 	(CanonicalPathRecordTraitImpl::as_path): Likewise.
+ 	(NameResolutionContext::map_usage): Likewise.
+ 	(NameResolutionContext::lookup): Likewise.
+ 	* resolve/rust-name-resolution-context.h: Likewise.
+ 	* typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_path_to_trait): Likewise.
+ 	* typecheck/rust-hir-type-check-enumitem.cc (TypeCheckEnumItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise.
+ 	(TypeCheckExpr::resolve_fn_trait_call): Likewise.
+ 	* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::visit): Likewise.
+ 	(TypeCheckExpr::resolve_root_path): Likewise.
+ 	(TypeCheckExpr::resolve_segments): Likewise.
+ 	* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-type.cc (TypeCheckType::resolve_root_path): Likewise.
+ 	(ResolveWhereClauseItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): Likewise.
+ 	* typecheck/rust-type-util.cc (query_type): Likewise.
+ 	* backend/rust-compile-expr.h (CompileExpr::resolve_nodeid): Likewise.
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit): Likewise.
+ 	(CompileExpr::lookup_label): Likewise.
+ 	(CompileExpr::lookup_temp_var): Likewise.
+ 	(CompileExpr::resolve_NodeId): Likewise, and rename to...
+ 	(CompileExpr::resolve_nodeid): ...this.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.cc (Early::insert_once): Rename...
+ 	(Early::try_insert_once): ...to this, and improve logic.
+ 	(Early::go): Use new API.
+ 	(Early::visit): Likewise.
+ 	(Early::finalize_simple_import): Likewise.
+ 	(Early::finalize_rebind_import): Likewise.
+ 	* resolve/rust-early-name-resolver-2.0.h: Declare the new API.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* rust-session-manager.cc (Session::compile_crate): Call nr_ctx.flatten()
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* Make-lang.in: Rename.
+ 	* backend/rust-compile-base.cc: Use new name and API.
+ 	* backend/rust-compile-context.h: Likewise.
+ 	* backend/rust-compile-expr.cc (CompileExpr::visit): Likewise.
+ 	(CompileExpr::generate_closure_function): Likewise.
+ 	* backend/rust-compile-implitem.cc (CompileTraitItem::visit): Likewise.
+ 	* backend/rust-compile-item.cc (CompileItem::visit): Likewise.
+ 	* backend/rust-compile-resolve-path.cc (ResolvePathRef::resolve): Likewise.
+ 	* checks/errors/borrowck/rust-bir-builder-internal.h (struct BuilderContext): Likewise.
+ 	* checks/errors/privacy/rust-privacy-check.cc (Resolver::resolve): Likewise.
+ 	* checks/errors/privacy/rust-privacy-reporter.cc: Likewise.
+ 	* checks/errors/privacy/rust-privacy-reporter.h: Likewise.
+ 	* checks/errors/privacy/rust-visibility-resolver.cc: Likewise.
+ 	* checks/errors/privacy/rust-visibility-resolver.h: Likewise.
+ 	* checks/errors/rust-const-checker.cc (ConstChecker::visit): Likewise.
+ 	* checks/errors/rust-hir-pattern-analysis.cc (PatternChecker::PatternChecker): Likewise.
+ 	* checks/errors/rust-hir-pattern-analysis.h: Likewise.
+ 	* checks/errors/rust-readonly-check.cc (ReadonlyChecker::visit): Likewise.
+ 	* checks/errors/rust-unsafe-checker.cc (UnsafeChecker::visit): Likewise.
+ 	* checks/lints/rust-lint-marklive.cc (MarkLive::visit_path_segment): Likewise.
+ 	(MarkLive::visit): Likewise.
+ 	(MarkLive::find_ref_node_id): Likewise.
+ 	* checks/lints/unused/rust-unused-checker.cc (UnusedChecker::UnusedChecker): Likewise.
+ 	* checks/lints/unused/rust-unused-checker.h: Likewise.
+ 	* checks/lints/unused/rust-unused-collector.cc (UnusedCollector::UnusedCollector): Likewise.
+ 	* checks/lints/unused/rust-unused-collector.h: Likewise.
+ 	* resolve/rust-immutable-name-resolution-context.cc: Move to...
+ 	* resolve/rust-finalized-name-resolution-context.cc: ...here.
+ 	* resolve/rust-name-resolution-context.h: Likewise.
+ 	* rust-session-manager.cc (Session::compile_crate): Likewise.
+ 	* typecheck/rust-hir-trait-resolve.cc (TraitResolver::resolve_path_to_trait): Likewise.
+ 	* typecheck/rust-hir-type-check-enumitem.cc (TypeCheckEnumItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit): Likewise.
+ 	(TypeCheckExpr::resolve_fn_trait_call): Likewise.
+ 	* typecheck/rust-hir-type-check-implitem.cc (TypeCheckImplItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-item.cc (TypeCheckItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::visit): Likewise.
+ 	(TypeCheckExpr::resolve_root_path): Likewise.
+ 	(TypeCheckExpr::resolve_segments): Likewise.
+ 	* typecheck/rust-hir-type-check-pattern.cc (TypeCheckPattern::visit): Likewise.
+ 	* typecheck/rust-hir-type-check-type.cc (TypeCheckType::resolve_root_path): Likewise.
+ 	(ResolveWhereClauseItem::visit): Likewise.
+ 	* typecheck/rust-hir-type-check.cc (TraitItemReference::get_type_from_fn): Likewise.
+ 	* typecheck/rust-type-util.cc (query_type): Likewise.
+ 	* checks/errors/rust-const-checker.h: Likewise.
+ 	* checks/errors/rust-unsafe-checker.h: Likewise.
+ 	* checks/lints/rust-lint-marklive.h: Likewise.
+ 	* resolve/rust-immutable-name-resolution-context.h: Removed.
+ 	* resolve/rust-finalized-name-resolution-context.h: New file.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.cc (Early::finalize_rebind_import): Insert imports
+ 	as possible glob containers.
+ 	* resolve/rust-name-resolution-context.cc (NameResolutionContext::map_usage): Allow
+ 	multiple mappings of the same usage.
+ 	* resolve/rust-name-resolution-context.hxx: Properly handle imports and modules in segments.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-forever-stack.h: Move resolve_segments and resolve_final_segment to...
+ 	* resolve/rust-forever-stack.hxx: Likewise.
+ 	* resolve/rust-name-resolution-context.h: ...here.
+ 	* resolve/rust-name-resolution-context.hxx: Likewise.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* resolve/rust-early-name-resolver-2.0.cc: Properly resolve and insert imports in the
+ 	types NS.
+ 	* resolve/rust-name-resolution-context.cc (find_leaf_definition_inner): New.
+ 	(NameResolutionContext::find_leaf_definition): New.
+ 	(NameResolutionContext::flatten): New.
+ 	* resolve/rust-name-resolution-context.h: Declare flattening functions.
+ 	* rust-session-manager.cc (Session::compile_crate): Call NR flattening.
+ 
+ 2026-06-25  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* resolve/rust-default-resolver.h (DefaultResolver): Add new visited_crates
+ 	member for recursion protection.
+ 	* resolve/rust-default-resolver.cc (DefaultResolver::visit(ExternCrate)):
+ 	Make references of `self` resolve to the current crate.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* util/rust-lang-item.cc (Rust::LangItem::lang_items): Register
+ 	exchange_malloc to BiMap.
+ 	* util/rust-lang-item.h (LangItem::Kind): Add EXCHANGE_MALLOC.
+ 
+ 2026-06-25  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* resolve/rust-finalize-imports-2.0.cc (GlobbingVisitor::visit):
+ 	Add overrides for more items.
+ 	* resolve/rust-finalize-imports-2.0.h (GlobbingVisitor::visit):
+ 	Likewise.
+ 
  2026-06-01  Yap Zhi Heng  <yapzhhg@gmail.com>
  
  	* parse/rust-parse-impl.hxx(parse_expr_stmt): Return error early when
diff -Nrcpad gcc-17-20260621/gcc/rust/Make-lang.in gcc-17-20260628/gcc/rust/Make-lang.in
*** gcc-17-20260621/gcc/rust/Make-lang.in	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/Make-lang.in	Sun Jun 28 22:32:10 2026
*************** GRS_OBJS = \
*** 149,155 ****
  	rust/rust-ice-finalizer.o \
      rust/rust-late-name-resolver-2.0.o \
      rust/rust-identifier-path.o \
! 	rust/rust-immutable-name-resolution-context.o \
      rust/rust-name-resolver.o \
      rust/rust-resolve-builtins.o \
      rust/rust-forever-stack.o \
--- 149,155 ----
  	rust/rust-ice-finalizer.o \
      rust/rust-late-name-resolver-2.0.o \
      rust/rust-identifier-path.o \
! 	rust/rust-finalized-name-resolution-context.o \
      rust/rust-name-resolver.o \
      rust/rust-resolve-builtins.o \
      rust/rust-forever-stack.o \
*************** GRS_OBJS = \
*** 177,182 ****
--- 177,183 ----
      rust/rust-hir-type-check-stmt.o \
      rust/rust-hir-type-check-enumitem.o \
      rust/rust-hir-type-check-implitem.o \
+     rust/rust-hir-type-check-intrinsic.o \
      rust/rust-borrow-checker.o \
      rust/rust-borrow-checker-diagnostics.o\
      rust/rust-bir-builder-expr-stmt.o \
*************** GRS_OBJS = \
*** 225,230 ****
--- 226,232 ----
      rust/rust-compile-struct-field-expr.o \
      rust/rust-constexpr.o \
      rust/rust-compile-base.o \
+     rust/rust-compile-drop.o \
      rust/rust-tree.o \
      rust/rust-compile-context.o \
      rust/rust-export-metadata.o \
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-builtins.cc gcc-17-20260628/gcc/rust/backend/rust-builtins.cc
*** gcc-17-20260621/gcc/rust/backend/rust-builtins.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-builtins.cc	Sun Jun 28 22:32:10 2026
***************
*** 20,25 ****
--- 20,26 ----
  
  #include "target.h"
  #include "stringpool.h"
+ #include "rust-intrinsic-values.h"
  
  namespace Rust {
  namespace Compile {
*************** void
*** 285,356 ****
  BuiltinsContext::register_rust_mappings ()
  {
    rust_intrinsic_to_gcc_builtin = {
!     {"unreachable", "__builtin_unreachable"},
!     {"abort", "__builtin_abort"},
  
      // Math intrinsics
!     {"sqrtf32", "__builtin_sqrtf"},
!     {"sqrtf64", "__builtin_sqrt"},
  
!     {"sinf32", "__builtin_sinf"},
!     {"sinf64", "__builtin_sin"},
  
!     {"cosf32", "__builtin_cosf"},
!     {"cosf64", "__builtin_cos"},
  
!     {"powf32", "__builtin_powf"},
!     {"powf64", "__builtin_pow"},
  
!     {"powif32", "__builtin_powif"},
!     {"powif64", "__builtin_powi"},
  
!     {"expf32", "__builtin_expf"},
!     {"expf64", "__builtin_exp"},
  
!     {"exp2f32", "__builtin_exp2f"},
!     {"exp2f64", "__builtin_exp2"},
  
!     {"logf32", "__builtin_logf"},
!     {"logf64", "__builtin_log"},
  
!     {"log10f32", "__builtin_log10f"},
!     {"log10f64", "__builtin_log10"},
  
!     {"log2f32", "__builtin_log2f"},
!     {"log2f64", "__builtin_log2"},
  
!     {"fmaf32", "__builtin_fmaf"},
!     {"fmaf64", "__builtin_fma"},
  
!     {"fabsf32", "__builtin_fabsf"},
!     {"fabsf64", "__builtin_fabs"},
  
!     {"minnumf32", "__builtin_fminf"},
!     {"minnumf64", "__builtin_fmin"},
  
!     {"maxnumf32", "__builtin_fmaxf"},
!     {"maxnumf64", "__builtin_fmax"},
  
!     {"copysignf32", "__builtin_copysignf"},
!     {"copysignf64", "__builtin_copysign"},
  
!     {"floorf32", "__builtin_floorf"},
!     {"floorf64", "__builtin_floor"},
  
!     {"ceilf32", "__builtin_ceilf"},
!     {"ceilf64", "__builtin_ceil"},
  
!     {"truncf32", "__builtin_truncf"},
!     {"truncf64", "__builtin_trunc"},
  
!     {"rintf32", "__builtin_rintf"},
!     {"rintf64", "__builtin_rint"},
  
!     {"nearbyintf32", "__builtin_nearbyintf"},
!     {"nearbyintf64", "__builtin_nearbyint"},
  
!     {"roundf32", "__builtin_roundf"},
!     {"roundf64", "__builtin_round"},
    };
  }
  
--- 286,357 ----
  BuiltinsContext::register_rust_mappings ()
  {
    rust_intrinsic_to_gcc_builtin = {
!     {Values::Intrinsics::UNREACHABLE, "__builtin_unreachable"},
!     {Values::Intrinsics::ABORT, "__builtin_abort"},
  
      // Math intrinsics
!     {Values::Intrinsics::SQRTF32, "__builtin_sqrtf"},
!     {Values::Intrinsics::SQRTF64, "__builtin_sqrt"},
  
!     {Values::Intrinsics::SINF32, "__builtin_sinf"},
!     {Values::Intrinsics::SINF64, "__builtin_sin"},
  
!     {Values::Intrinsics::COSF32, "__builtin_cosf"},
!     {Values::Intrinsics::COSF64, "__builtin_cos"},
  
!     {Values::Intrinsics::POWF32, "__builtin_powf"},
!     {Values::Intrinsics::POWF64, "__builtin_pow"},
  
!     {Values::Intrinsics::POWIF32, "__builtin_powif"},
!     {Values::Intrinsics::POWIF64, "__builtin_powi"},
  
!     {Values::Intrinsics::EXPF32, "__builtin_expf"},
!     {Values::Intrinsics::EXPF64, "__builtin_exp"},
  
!     {Values::Intrinsics::EXP2F32, "__builtin_exp2f"},
!     {Values::Intrinsics::EXP2F64, "__builtin_exp2"},
  
!     {Values::Intrinsics::LOGF32, "__builtin_logf"},
!     {Values::Intrinsics::LOGF64, "__builtin_log"},
  
!     {Values::Intrinsics::LOG10F32, "__builtin_log10f"},
!     {Values::Intrinsics::LOG10F64, "__builtin_log10"},
  
!     {Values::Intrinsics::LOG2F32, "__builtin_log2f"},
!     {Values::Intrinsics::LOG2F64, "__builtin_log2"},
  
!     {Values::Intrinsics::FMAF32, "__builtin_fmaf"},
!     {Values::Intrinsics::FMAF64, "__builtin_fma"},
  
!     {Values::Intrinsics::FABSF32, "__builtin_fabsf"},
!     {Values::Intrinsics::FABSF64, "__builtin_fabs"},
  
!     {Values::Intrinsics::MINNUMF32, "__builtin_fminf"},
!     {Values::Intrinsics::MINNUMF64, "__builtin_fmin"},
  
!     {Values::Intrinsics::MAXNUMF32, "__builtin_fmaxf"},
!     {Values::Intrinsics::MAXNUMF64, "__builtin_fmax"},
  
!     {Values::Intrinsics::COPYSIGNF32, "__builtin_copysignf"},
!     {Values::Intrinsics::COPYSIGNF64, "__builtin_copysign"},
  
!     {Values::Intrinsics::FLOORF32, "__builtin_floorf"},
!     {Values::Intrinsics::FLOORF64, "__builtin_floor"},
  
!     {Values::Intrinsics::CEILF32, "__builtin_ceilf"},
!     {Values::Intrinsics::CEILF64, "__builtin_ceil"},
  
!     {Values::Intrinsics::TRUNCF32, "__builtin_truncf"},
!     {Values::Intrinsics::TRUNCF64, "__builtin_trunc"},
  
!     {Values::Intrinsics::RINTF32, "__builtin_rintf"},
!     {Values::Intrinsics::RINTF64, "__builtin_rint"},
  
!     {Values::Intrinsics::NEARBYINTF32, "__builtin_nearbyintf"},
!     {Values::Intrinsics::NEARBYINTF64, "__builtin_nearbyint"},
  
!     {Values::Intrinsics::ROUNDF32, "__builtin_roundf"},
!     {Values::Intrinsics::ROUNDF64, "__builtin_round"},
    };
  }
  
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-base.cc gcc-17-20260628/gcc/rust/backend/rust-compile-base.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-base.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-base.cc	Sun Jun 28 22:32:10 2026
***************
*** 20,25 ****
--- 20,26 ----
  #include "rust-abi.h"
  #include "rust-compile-stmt.h"
  #include "rust-compile-expr.h"
+ #include "rust-compile-drop.h"
  #include "rust-compile-fnparam.h"
  #include "rust-compile-var-decl.h"
  #include "rust-compile-type.h"
***************
*** 33,39 ****
  #include "rust-compile-implitem.h"
  #include "rust-attribute-values.h"
  #include "rust-attributes.h"
! #include "rust-immutable-name-resolution-context.h"
  
  #include "fold-const.h"
  #include "stringpool.h"
--- 34,40 ----
  #include "rust-compile-implitem.h"
  #include "rust-attribute-values.h"
  #include "rust-attributes.h"
! #include "rust-finalized-name-resolution-context.h"
  
  #include "fold-const.h"
  #include "stringpool.h"
*************** bool inline should_mangle_item (const tr
*** 51,57 ****
  {
    return lookup_attribute (Values::Attributes::NO_MANGLE,
  			   DECL_ATTRIBUTES (fndecl))
! 	 == NULL_TREE;
  }
  
  void
--- 52,61 ----
  {
    return lookup_attribute (Values::Attributes::NO_MANGLE,
  			   DECL_ATTRIBUTES (fndecl))
! 	   == NULL_TREE
! 	 && lookup_attribute (Values::Attributes::RUSTC_STD_INTERNAL_SYMBOL,
! 			      DECL_ATTRIBUTES (fndecl))
! 	      == NULL_TREE;
  }
  
  void
*************** HIRCompileBase::setup_fndecl (tree fndec
*** 78,101 ****
    // is it inline?
    for (const auto &attr : attrs)
      {
!       bool is_inline
! 	= attr.get_path ().as_string () == Values::Attributes::INLINE;
!       bool is_must_use
! 	= attr.get_path ().as_string () == Values::Attributes::MUST_USE;
!       bool is_cold = attr.get_path ().as_string () == Values::Attributes::COLD;
!       bool is_link_section
! 	= attr.get_path ().as_string () == Values::Attributes::LINK_SECTION;
!       bool no_mangle
! 	= attr.get_path ().as_string () == Values::Attributes::NO_MANGLE;
!       bool is_deprecated
! 	= attr.get_path ().as_string () == Values::Attributes::DEPRECATED;
!       bool is_proc_macro
! 	= attr.get_path ().as_string () == Values::Attributes::PROC_MACRO;
        bool is_proc_macro_attribute
! 	= attr.get_path ().as_string ()
! 	  == Values::Attributes::PROC_MACRO_ATTRIBUTE;
!       bool is_proc_macro_derive = attr.get_path ().as_string ()
! 				  == Values::Attributes::PROC_MACRO_DERIVE;
  
        if (is_inline)
  	{
--- 82,105 ----
    // is it inline?
    for (const auto &attr : attrs)
      {
!       std::string attr_str = attr.get_path ().as_string ();
! 
!       bool is_inline = attr_str == Values::Attributes::INLINE;
!       bool is_must_use = attr_str == Values::Attributes::MUST_USE;
!       bool is_cold = attr_str == Values::Attributes::COLD;
!       bool is_link_section = attr_str == Values::Attributes::LINK_SECTION;
!       bool no_mangle = attr_str == Values::Attributes::NO_MANGLE;
!       bool is_std_internal
! 	= attr_str == Values::Attributes::RUSTC_STD_INTERNAL_SYMBOL;
!       bool is_deprecated = attr_str == Values::Attributes::DEPRECATED;
!       bool is_proc_macro = attr_str == Values::Attributes::PROC_MACRO;
        bool is_proc_macro_attribute
! 	= attr_str == Values::Attributes::PROC_MACRO_ATTRIBUTE;
!       bool is_proc_macro_derive
! 	= attr_str == Values::Attributes::PROC_MACRO_DERIVE;
!       bool is_allocator = attr_str == Values::Attributes::RUSTC_ALLOCATOR;
!       bool is_allocator_nounwind
! 	= attr_str == Values::Attributes::RUSTC_ALLOCATOR_NOUNWIND;
  
        if (is_inline)
  	{
*************** HIRCompileBase::setup_fndecl (tree fndec
*** 121,126 ****
--- 125,134 ----
  	{
  	  handle_no_mangle_attribute_on_fndecl (fndecl, attr);
  	}
+       else if (is_std_internal)
+ 	{
+ 	  handle_rustc_std_internal_symbol_attribute_on_fndecl (fndecl, attr);
+ 	}
        else if (is_proc_macro)
  	{
  	  handle_bang_proc_macro_attribute_on_fndecl (fndecl, attr);
*************** HIRCompileBase::setup_fndecl (tree fndec
*** 133,138 ****
--- 141,154 ----
  	{
  	  handle_derive_proc_macro_attribute_on_fndecl (fndecl, attr);
  	}
+       else if (is_allocator)
+ 	{
+ 	  handle_rustc_allocator_on_fndecl (fndecl, attr);
+ 	}
+       else if (is_allocator_nounwind)
+ 	{
+ 	  handle_rustc_allocator_nounwind_on_fndecl (fndecl, attr);
+ 	}
      }
  }
  
*************** HIRCompileBase::handle_no_mangle_attribu
*** 286,291 ****
--- 302,365 ----
  }
  
  void
+ HIRCompileBase::handle_rustc_std_internal_symbol_attribute_on_fndecl (
+   tree fndecl, const AST::Attribute &attr)
+ {
+   DECL_ATTRIBUTES (fndecl)
+     = tree_cons (get_identifier (Values::Attributes::RUSTC_STD_INTERNAL_SYMBOL),
+ 		 NULL_TREE, DECL_ATTRIBUTES (fndecl));
+ }
+ 
+ void
+ HIRCompileBase::handle_rustc_allocator_on_fndecl (tree fndecl,
+ 						  const AST::Attribute &attr)
+ {
+   tree return_type = TREE_TYPE (TREE_TYPE (fndecl));
+   if (!POINTER_TYPE_P (return_type))
+     {
+       rust_error_at (attr.get_locus (),
+ 		     "%<rustc_allocator%> attribute must be applied to a "
+ 		     "function returning a pointer");
+       return;
+     }
+ 
+   // https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/compiler/rustc_middle/src/middle/codegen_fn_attrs.rs#L49
+   // `#[rustc_allocator]`: a hint to LLVM that the pointer returned from this
+   // function is never null.
+   //
+   // https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/compiler/rustc_typeck/src/collect.rs#L2482
+   // This attribute sets CodegenFnAttrFlags::ALLOCATOR.
+   //
+   // https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/compiler/rustc_codegen_llvm/src/attributes.rs#L302
+   // This flag activates LLVM::NoAlias attribute.
+   //
+   // In GCC, setting DECL_IS_MALLOC on a FUNCTION_DECL means this function
+   // should be treated as if it were a malloc, meaning it returns a pointer that
+   // is not an alias.
+   DECL_IS_MALLOC (fndecl) = 1;
+   DECL_ATTRIBUTES (fndecl) = tree_cons (get_identifier ("malloc"), NULL_TREE,
+ 					DECL_ATTRIBUTES (fndecl));
+ }
+ 
+ void
+ HIRCompileBase::handle_rustc_allocator_nounwind_on_fndecl (
+   tree fndecl, const AST::Attribute &attr)
+ {
+   // https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/compiler/rustc_middle/src/middle/codegen_fn_attrs.rs#L55
+   // `#[rustc_allocator_nounwind]`: an indicator that an imported FFI
+   // function will never unwind.
+   //
+   // https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/compiler/rustc_typeck/src/collect.rs#L2484
+   // This attribute sets CodegenFnAttrFlags::NOUNWIND.
+   //
+   // In GCC, setting TREE_NOTHROW on a FUNCTION_DECL means a call to the
+   // function cannot throw an exception, which exactly matches this behavior.
+   TREE_NOTHROW (fndecl) = 1;
+   DECL_ATTRIBUTES (fndecl) = tree_cons (get_identifier ("nothrow"), NULL_TREE,
+ 					DECL_ATTRIBUTES (fndecl));
+ }
+ 
+ void
  HIRCompileBase::handle_deprecated_attribute_on_fndecl (
    tree fndecl, const AST::Attribute &attr)
  {
*************** HIRCompileBase::compile_function_body (t
*** 634,639 ****
--- 708,715 ----
  	  return_value = coercion_site (id, return_value, actual, expected,
  					lvalue_locus, rvalue_locus);
  
+ 	  CompileDrop::emit_current_scope_drop_calls (ctx);
+ 
  	  tree return_stmt
  	    = Backend::return_statement (fndecl, return_value, locus);
  	  ctx->add_statement (return_stmt);
*************** HIRCompileBase::compile_function_body (t
*** 656,661 ****
--- 732,738 ----
        // errors should have occurred
        location_t locus = function_body.get_locus ();
        tree return_value = unit_expression (locus);
+       CompileDrop::emit_current_scope_drop_calls (ctx);
        tree return_stmt
  	= Backend::return_statement (fndecl, return_value, locus);
        ctx->add_statement (return_stmt);
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-base.h gcc-17-20260628/gcc/rust/backend/rust-compile-base.h
*** gcc-17-20260621/gcc/rust/backend/rust-compile-base.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-base.h	Sun Jun 28 22:32:10 2026
*************** protected:
*** 152,157 ****
--- 152,167 ----
    static void handle_no_mangle_attribute_on_fndecl (tree fndecl,
  						    const AST::Attribute &attr);
  
+   static void handle_rustc_std_internal_symbol_attribute_on_fndecl (
+     tree fndecl, const AST::Attribute &attr);
+ 
+   static void handle_rustc_allocator_on_fndecl (tree fndecl,
+ 						const AST::Attribute &attr);
+ 
+   static void
+   handle_rustc_allocator_nounwind_on_fndecl (tree fndecl,
+ 					     const AST::Attribute &attr);
+ 
    static void setup_abi_options (tree fndecl, ABI abi);
  
    static tree indirect_expression (tree expr, location_t locus);
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-block.cc gcc-17-20260628/gcc/rust/backend/rust-compile-block.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-block.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-block.cc	Sun Jun 28 22:32:10 2026
***************
*** 17,24 ****
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-block.h"
! #include "rust-compile-stmt.h"
  #include "rust-compile-expr.h"
  #include "rust-hir-expr.h"
  
  namespace Rust {
--- 17,25 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-block.h"
! #include "rust-compile-drop.h"
  #include "rust-compile-expr.h"
+ #include "rust-compile-stmt.h"
  #include "rust-hir-expr.h"
  
  namespace Rust {
*************** CompileBlock::visit (HIR::BlockExpr &exp
*** 84,89 ****
--- 85,91 ----
  					 expr.get_locus ());
        ctx->add_statement (assignment);
      }
+   CompileDrop::emit_current_scope_drop_calls (ctx);
  
    ctx->pop_block ();
    translated = new_block;
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-context.h gcc-17-20260628/gcc/rust/backend/rust-compile-context.h
*** gcc-17-20260621/gcc/rust/backend/rust-compile-context.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-context.h	Sun Jun 28 22:32:10 2026
***************
*** 20,25 ****
--- 20,26 ----
  #define RUST_COMPILE_CONTEXT
  
  #include "rust-system.h"
+ #include "rust-compile-drop-candidate.h"
  #include "rust-hir-map.h"
  #include "rust-name-resolver.h"
  #include "rust-hir-type-check.h"
***************
*** 27,33 ****
  #include "rust-hir-full.h"
  #include "rust-mangle.h"
  #include "rust-tree.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Compile {
--- 28,34 ----
  #include "rust-hir-full.h"
  #include "rust-mangle.h"
  #include "rust-tree.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Compile {
*************** public:
*** 101,106 ****
--- 102,108 ----
    {
      scope_stack.push_back (scope);
      statements.push_back ({});
+     block_drop_candidates.emplace_back ();
    }
  
    tree pop_block ()
*************** public:
*** 111,116 ****
--- 113,121 ----
      auto stmts = statements.back ();
      statements.pop_back ();
  
+     rust_assert (!block_drop_candidates.empty ());
+     block_drop_candidates.pop_back ();
+ 
      Backend::block_add_statements (block, stmts);
  
      return block;
*************** public:
*** 131,136 ****
--- 136,153 ----
  
    void add_statement (tree stmt) { statements.back ().push_back (stmt); }
  
+   std::vector<DropCandidate> &peek_block_drop_candidates ()
+   {
+     rust_assert (!block_drop_candidates.empty ());
+     return block_drop_candidates.back ();
+   }
+ 
+   void note_simple_drop_candidate (HirId hirid, location_t locus)
+   {
+     rust_assert (!block_drop_candidates.empty ());
+     block_drop_candidates.back ().emplace_back (hirid, locus);
+   }
+ 
    void insert_var_decl (HirId id, ::Bvariable *decl)
    {
      compiled_var_decls[id] = decl;
*************** private:
*** 419,424 ****
--- 436,442 ----
    std::map<HirId, tree> compiled_labels;
    std::vector<::std::vector<tree>> statements;
    std::vector<tree> scope_stack;
+   std::vector<::std::vector<DropCandidate>> block_drop_candidates;
    std::vector<::Bvariable *> loop_value_stack;
    std::vector<tree> loop_begin_labels;
    std::map<DefId, std::vector<std::pair<const TyTy::BaseType *, tree>>>
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-drop-candidate.h gcc-17-20260628/gcc/rust/backend/rust-compile-drop-candidate.h
*** gcc-17-20260621/gcc/rust/backend/rust-compile-drop-candidate.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/backend/rust-compile-drop-candidate.h	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,40 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef RUST_COMPILE_DROP_CANDIDATE_H
+ #define RUST_COMPILE_DROP_CANDIDATE_H
+ 
+ #include "rust-system.h"
+ #include "rust-hir-map.h"
+ 
+ namespace Rust {
+ namespace Compile {
+ 
+ struct DropCandidate
+ {
+   DropCandidate (HirId hirid, location_t locus) : hirid (hirid), locus (locus)
+   {}
+ 
+   HirId hirid;
+   location_t locus;
+ };
+ 
+ } // namespace Compile
+ } // namespace Rust
+ 
+ #endif // RUST_COMPILE_DROP_CANDIDATE_H
\ No newline at end of file
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-drop.cc gcc-17-20260628/gcc/rust/backend/rust-compile-drop.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-drop.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/backend/rust-compile-drop.cc	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,113 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #include "rust-compile-drop.h"
+ #include "rust-compile-base.h"
+ #include "rust-compile-context.h"
+ #include "rust-compile-implitem.h"
+ #include "rust-hir-path-probe.h"
+ #include "rust-hir-trait-reference.h"
+ #include "rust-hir-type-bounds.h"
+ #include "rust-lang-item.h"
+ #include "rust-tyty.h"
+ 
+ namespace Rust {
+ namespace Compile {
+ 
+ bool
+ CompileDrop::type_has_drop_impl (Context *ctx, TyTy::BaseType *ty)
+ {
+   auto drop_lang_item
+     = ctx->get_mappings ().lookup_lang_item (LangItem::Kind::DROP);
+ 
+   if (!drop_lang_item.has_value ())
+     return false;
+ 
+   DefId drop_id = drop_lang_item.value ();
+ 
+   auto candidates = Resolver::TypeBoundsProbe::Probe (ty);
+   for (auto &candidate : candidates)
+     {
+       Resolver::TraitReference *trait_ref = candidate.first;
+       if (trait_ref != nullptr && trait_ref->get_defid () == drop_id)
+ 	return true;
+     }
+ 
+   return false;
+ }
+ 
+ // Find the Drop trait, look for the drop method, and build the function call.
+ tree
+ CompileDrop::compile_drop_call (Context *ctx, Bvariable *var,
+ 				TyTy::BaseType *ty, location_t locus)
+ {
+   auto drop_lang = ctx->get_mappings ().lookup_lang_item (LangItem::Kind::DROP);
+   if (!drop_lang.has_value ())
+     return NULL_TREE;
+ 
+   Resolver::TraitReference *drop_ref = nullptr;
+   bool ok
+     = ctx->get_tyctx ()->lookup_trait_reference (drop_lang.value (), &drop_ref);
+   if (!ok)
+     return NULL_TREE;
+ 
+   HIR::PathIdentSegment segment ("drop");
+   auto candidates
+     = Resolver::PathProbeImplTrait::Probe (ty->get_root (), segment, drop_ref);
+ 
+   rust_assert (candidates.size () == 1);
+ 
+   auto &candidate = *candidates.begin ();
+   rust_assert (candidate.is_impl_candidate ());
+   rust_assert (candidate.ty->get_kind () == TyTy::TypeKind::FNDEF);
+ 
+   auto *fn_type = static_cast<TyTy::FnType *> (candidate.ty);
+   tree fn_addr
+     = CompileInherentImplItem::Compile (candidate.item.impl.impl_item, ctx,
+ 					fn_type, locus);
+ 
+   tree var_expr = Backend::var_expression (var, locus);
+   tree var_addr = HIRCompileBase::address_expression (var_expr, locus);
+ 
+   return Backend::call_expression (fn_addr, {var_addr}, nullptr, locus);
+ }
+ 
+ void
+ CompileDrop::emit_current_scope_drop_calls (Context *ctx)
+ {
+   auto &drop_candidates = ctx->peek_block_drop_candidates ();
+ 
+   for (auto it = drop_candidates.rbegin (); it != drop_candidates.rend (); ++it)
+     {
+       TyTy::BaseType *ty = nullptr;
+       Bvariable *var = nullptr;
+ 
+       bool ok = ctx->get_tyctx ()->lookup_type (it->hirid, &ty);
+       rust_assert (ok);
+ 
+       ok = ctx->lookup_var_decl (it->hirid, &var);
+       rust_assert (ok);
+ 
+       tree drop_call = CompileDrop::compile_drop_call (ctx, var, ty, it->locus);
+       if (drop_call != NULL_TREE)
+ 	ctx->add_statement (convert_to_void (drop_call, ICV_STATEMENT));
+     }
+ }
+ 
+ } // namespace Compile
+ } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-drop.h gcc-17-20260628/gcc/rust/backend/rust-compile-drop.h
*** gcc-17-20260621/gcc/rust/backend/rust-compile-drop.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/backend/rust-compile-drop.h	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,41 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef RUST_COMPILE_DROP_H
+ #define RUST_COMPILE_DROP_H
+ 
+ #include "rust-compile-context.h"
+ 
+ namespace Rust {
+ namespace Compile {
+ 
+ class CompileDrop
+ {
+ public:
+   static bool type_has_drop_impl (Context *ctx, TyTy::BaseType *ty);
+ 
+   static tree compile_drop_call (Context *ctx, Bvariable *var,
+ 				 TyTy::BaseType *ty, location_t locus);
+ 
+   static void emit_current_scope_drop_calls (Context *ctx);
+ };
+ 
+ } // namespace Compile
+ } // namespace Rust
+ 
+ #endif // RUST_COMPILE_DROP_H
\ No newline at end of file
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-expr.cc gcc-17-20260628/gcc/rust/backend/rust-compile-expr.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-expr.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-expr.cc	Sun Jun 28 22:32:10 2026
***************
*** 27,32 ****
--- 27,33 ----
  #include "rust-compile-implitem.h"
  #include "rust-constexpr.h"
  #include "rust-compile-type.h"
+ #include "rust-finalized-name-resolution-context.h"
  #include "rust-gcc.h"
  #include "rust-compile-asm.h"
  #include "fold-const.h"
***************
*** 35,40 ****
--- 36,42 ----
  #include "print-tree.h"
  #include "rust-hir-bound.h"
  #include "rust-hir-expr.h"
+ #include "rust-rib.h"
  #include "rust-system.h"
  #include "rust-tree.h"
  #include "rust-tyty.h"
*************** CompileExpr::visit (HIR::BreakExpr &expr
*** 865,871 ****
    if (expr.has_break_expr () && expr.has_label ())
      {
        HIR::Lifetime &label = expr.get_label ();
!       auto tvar = lookup_temp_var (label.get_mappings ().get_nodeid ());
        tree value = CompileExpr::Compile (expr.get_expr (), ctx);
        tree assign
  	= Backend::assignment_statement (tvar->get_tree (label.get_locus ()),
--- 867,873 ----
    if (expr.has_break_expr () && expr.has_label ())
      {
        HIR::Lifetime &label = expr.get_label ();
!       auto tvar = lookup_label_temp_var (label.get_mappings ().get_nodeid ());
        tree value = CompileExpr::Compile (expr.get_expr (), ctx);
        tree assign
  	= Backend::assignment_statement (tvar->get_tree (label.get_locus ()),
*************** CompileExpr::visit (HIR::BreakExpr &expr
*** 897,908 ****
  
    if (expr.has_label ())
      {
!       auto &nr_ctx
! 	= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
        NodeId resolved_node_id;
        if (auto id
! 	  = nr_ctx.lookup (expr.get_label ().get_mappings ().get_nodeid ()))
  	{
  	  resolved_node_id = *id;
  	}
--- 899,910 ----
  
    if (expr.has_label ())
      {
!       auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
        NodeId resolved_node_id;
        if (auto id
! 	  = nr_ctx.lookup (expr.get_label ().get_mappings ().get_nodeid (),
! 			   Resolver2_0::Namespace::Labels))
  	{
  	  resolved_node_id = *id;
  	}
*************** CompileExpr::visit (HIR::ContinueExpr &e
*** 953,964 ****
    tree label = ctx->peek_loop_begin_label ();
    if (expr.has_label ())
      {
!       auto &nr_ctx
! 	= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
        NodeId resolved_node_id;
        if (auto id
! 	  = nr_ctx.lookup (expr.get_label ().get_mappings ().get_nodeid ()))
  	{
  	  resolved_node_id = *id;
  	}
--- 955,966 ----
    tree label = ctx->peek_loop_begin_label ();
    if (expr.has_label ())
      {
!       auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
        NodeId resolved_node_id;
        if (auto id
! 	  = nr_ctx.lookup (expr.get_label ().get_mappings ().get_nodeid (),
! 			   Resolver2_0::Namespace::Labels))
  	{
  	  resolved_node_id = *id;
  	}
*************** CompileExpr::generate_closure_function (
*** 2605,2614 ****
    if (is_block_expr)
      {
        auto body_mappings = function_body.get_mappings ();
!       auto &nr_ctx
! 	= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
!       auto candidate = nr_ctx.values.to_rib (body_mappings.get_nodeid ());
  
        rust_assert (candidate.has_value ());
      }
--- 2607,2616 ----
    if (is_block_expr)
      {
        auto body_mappings = function_body.get_mappings ();
!       auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
!       auto candidate
! 	= nr_ctx.get_underlying ().values.to_rib (body_mappings.get_nodeid ());
  
        rust_assert (candidate.has_value ());
      }
*************** CompileExpr::construct_block_label (HIR:
*** 2801,2807 ****
  tree
  CompileExpr::lookup_label (NodeId to_be_resolved)
  {
!   HirId ref = resolve_NodeId (to_be_resolved);
    tree label = NULL_TREE;
    rust_assert (ctx->lookup_label_decl (ref, &label)
  	       && "failed to lookup a label");
--- 2803,2809 ----
  tree
  CompileExpr::lookup_label (NodeId to_be_resolved)
  {
!   HirId ref = resolve_nodeid (to_be_resolved, Resolver2_0::Namespace::Labels);
    tree label = NULL_TREE;
    rust_assert (ctx->lookup_label_decl (ref, &label)
  	       && "failed to lookup a label");
*************** CompileExpr::lookup_label (NodeId to_be_
*** 2809,2817 ****
  }
  
  Bvariable *
! CompileExpr::lookup_temp_var (NodeId to_be_resolved)
  {
!   HirId ref = resolve_NodeId (to_be_resolved);
    Bvariable *ltemp = nullptr;
    rust_assert (ctx->lookup_var_decl (ref, &ltemp)
  	       && "failed to lookup a temp var");
--- 2811,2821 ----
  }
  
  Bvariable *
! CompileExpr::lookup_label_temp_var (NodeId to_be_resolved)
  {
!   // TODO: Not sure that this temp var should have been inserted in the Labels
!   // namespace? Why not values?
!   HirId ref = resolve_nodeid (to_be_resolved, Resolver2_0::Namespace::Labels);
    Bvariable *ltemp = nullptr;
    rust_assert (ctx->lookup_var_decl (ref, &ltemp)
  	       && "failed to lookup a temp var");
*************** CompileExpr::lookup_temp_var (NodeId to_
*** 2819,2831 ****
  }
  
  HirId
! CompileExpr::resolve_NodeId (NodeId to_be_resolved)
  {
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    NodeId resolved_node_id;
!   resolved_node_id = nr_ctx.lookup (to_be_resolved).value ();
  
    HirId ref
      = ctx->get_mappings ().lookup_node_to_hir (resolved_node_id).value ();
--- 2823,2834 ----
  }
  
  HirId
! CompileExpr::resolve_nodeid (NodeId to_be_resolved, Resolver2_0::Namespace ns)
  {
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    NodeId resolved_node_id;
!   resolved_node_id = nr_ctx.lookup (to_be_resolved, ns).value ();
  
    HirId ref
      = ctx->get_mappings ().lookup_node_to_hir (resolved_node_id).value ();
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-expr.h gcc-17-20260628/gcc/rust/backend/rust-compile-expr.h
*** gcc-17-20260621/gcc/rust/backend/rust-compile-expr.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-expr.h	Sun Jun 28 22:32:10 2026
***************
*** 23,28 ****
--- 23,29 ----
  #include "rust-gcc.h"
  #include "rust-hir-expr.h"
  #include "rust-hir-visitor.h"
+ #include "rust-rib.h"
  
  namespace Rust {
  namespace Compile {
*************** protected:
*** 155,162 ****
  
    tree construct_block_label (HIR::BlockExpr &expr);
    tree lookup_label (NodeId to_be_resolved);
!   Bvariable *lookup_temp_var (NodeId to_be_resolved);
!   HirId resolve_NodeId (NodeId to_be_resolved);
  
  private:
    CompileExpr (Context *ctx);
--- 156,163 ----
  
    tree construct_block_label (HIR::BlockExpr &expr);
    tree lookup_label (NodeId to_be_resolved);
!   Bvariable *lookup_label_temp_var (NodeId to_be_resolved);
!   HirId resolve_nodeid (NodeId to_be_resolved, Resolver2_0::Namespace ns);
  
  private:
    CompileExpr (Context *ctx);
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-implitem.cc gcc-17-20260628/gcc/rust/backend/rust-compile-implitem.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-implitem.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-implitem.cc	Sun Jun 28 22:32:10 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-implitem.h"
+ #include "rust-rib.h"
  
  namespace Rust {
  namespace Compile {
*************** CompileTraitItem::visit (HIR::TraitItemC
*** 27,37 ****
    rust_assert (concrete != nullptr);
    TyTy::BaseType *resolved_type = concrete;
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (constant.get_mappings ().get_nodeid ());
  
    HIR::Expr &const_value_expr = constant.get_expr ();
    TyTy::BaseType *expr_type = nullptr;
--- 28,38 ----
    rust_assert (concrete != nullptr);
    TyTy::BaseType *resolved_type = concrete;
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (constant.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Values);
  
    HIR::Expr &const_value_expr = constant.get_expr ();
    TyTy::BaseType *expr_type = nullptr;
*************** CompileTraitItem::visit (HIR::TraitItemF
*** 89,99 ****
        fntype->override_context ();
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (func.get_mappings ().get_nodeid ());
  
    // FIXME: How do we get the proper visibility here?
    auto vis = HIR::Visibility (HIR::Visibility::VisType::Public);
--- 90,100 ----
        fntype->override_context ();
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (func.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Values);
  
    // FIXME: How do we get the proper visibility here?
    auto vis = HIR::Visibility (HIR::Visibility::VisType::Public);
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-intrinsic.cc gcc-17-20260628/gcc/rust/backend/rust-compile-intrinsic.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-intrinsic.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-intrinsic.cc	Sun Jun 28 22:32:10 2026
*************** using IValue = Values::Intrinsics;
*** 30,35 ****
--- 30,36 ----
  static const std::map<std::string, handlers::HandlerBuilder> generic_intrinsics
    = {{IValue::OFFSET, handlers::offset},
       {IValue::SIZE_OF, handlers::sizeof_handler},
+      {IValue::MIN_ALIGN_OF, handlers::min_align_of_handler},
       {IValue::TRANSMUTE, handlers::transmute},
       {IValue::ROTATE_LEFT, handlers::rotate_left},
       {IValue::ROTATE_RIGHT, handlers::rotate_right},
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-item.cc gcc-17-20260628/gcc/rust/backend/rust-compile-item.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-item.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-item.cc	Sun Jun 28 22:32:10 2026
***************
*** 19,27 ****
  #include "rust-compile-item.h"
  #include "rust-compile-implitem.h"
  #include "rust-compile-extern.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Compile {
--- 19,28 ----
  #include "rust-compile-item.h"
  #include "rust-compile-implitem.h"
  #include "rust-compile-extern.h"
+ #include "rust-rib.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Compile {
*************** CompileItem::visit (HIR::StaticItem &var
*** 50,60 ****
  
    tree type = TyTyResolveCompile::compile (ctx, resolved_type);
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (var.get_mappings ().get_nodeid ());
  
    ctx->push_const_context ();
    tree value
--- 51,61 ----
  
    tree type = TyTyResolveCompile::compile (ctx, resolved_type);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (var.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Values);
  
    ctx->push_const_context ();
    tree value
*************** CompileItem::visit (HIR::ConstantItem &c
*** 103,114 ****
      const_value_expr.get_mappings ().get_hirid (), &expr_type);
    rust_assert (ok);
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    // canonical path
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (mappings.get_nodeid ());
    if (constant_type->is<const TyTy::FnType> ())
      {
        if (concrete == nullptr)
--- 104,115 ----
      const_value_expr.get_mappings ().get_hirid (), &expr_type);
    rust_assert (ok);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    // canonical path
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (mappings.get_nodeid (),
! 				Resolver2_0::Namespace::Values);
    if (constant_type->is<const TyTy::FnType> ())
      {
        if (concrete == nullptr)
*************** CompileItem::visit (HIR::Function &funct
*** 200,210 ****
  	}
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid ());
  
    const std::string asm_name = ctx->mangle_item (fntype, canonical_path);
  
--- 201,211 ----
  	}
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    Resolver::CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Values);
  
    const std::string asm_name = ctx->mangle_item (fntype, canonical_path);
  
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-pattern.cc gcc-17-20260628/gcc/rust/backend/rust-compile-pattern.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-pattern.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-pattern.cc	Sun Jun 28 22:32:10 2026
***************
*** 17,30 ****
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-pattern.h"
  #include "rust-compile-expr.h"
  #include "rust-compile-resolve-path.h"
- #include "rust-constexpr.h"
  #include "rust-compile-type.h"
! #include "print-tree.h"
  #include "rust-diagnostics.h"
  #include "rust-hir-pattern-abstract.h"
  #include "rust-hir-pattern.h"
  #include "rust-system.h"
  #include "rust-tyty.h"
  #include "tree.h"
--- 17,34 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-compile-pattern.h"
+ #include "print-tree.h"
+ #include "rust-compile-drop.h"
  #include "rust-compile-expr.h"
  #include "rust-compile-resolve-path.h"
  #include "rust-compile-type.h"
! #include "rust-constexpr.h"
  #include "rust-diagnostics.h"
  #include "rust-hir-pattern-abstract.h"
  #include "rust-hir-pattern.h"
+ #include "rust-hir-trait-reference.h"
+ #include "rust-hir-type-bounds.h"
+ #include "rust-lang-item.h"
  #include "rust-system.h"
  #include "rust-tyty.h"
  #include "tree.h"
*************** CompilePatternLet::visit (HIR::Identifie
*** 1343,1348 ****
--- 1347,1370 ----
        auto s = Backend::init_statement (fnctx.fndecl, var, init_expr);
        ctx->add_statement (s);
      }
+ 
+   TyTy::BaseType *drop_ty = ty;
+   if (pattern.get_is_ref ())
+     {
+       auto ref_ty = ty->try_as<TyTy::ReferenceType> ();
+       rust_assert (ref_ty != nullptr);
+       drop_ty = ref_ty->get_base ();
+     }
+ 
+   if (!CompileDrop::type_has_drop_impl (ctx, drop_ty))
+     return;
+ 
+   if (!pattern.has_subpattern () && !pattern.get_is_ref ())
+     ctx->note_simple_drop_candidate (pattern.get_mappings ().get_hirid (),
+ 				     pattern.get_locus ());
+   else
+     rust_sorry_at (pattern.get_locus (),
+ 		   "drop trait not supported for subpatterns and ref patterns");
  }
  
  void
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-compile-resolve-path.cc gcc-17-20260628/gcc/rust/backend/rust-compile-resolve-path.cc
*** gcc-17-20260621/gcc/rust/backend/rust-compile-resolve-path.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-compile-resolve-path.cc	Sun Jun 28 22:32:10 2026
***************
*** 27,32 ****
--- 27,33 ----
  #include "rust-hir-path-probe.h"
  #include "rust-compile-extern.h"
  #include "rust-constexpr.h"
+ #include "rust-rib.h"
  #include "rust-tyty.h"
  
  namespace Rust {
*************** ResolvePathRef::resolve (const HIR::Path
*** 231,240 ****
  
    // this can fail because it might be a Constructor for something
    // in that case the caller should attempt ResolvePathType::Compile
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
!   auto resolved = nr_ctx.lookup (mappings.get_nodeid ());
  
    if (!resolved)
      return attempt_constructor_expression_lookup (lookup, ctx, mappings,
--- 232,242 ----
  
    // this can fail because it might be a Constructor for something
    // in that case the caller should attempt ResolvePathType::Compile
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
!   // TODO: Is Values the correct NS here?
!   auto resolved
!     = nr_ctx.lookup (mappings.get_nodeid (), Resolver2_0::Namespace::Values);
  
    if (!resolved)
      return attempt_constructor_expression_lookup (lookup, ctx, mappings,
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-intrinsic-handlers.cc gcc-17-20260628/gcc/rust/backend/rust-intrinsic-handlers.cc
*** gcc-17-20260621/gcc/rust/backend/rust-intrinsic-handlers.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-intrinsic-handlers.cc	Sun Jun 28 22:32:10 2026
*************** sizeof_handler (Context *ctx, TyTy::FnTy
*** 1612,1617 ****
--- 1612,1656 ----
    return fndecl;
  }
  
+ /**
+  * pub fn min_align_of<T>() -> usize;
+  */
+ tree
+ min_align_of_handler (Context *ctx, TyTy::FnType *fntype)
+ {
+   // min_align_of has _zero_ parameters its parameter is the generic one
+   rust_assert (fntype->get_params ().size () == 0);
+ 
+   tree lookup = NULL_TREE;
+   if (check_for_cached_intrinsic (ctx, fntype, &lookup))
+     return lookup;
+ 
+   auto fndecl = compile_intrinsic_function (ctx, fntype);
+ 
+   // get the template parameter type tree fn min_align_of<T>();
+   rust_assert (fntype->get_num_substitutions () == 1);
+   auto &param_mapping = fntype->get_substs ().at (0);
+   const auto param_tyty = param_mapping.get_param_ty ();
+   auto resolved_tyty = param_tyty->resolve ();
+   tree template_parameter_type
+     = TyTyResolveCompile::compile (ctx, resolved_tyty);
+ 
+   enter_intrinsic_block (ctx, fndecl);
+ 
+   // BUILTIN min_align_of FN BODY BEGIN
+   tree align_expr
+     = build_int_cst (size_type_node, TYPE_ALIGN_UNIT (template_parameter_type));
+ 
+   auto return_statement
+     = Backend::return_statement (fndecl, align_expr, UNDEF_LOCATION);
+   ctx->add_statement (return_statement);
+   // BUILTIN min_align_of FN BODY END
+ 
+   finalize_intrinsic_block (ctx, fndecl);
+ 
+   return fndecl;
+ }
+ 
  tree
  offset (Context *ctx, TyTy::FnType *fntype)
  {
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-intrinsic-handlers.h gcc-17-20260628/gcc/rust/backend/rust-intrinsic-handlers.h
*** gcc-17-20260621/gcc/rust/backend/rust-intrinsic-handlers.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-intrinsic-handlers.h	Sun Jun 28 22:32:10 2026
*************** tree rotate_right (Context *ctx, TyTy::F
*** 57,62 ****
--- 57,63 ----
  const HandlerBuilder wrapping_op (tree_code op);
  tree offset (Context *ctx, TyTy::FnType *fntype);
  tree sizeof_handler (Context *ctx, TyTy::FnType *fntype);
+ tree min_align_of_handler (Context *ctx, TyTy::FnType *fntype);
  tree transmute (Context *ctx, TyTy::FnType *fntype);
  tree rotate (Context *ctx, TyTy::FnType *fntype, tree_code op);
  tree uninit (Context *ctx, TyTy::FnType *fntype);
diff -Nrcpad gcc-17-20260621/gcc/rust/backend/rust-tree.h gcc-17-20260628/gcc/rust/backend/rust-tree.h
*** gcc-17-20260621/gcc/rust/backend/rust-tree.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/backend/rust-tree.h	Sun Jun 28 22:32:10 2026
*************** struct GTY (()) saved_scope
*** 2089,2104 ****
    int x_processing_specialization;
    int x_processing_constraint;
    int suppress_location_wrappers;
!   BOOL_BITFIELD x_processing_explicit_instantiation : 1;
!   BOOL_BITFIELD need_pop_function_context : 1;
  
    /* Nonzero if we are parsing the discarded statement of a constexpr
       if-statement.  */
!   BOOL_BITFIELD discarded_stmt : 1;
    /* Nonzero if we are parsing or instantiating the compound-statement
       of consteval if statement.  Also set while processing an immediate
       invocation.  */
!   BOOL_BITFIELD consteval_if_p : 1;
  
    int unevaluated_operand;
    int inhibit_evaluation_warnings;
--- 2089,2104 ----
    int x_processing_specialization;
    int x_processing_constraint;
    int suppress_location_wrappers;
!   bool x_processing_explicit_instantiation : 1;
!   bool need_pop_function_context : 1;
  
    /* Nonzero if we are parsing the discarded statement of a constexpr
       if-statement.  */
!   bool discarded_stmt : 1;
    /* Nonzero if we are parsing or instantiating the compound-statement
       of consteval if statement.  Also set while processing an immediate
       invocation.  */
!   bool consteval_if_p : 1;
  
    int unevaluated_operand;
    int inhibit_evaluation_warnings;
*************** struct GTY (()) rust_cp_binding_level
*** 2193,2199 ****
  
    /* True if this scope is an SK_TEMPLATE_SPEC scope.  This field is
        only valid if KIND == SK_TEMPLATE_PARMS.  */
!   BOOL_BITFIELD explicit_spec_p : 1;
  
    /* true means make a BLOCK for this level regardless of all else.  */
    unsigned keep : 1;
--- 2193,2199 ----
  
    /* True if this scope is an SK_TEMPLATE_SPEC scope.  This field is
        only valid if KIND == SK_TEMPLATE_PARMS.  */
!   bool explicit_spec_p : 1;
  
    /* true means make a BLOCK for this level regardless of all else.  */
    unsigned keep : 1;
*************** struct GTY (()) language_function
*** 2292,2309 ****
    tree x_vtt_parm;
    tree x_return_value;
  
!   BOOL_BITFIELD returns_value : 1;
!   BOOL_BITFIELD returns_null : 1;
!   BOOL_BITFIELD returns_abnormally : 1;
!   BOOL_BITFIELD infinite_loop : 1;
!   BOOL_BITFIELD x_in_function_try_handler : 1;
!   BOOL_BITFIELD x_in_base_initializer : 1;
  
    /* True if this function can throw an exception.  */
!   BOOL_BITFIELD can_throw : 1;
  
!   BOOL_BITFIELD invalid_constexpr : 1;
!   BOOL_BITFIELD throwing_cleanup : 1;
  
    hash_table<rust_named_label_hash> *x_named_labels;
  
--- 2292,2309 ----
    tree x_vtt_parm;
    tree x_return_value;
  
!   bool returns_value : 1;
!   bool returns_null : 1;
!   bool returns_abnormally : 1;
!   bool infinite_loop : 1;
!   bool x_in_function_try_handler : 1;
!   bool x_in_base_initializer : 1;
  
    /* True if this function can throw an exception.  */
!   bool can_throw : 1;
  
!   bool invalid_constexpr : 1;
!   bool throwing_cleanup : 1;
  
    hash_table<rust_named_label_hash> *x_named_labels;
  
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h gcc-17-20260628/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h
*** gcc-17-20260621/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/borrowck/rust-bir-builder-internal.h	Sun Jun 28 22:32:10 2026
***************
*** 26,33 ****
  #include "rust-hir-visitor.h"
  #include "rust-bir.h"
  #include "rust-bir-free-region.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "options.h"
  
  namespace Rust {
  
--- 26,34 ----
  #include "rust-hir-visitor.h"
  #include "rust-bir.h"
  #include "rust-bir-free-region.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "options.h"
+ #include "rust-rib.h"
  
  namespace Rust {
  
*************** struct BuilderContext
*** 74,80 ****
  
    // External context.
    Resolver::TypeCheckContext &tyctx;
!   const Resolver2_0::NameResolutionContext &resolver;
  
    // BIR output
    BasicBlocks basic_blocks;
--- 75,81 ----
  
    // External context.
    Resolver::TypeCheckContext &tyctx;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
  
    // BIR output
    BasicBlocks basic_blocks;
*************** struct BuilderContext
*** 103,109 ****
  public:
    BuilderContext ()
      : tyctx (*Resolver::TypeCheckContext::get ()),
!       resolver (Resolver2_0::ImmutableNameResolutionContext::get ().resolver ())
    {
      basic_blocks.emplace_back (); // StartBB
    }
--- 104,110 ----
  public:
    BuilderContext ()
      : tyctx (*Resolver::TypeCheckContext::get ()),
!       resolver (Resolver2_0::FinalizedNameResolutionContext::get ())
    {
      basic_blocks.emplace_back (); // StartBB
    }
*************** protected: // HIR resolution helpers
*** 402,415 ****
  
    template <typename T> NodeId resolve_label (T &expr)
    {
!     auto res = ctx.resolver.lookup (expr.get_mappings ().get_nodeid ());
      rust_assert (res.has_value ());
      return res.value ();
    }
  
    template <typename T> PlaceId resolve_variable (T &variable)
    {
!     auto res = ctx.resolver.lookup (variable.get_mappings ().get_nodeid ());
      rust_assert (res.has_value ());
      return ctx.place_db.lookup_variable (res.value ());
    }
--- 403,418 ----
  
    template <typename T> NodeId resolve_label (T &expr)
    {
!     auto res = ctx.resolver.lookup (expr.get_mappings ().get_nodeid (),
! 				    Resolver2_0::Namespace::Labels);
      rust_assert (res.has_value ());
      return res.value ();
    }
  
    template <typename T> PlaceId resolve_variable (T &variable)
    {
!     auto res = ctx.resolver.lookup (variable.get_mappings ().get_nodeid (),
! 				    Resolver2_0::Namespace::Values);
      rust_assert (res.has_value ());
      return ctx.place_db.lookup_variable (res.value ());
    }
*************** protected: // HIR resolution helpers
*** 424,430 ****
      if (ty->is<TyTy::FnType> ())
        return ctx.place_db.get_constant (ty);
  
!     auto res = ctx.resolver.lookup (variable.get_mappings ().get_nodeid ());
      rust_assert (res.has_value ());
      return ctx.place_db.lookup_or_add_variable (res.value (), ty);
    }
--- 427,434 ----
      if (ty->is<TyTy::FnType> ())
        return ctx.place_db.get_constant (ty);
  
!     auto res = ctx.resolver.lookup (variable.get_mappings ().get_nodeid (),
! 				    Resolver2_0::Namespace::Values);
      rust_assert (res.has_value ());
      return ctx.place_db.lookup_or_add_variable (res.value (), ty);
    }
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-privacy-check.cc gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-privacy-check.cc
*** gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-privacy-check.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-privacy-check.cc	Sun Jun 28 22:32:10 2026
***************
*** 20,26 ****
  #include "rust-reachability.h"
  #include "rust-hir-type-check.h"
  #include "rust-hir-map.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-visibility-resolver.h"
  #include "rust-pub-restricted-visitor.h"
  #include "rust-privacy-reporter.h"
--- 20,26 ----
  #include "rust-reachability.h"
  #include "rust-hir-type-check.h"
  #include "rust-hir-map.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-visibility-resolver.h"
  #include "rust-pub-restricted-visitor.h"
  #include "rust-privacy-reporter.h"
*************** Resolver::resolve (HIR::Crate &crate)
*** 35,42 ****
  {
    PrivacyContext ctx;
    auto &mappings = Analysis::Mappings::get ();
!   auto &resolver
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
    auto ty_ctx = ::Rust::Resolver::TypeCheckContext::get ();
  
    VisibilityResolver (mappings, resolver).go (crate);
--- 35,41 ----
  {
    PrivacyContext ctx;
    auto &mappings = Analysis::Mappings::get ();
!   auto &resolver = Resolver2_0::FinalizedNameResolutionContext::get ();
    auto ty_ctx = ::Rust::Resolver::TypeCheckContext::get ();
  
    VisibilityResolver (mappings, resolver).go (crate);
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc
*** gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-privacy-reporter.cc	Sun Jun 28 22:32:10 2026
***************
*** 17,35 ****
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-privacy-reporter.h"
  #include "rust-session-manager.h"
  #include "rust-hir-expr.h"
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-attribute-values.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Privacy {
  
  PrivacyReporter::PrivacyReporter (
    Analysis::Mappings &mappings,
!   const Resolver2_0::NameResolutionContext &resolver,
    const Rust::Resolver::TypeCheckContext &ty_ctx)
    : mappings (mappings), resolver (resolver), ty_ctx (ty_ctx),
      current_module (tl::nullopt)
--- 17,37 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "rust-privacy-reporter.h"
+ #include "rust-hir-map.h"
+ #include "rust-rib.h"
  #include "rust-session-manager.h"
  #include "rust-hir-expr.h"
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-attribute-values.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Privacy {
  
  PrivacyReporter::PrivacyReporter (
    Analysis::Mappings &mappings,
!   const Resolver2_0::FinalizedNameResolutionContext &resolver,
    const Rust::Resolver::TypeCheckContext &ty_ctx)
    : mappings (mappings), resolver (resolver), ty_ctx (ty_ctx),
      current_module (tl::nullopt)
*************** PrivacyReporter::go (HIR::Crate &crate)
*** 91,110 ****
      }
  }
  
- // FIXME: This function needs a lot of refactoring
  void
! PrivacyReporter::check_for_privacy_violation (const NodeId &use_id,
! 					      const location_t locus)
  {
-   NodeId ref_node_id;
- 
-   // FIXME: Assert here. For now, we return since this causes issues when
-   // checking inferred types (#1260)
-   if (auto id = resolver.lookup (use_id))
-     ref_node_id = *id;
-   else
-     return;
- 
    auto vis = mappings.lookup_visibility (ref_node_id);
  
    // FIXME: Can we really return here if the item has no visibility?
--- 93,102 ----
      }
  }
  
  void
! PrivacyReporter::check_violation_inner (NodeId ref_node_id,
! 					const location_t locus)
  {
    auto vis = mappings.lookup_visibility (ref_node_id);
  
    // FIXME: Can we really return here if the item has no visibility?
*************** PrivacyReporter::check_for_privacy_viola
*** 136,143 ****
  	// FIXME: This needs a LOT of TLC: hinting about the definition, a
  	// string to say if it's a module, function, type, etc...
  
! 	if (!resolver.values.is_module_descendant (mod_node_id,
! 						   current_module.value ()))
  	  valid = false;
        }
        break;
--- 128,135 ----
  	// FIXME: This needs a LOT of TLC: hinting about the definition, a
  	// string to say if it's a module, function, type, etc...
  
! 	if (!resolver.get_underlying ().values.is_module_descendant (
! 	      mod_node_id, current_module.value ()))
  	  valid = false;
        }
        break;
*************** PrivacyReporter::check_for_privacy_viola
*** 156,161 ****
--- 148,188 ----
  }
  
  void
+ PrivacyReporter::check_for_privacy_violation (const NodeId &use_id,
+ 					      const location_t locus,
+ 					      Resolver2_0::Namespace ns)
+ {
+   NodeId ref_node_id;
+ 
+   // FIXME: Assert here. For now, we return since this causes issues when
+   // checking inferred types (#1260)
+   if (auto id = resolver.lookup (use_id, ns))
+     ref_node_id = *id;
+   else
+     return;
+ 
+   check_violation_inner (ref_node_id, locus);
+ }
+ 
+ void
+ PrivacyReporter::check_for_privacy_violation (const NodeId &use_id,
+ 					      const location_t locus,
+ 					      Resolver2_0::Namespace ns1,
+ 					      Resolver2_0::Namespace ns2)
+ {
+   NodeId ref_node_id;
+ 
+   // FIXME: Assert here. For now, we return since this causes issues when
+   // checking inferred types (#1260)
+   if (auto resolved = resolver.lookup (use_id, ns1, ns2))
+     ref_node_id = resolved->id;
+   else
+     return;
+ 
+   check_violation_inner (ref_node_id, locus);
+ }
+ 
+ void
  PrivacyReporter::check_base_type_privacy (Analysis::NodeMapping &node_mappings,
  					  const TyTy::BaseType *ty,
  					  const location_t locus)
*************** PrivacyReporter::check_base_type_privacy
*** 182,188 ****
        {
  	auto ref_id = ty->get_ref ();
  	if (auto lookup_id = mappings.lookup_hir_to_node (ref_id))
! 	  return check_for_privacy_violation (*lookup_id, locus);
        }
        break;
  
--- 209,216 ----
        {
  	auto ref_id = ty->get_ref ();
  	if (auto lookup_id = mappings.lookup_hir_to_node (ref_id))
! 	  return check_for_privacy_violation (*lookup_id, locus,
! 					      Resolver2_0::Namespace::Types);
        }
        break;
  
*************** void
*** 260,266 ****
  PrivacyReporter::visit (HIR::PathInExpression &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus ());
  }
  
  void
--- 288,295 ----
  PrivacyReporter::visit (HIR::PathInExpression &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus (),
! 			       Resolver2_0::Namespace::Values);
  }
  
  void
*************** void
*** 287,307 ****
  PrivacyReporter::visit (HIR::TypePath &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus ());
  }
  
  void
  PrivacyReporter::visit (HIR::QualifiedPathInExpression &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus ());
  }
  
  void
  PrivacyReporter::visit (HIR::QualifiedPathInType &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus ());
  }
  
  void
--- 316,339 ----
  PrivacyReporter::visit (HIR::TypePath &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus (),
! 			       Resolver2_0::Namespace::Types);
  }
  
  void
  PrivacyReporter::visit (HIR::QualifiedPathInExpression &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus (),
! 			       Resolver2_0::Namespace::Values);
  }
  
  void
  PrivacyReporter::visit (HIR::QualifiedPathInType &path)
  {
    check_for_privacy_violation (path.get_mappings ().get_nodeid (),
! 			       path.get_locus (),
! 			       Resolver2_0::Namespace::Types);
  }
  
  void
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h
*** gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-privacy-reporter.h	Sun Jun 28 22:32:10 2026
***************
*** 24,30 ****
  #include "rust-hir-visitor.h"
  #include "rust-hir-type-check.h"
  #include "rust-mapping-common.h"
! #include "rust-name-resolution-context.h"
  
  namespace Rust {
  namespace Privacy {
--- 24,31 ----
  #include "rust-hir-visitor.h"
  #include "rust-hir-type-check.h"
  #include "rust-mapping-common.h"
! #include "rust-finalized-name-resolution-context.h"
! #include "rust-rib.h"
  
  namespace Rust {
  namespace Privacy {
*************** class PrivacyReporter : public HIR::HIRE
*** 39,45 ****
  {
  public:
    PrivacyReporter (Analysis::Mappings &mappings,
! 		   const Resolver2_0::NameResolutionContext &resolver,
  		   const Rust::Resolver::TypeCheckContext &ty_ctx);
  
    /**
--- 40,46 ----
  {
  public:
    PrivacyReporter (Analysis::Mappings &mappings,
! 		   const Resolver2_0::FinalizedNameResolutionContext &resolver,
  		   const Rust::Resolver::TypeCheckContext &ty_ctx);
  
    /**
*************** private:
*** 56,64 ****
     * @param use_id NodeId of the expression/statement referencing an item with
     * 		a visibility
     * @param locus Location of said expression/statement
     */
    void check_for_privacy_violation (const NodeId &use_id,
! 				    const location_t locus);
  
    /**
     * Internal function used by `check_type_privacy` when dealing with complex
--- 57,73 ----
     * @param use_id NodeId of the expression/statement referencing an item with
     * 		a visibility
     * @param locus Location of said expression/statement
+    * @param ns1, ns2 Namespaces in which to check for visibility
     */
    void check_for_privacy_violation (const NodeId &use_id,
! 				    const location_t locus,
! 				    Resolver2_0::Namespace ns);
!   void check_for_privacy_violation (const NodeId &use_id,
! 				    const location_t locus,
! 				    Resolver2_0::Namespace ns1,
! 				    Resolver2_0::Namespace ns2);
! 
!   void check_violation_inner (NodeId ref_node_id, const location_t inner);
  
    /**
     * Internal function used by `check_type_privacy` when dealing with complex
*************** types
*** 158,164 ****
    virtual void visit (HIR::ExprStmt &stmt);
  
    Analysis::Mappings &mappings;
!   const Resolver2_0::NameResolutionContext &resolver;
    const Rust::Resolver::TypeCheckContext &ty_ctx;
  
    // `None` means we're in the root module - the crate
--- 167,173 ----
    virtual void visit (HIR::ExprStmt &stmt);
  
    Analysis::Mappings &mappings;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
    const Rust::Resolver::TypeCheckContext &ty_ctx;
  
    // `None` means we're in the root module - the crate
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc
*** gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-visibility-resolver.cc	Sun Jun 28 22:32:10 2026
***************
*** 20,33 ****
  #include "rust-ast.h"
  #include "rust-hir.h"
  #include "rust-hir-item.h"
! #include "rust-name-resolution-context.h"
  
  namespace Rust {
  namespace Privacy {
  
  VisibilityResolver::VisibilityResolver (
    Analysis::Mappings &mappings,
!   const Resolver2_0::NameResolutionContext &resolver)
    : mappings (mappings), resolver (resolver)
  {}
  
--- 20,34 ----
  #include "rust-ast.h"
  #include "rust-hir.h"
  #include "rust-hir-item.h"
! #include "rust-finalized-name-resolution-context.h"
! #include "rust-rib.h"
  
  namespace Rust {
  namespace Privacy {
  
  VisibilityResolver::VisibilityResolver (
    Analysis::Mappings &mappings,
!   const Resolver2_0::FinalizedNameResolutionContext &resolver)
    : mappings (mappings), resolver (resolver)
  {}
  
*************** VisibilityResolver::resolve_module_path
*** 63,69 ****
  	     "cannot use non-module path as privacy restrictor");
  
    NodeId ref_node_id;
!   if (auto id = resolver.lookup (ast_node_id))
      {
        ref_node_id = *id;
      }
--- 64,70 ----
  	     "cannot use non-module path as privacy restrictor");
  
    NodeId ref_node_id;
!   if (auto id = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Types))
      {
        ref_node_id = *id;
      }
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-visibility-resolver.h gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-visibility-resolver.h
*** gcc-17-20260621/gcc/rust/checks/errors/privacy/rust-visibility-resolver.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/privacy/rust-visibility-resolver.h	Sun Jun 28 22:32:10 2026
***************
*** 24,30 ****
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-hir-map.h"
! #include "rust-name-resolution-context.h"
  #include "rust-hir-visitor.h"
  
  namespace Rust {
--- 24,30 ----
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-hir-map.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-hir-visitor.h"
  
  namespace Rust {
*************** namespace Privacy {
*** 33,40 ****
  class VisibilityResolver : public HIR::HIRVisItemVisitor
  {
  public:
!   VisibilityResolver (Analysis::Mappings &mappings,
! 		      const Resolver2_0::NameResolutionContext &resolver);
  
    /**
     * Perform visibility resolving on an entire crate
--- 33,41 ----
  class VisibilityResolver : public HIR::HIRVisItemVisitor
  {
  public:
!   VisibilityResolver (
!     Analysis::Mappings &mappings,
!     const Resolver2_0::FinalizedNameResolutionContext &resolver);
  
    /**
     * Perform visibility resolving on an entire crate
*************** public:
*** 93,99 ****
  
  private:
    Analysis::Mappings &mappings;
!   const Resolver2_0::NameResolutionContext &resolver;
    DefId current_module;
  };
  
--- 94,100 ----
  
  private:
    Analysis::Mappings &mappings;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
    DefId current_module;
  };
  
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc gcc-17-20260628/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc
*** gcc-17-20260621/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-builtin-attribute-checker.cc	Sun Jun 28 22:32:10 2026
*************** no_mangle (const AST::Attribute &attribu
*** 358,382 ****
  		   "must be of the form: %<#[no_mangle]%>");
      }
  }
  
  } // namespace handlers
  
  const std::unordered_map<std::string, std::function<void (AST::Attribute &)>>
!   attribute_checking_handlers
!   = {{Attrs::DOC, handlers::doc},
!      {Attrs::DEPRECATED, handlers::deprecated},
!      {Attrs::LINK_SECTION, handlers::link_section},
!      {Attrs::EXPORT_NAME, handlers::export_name},
!      {Attrs::NO_MANGLE, handlers::no_mangle},
!      {Attrs::ALLOW, handlers::lint},
!      {Attrs::DENY, handlers::lint},
!      {Attrs::WARN, handlers::lint},
!      {Attrs::FORBID, handlers::lint},
!      {Attrs::LINK_NAME, handlers::link_name},
!      {Attrs::PROC_MACRO_DERIVE, handlers::proc_macro_derive},
!      {Attrs::PROC_MACRO, handlers::proc_macro},
!      {Attrs::PROC_MACRO_ATTRIBUTE, handlers::proc_macro},
!      {Attrs::TARGET_FEATURE, handlers::target_feature}};
  
  tl::optional<std::function<void (AST::Attribute &)>>
  lookup_handler (std::string attr_name)
--- 358,421 ----
  		   "must be of the form: %<#[no_mangle]%>");
      }
  }
+ void
+ rustc_std_internal_symbol (const AST::Attribute &attribute)
+ {
+   if (attribute.has_attr_input ())
+     {
+       rust_error_at (attribute.get_locus (),
+ 		     "malformed %<rustc_std_internal_symbol%> attribute input");
+       rust_inform (attribute.get_locus (),
+ 		   "must be of the form: %<#[rustc_std_internal_symbol]%>");
+     }
+ }
+ 
+ void
+ rustc_allocator (const AST::Attribute &attribute)
+ {
+   if (attribute.has_attr_input ())
+     {
+       rust_error_at (attribute.get_locus (),
+ 		     "malformed %<rustc_allocator%> attribute input");
+       rust_inform (attribute.get_locus (),
+ 		   "must be of the form: %<#[rustc_allocator]%>");
+     }
+ }
+ 
+ void
+ rustc_allocator_nounwind (const AST::Attribute &attribute)
+ {
+   if (attribute.has_attr_input ())
+     {
+       rust_error_at (attribute.get_locus (),
+ 		     "malformed %<rustc_allocator_nounwind%> attribute input");
+       rust_inform (attribute.get_locus (),
+ 		   "must be of the form: %<#[rustc_allocator_nounwind]%>");
+     }
+ }
  
  } // namespace handlers
  
  const std::unordered_map<std::string, std::function<void (AST::Attribute &)>>
!   attribute_checking_handlers = {
!     {Attrs::DOC, handlers::doc},
!     {Attrs::DEPRECATED, handlers::deprecated},
!     {Attrs::LINK_SECTION, handlers::link_section},
!     {Attrs::EXPORT_NAME, handlers::export_name},
!     {Attrs::NO_MANGLE, handlers::no_mangle},
!     {Attrs::ALLOW, handlers::lint},
!     {Attrs::DENY, handlers::lint},
!     {Attrs::WARN, handlers::lint},
!     {Attrs::FORBID, handlers::lint},
!     {Attrs::LINK_NAME, handlers::link_name},
!     {Attrs::PROC_MACRO_DERIVE, handlers::proc_macro_derive},
!     {Attrs::PROC_MACRO, handlers::proc_macro},
!     {Attrs::PROC_MACRO_ATTRIBUTE, handlers::proc_macro},
!     {Attrs::TARGET_FEATURE, handlers::target_feature},
!     {Attrs::RUSTC_STD_INTERNAL_SYMBOL, handlers::rustc_std_internal_symbol},
!     {Attrs::RUSTC_ALLOCATOR, handlers::rustc_allocator},
!     {Attrs::RUSTC_ALLOCATOR_NOUNWIND, handlers::rustc_allocator_nounwind},
! };
  
  tl::optional<std::function<void (AST::Attribute &)>>
  lookup_handler (std::string attr_name)
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-const-checker.cc gcc-17-20260628/gcc/rust/checks/errors/rust-const-checker.cc
*** gcc-17-20260621/gcc/rust/checks/errors/rust-const-checker.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-const-checker.cc	Sun Jun 28 22:32:10 2026
***************
*** 21,34 ****
  #include "rust-hir-expr.h"
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-system.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace HIR {
  
  ConstChecker::ConstChecker ()
!   : resolver (Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
      mappings (Analysis::Mappings::get ())
  {}
  
--- 21,35 ----
  #include "rust-hir-expr.h"
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
+ #include "rust-rib.h"
  #include "rust-system.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace HIR {
  
  ConstChecker::ConstChecker ()
!   : resolver (Resolver2_0::FinalizedNameResolutionContext::get ()),
      mappings (Analysis::Mappings::get ())
  {}
  
*************** ConstChecker::visit (CallExpr &expr)
*** 355,361 ****
    NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
    NodeId ref_node_id;
  
!   if (auto id = resolver.lookup (ast_node_id))
      ref_node_id = *id;
    else
      return;
--- 356,362 ----
    NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
    NodeId ref_node_id;
  
!   if (auto id = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Values))
      ref_node_id = *id;
    else
      return;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-const-checker.h gcc-17-20260628/gcc/rust/checks/errors/rust-const-checker.h
*** gcc-17-20260621/gcc/rust/checks/errors/rust-const-checker.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-const-checker.h	Sun Jun 28 22:32:10 2026
***************
*** 22,28 ****
  #include "rust-hir-visitor.h"
  #include "rust-hir-type-check.h"
  #include "rust-stacked-contexts.h"
! #include "rust-name-resolution-context.h"
  
  namespace Rust {
  namespace HIR {
--- 22,28 ----
  #include "rust-hir-visitor.h"
  #include "rust-hir-type-check.h"
  #include "rust-stacked-contexts.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace HIR {
*************** private:
*** 72,78 ****
      std::vector<std::unique_ptr<GenericParam>> &param, ConstGenericCtx context);
  
    StackedContexts<HirId> const_context;
!   const Resolver2_0::NameResolutionContext &resolver;
    Analysis::Mappings &mappings;
  
    virtual void visit (Lifetime &lifetime) override;
--- 72,78 ----
      std::vector<std::unique_ptr<GenericParam>> &param, ConstGenericCtx context);
  
    StackedContexts<HirId> const_context;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
    Analysis::Mappings &mappings;
  
    virtual void visit (Lifetime &lifetime) override;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc gcc-17-20260628/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc
*** gcc-17-20260621/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-hir-pattern-analysis.cc	Sun Jun 28 22:32:10 2026
***************
*** 16,21 ****
--- 16,22 ----
  // along with GCC; see the file COPYING3.  If not see
  // <http://www.gnu.org/licenses/>.
  
+ #include "rust-rib.h"
  #include "rust-system.h"
  #include "rust-hir-pattern-analysis.h"
  #include "rust-diagnostics.h"
***************
*** 26,39 ****
  #include "rust-mapping-common.h"
  #include "rust-system.h"
  #include "rust-tyty.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
  
  PatternChecker::PatternChecker ()
    : tyctx (*Resolver::TypeCheckContext::get ()),
!     resolver (Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
      mappings (Analysis::Mappings::get ())
  {}
  
--- 27,40 ----
  #include "rust-mapping-common.h"
  #include "rust-system.h"
  #include "rust-tyty.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
  
  PatternChecker::PatternChecker ()
    : tyctx (*Resolver::TypeCheckContext::get ()),
!     resolver (Resolver2_0::FinalizedNameResolutionContext::get ()),
      mappings (Analysis::Mappings::get ())
  {}
  
*************** PatternChecker::visit (CallExpr &expr)
*** 235,241 ****
  
    NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
    NodeId ref_node_id;
!   if (auto id = resolver.lookup (ast_node_id))
      ref_node_id = *id;
    else
      return;
--- 236,242 ----
  
    NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
    NodeId ref_node_id;
!   if (auto id = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Values))
      ref_node_id = *id;
    else
      return;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-hir-pattern-analysis.h gcc-17-20260628/gcc/rust/checks/errors/rust-hir-pattern-analysis.h
*** gcc-17-20260621/gcc/rust/checks/errors/rust-hir-pattern-analysis.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-hir-pattern-analysis.h	Sun Jun 28 22:32:10 2026
***************
*** 26,32 ****
  #include "rust-tyty.h"
  #include "optional.h"
  #include "rust-hir-visitor.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
--- 26,32 ----
  #include "rust-tyty.h"
  #include "optional.h"
  #include "rust-hir-visitor.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
*************** public:
*** 46,52 ****
  
  private:
    Resolver::TypeCheckContext &tyctx;
!   const Resolver2_0::NameResolutionContext &resolver;
    Analysis::Mappings &mappings;
  
    virtual void visit (Lifetime &lifetime) override;
--- 46,52 ----
  
  private:
    Resolver::TypeCheckContext &tyctx;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
    Analysis::Mappings &mappings;
  
    virtual void visit (Lifetime &lifetime) override;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-readonly-check.cc gcc-17-20260628/gcc/rust/checks/errors/rust-readonly-check.cc
*** gcc-17-20260621/gcc/rust/checks/errors/rust-readonly-check.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-readonly-check.cc	Sun Jun 28 22:32:10 2026
***************
*** 23,30 ****
  #include "rust-hir-map.h"
  #include "rust-hir-pattern.h"
  #include "rust-mapping-common.h"
  #include "rust-system.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-tyty.h"
  
  namespace Rust {
--- 23,31 ----
  #include "rust-hir-map.h"
  #include "rust-hir-pattern.h"
  #include "rust-mapping-common.h"
+ #include "rust-rib.h"
  #include "rust-system.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-tyty.h"
  
  namespace Rust {
*************** ReadonlyChecker::visit (PathInExpression
*** 63,71 ****
    NodeId ast_node_id = expr.get_mappings ().get_nodeid ();
    NodeId def_id;
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
!   if (auto id = nr_ctx.lookup (ast_node_id))
      def_id = *id;
    else
      return;
--- 64,71 ----
    NodeId ast_node_id = expr.get_mappings ().get_nodeid ();
    NodeId def_id;
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
!   if (auto id = nr_ctx.lookup (ast_node_id, Resolver2_0::Namespace::Values))
      def_id = *id;
    else
      return;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-unsafe-checker.cc gcc-17-20260628/gcc/rust/checks/errors/rust-unsafe-checker.cc
*** gcc-17-20260621/gcc/rust/checks/errors/rust-unsafe-checker.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-unsafe-checker.cc	Sun Jun 28 22:32:10 2026
***************
*** 22,29 ****
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-attribute-values.h"
  #include "rust-system.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-intrinsic-values.h"
  
  namespace Rust {
--- 22,30 ----
  #include "rust-hir-stmt.h"
  #include "rust-hir-item.h"
  #include "rust-attribute-values.h"
+ #include "rust-rib.h"
  #include "rust-system.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-intrinsic-values.h"
  
  namespace Rust {
*************** namespace HIR {
*** 31,37 ****
  
  UnsafeChecker::UnsafeChecker ()
    : context (*Resolver::TypeCheckContext::get ()),
!     resolver (Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
      mappings (Analysis::Mappings::get ())
  {}
  
--- 32,38 ----
  
  UnsafeChecker::UnsafeChecker ()
    : context (*Resolver::TypeCheckContext::get ()),
!     resolver (Resolver2_0::FinalizedNameResolutionContext::get ()),
      mappings (Analysis::Mappings::get ())
  {}
  
*************** UnsafeChecker::visit (PathInExpression &
*** 220,227 ****
    NodeId ast_node_id = path.get_mappings ().get_nodeid ();
    NodeId ref_node_id;
  
!   if (auto resolved = resolver.lookup (ast_node_id))
!     ref_node_id = resolved.value ();
    else
      return;
  
--- 221,230 ----
    NodeId ast_node_id = path.get_mappings ().get_nodeid ();
    NodeId ref_node_id;
  
!   if (auto resolved
!       = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Values,
! 			 Resolver2_0::Namespace::Types))
!     ref_node_id = resolved->id;
    else
      return;
  
*************** UnsafeChecker::visit (CallExpr &expr)
*** 421,427 ****
    NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
    NodeId ref_node_id;
  
!   if (auto resolved = resolver.lookup (ast_node_id))
      ref_node_id = resolved.value ();
    else
      return;
--- 424,431 ----
    NodeId ast_node_id = expr.get_fnexpr ().get_mappings ().get_nodeid ();
    NodeId ref_node_id;
  
!   if (auto resolved
!       = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Values))
      ref_node_id = resolved.value ();
    else
      return;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/errors/rust-unsafe-checker.h gcc-17-20260628/gcc/rust/checks/errors/rust-unsafe-checker.h
*** gcc-17-20260621/gcc/rust/checks/errors/rust-unsafe-checker.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/errors/rust-unsafe-checker.h	Sun Jun 28 22:32:10 2026
***************
*** 20,26 ****
  #define RUST_UNSAFE_CHECKER_H
  
  #include "rust-hir-visitor.h"
! #include "rust-name-resolution-context.h"
  #include "rust-hir-type-check.h"
  #include "rust-stacked-contexts.h"
  
--- 20,26 ----
  #define RUST_UNSAFE_CHECKER_H
  
  #include "rust-hir-visitor.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-hir-type-check.h"
  #include "rust-stacked-contexts.h"
  
*************** private:
*** 54,60 ****
    StackedContexts<HirId> unsafe_context;
  
    Resolver::TypeCheckContext &context;
!   const Resolver2_0::NameResolutionContext &resolver;
    Analysis::Mappings &mappings;
  
    virtual void visit (Lifetime &lifetime) override;
--- 54,60 ----
    StackedContexts<HirId> unsafe_context;
  
    Resolver::TypeCheckContext &context;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
    Analysis::Mappings &mappings;
  
    virtual void visit (Lifetime &lifetime) override;
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/lints/rust-lint-marklive.cc gcc-17-20260628/gcc/rust/checks/lints/rust-lint-marklive.cc
*** gcc-17-20260621/gcc/rust/checks/lints/rust-lint-marklive.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/lints/rust-lint-marklive.cc	Sun Jun 28 22:32:10 2026
***************
*** 25,31 ****
  #include "rust-hir-map.h"
  #include "rust-hir-path.h"
  #include "rust-name-resolver.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-system.h"
  
  namespace Rust {
--- 25,32 ----
  #include "rust-hir-map.h"
  #include "rust-hir-path.h"
  #include "rust-name-resolver.h"
! #include "rust-finalized-name-resolution-context.h"
! #include "rust-rib.h"
  #include "rust-system.h"
  
  namespace Rust {
*************** MarkLive::visit (HIR::PathInExpression &
*** 115,121 ****
      ref_node_id
        = Analysis::Mappings::get ().get_lang_item_node (expr.get_lang_item ());
    else
!     find_ref_node_id (ast_node_id, ref_node_id);
  
    // node back to HIR
    tl::optional<HirId> hid = mappings.lookup_node_to_hir (ref_node_id);
--- 116,122 ----
      ref_node_id
        = Analysis::Mappings::get ().get_lang_item_node (expr.get_lang_item ());
    else
!     find_value_definition (ast_node_id, ref_node_id);
  
    // node back to HIR
    tl::optional<HirId> hid = mappings.lookup_node_to_hir (ref_node_id);
*************** MarkLive::visit (HIR::MethodCallExpr &ex
*** 140,146 ****
    // Trying to find the method definition and mark it alive.
    NodeId ast_node_id = expr.get_mappings ().get_nodeid ();
    NodeId ref_node_id = UNKNOWN_NODEID;
!   find_ref_node_id (ast_node_id, ref_node_id);
  
    // node back to HIR
    if (auto hid = mappings.lookup_node_to_hir (ref_node_id))
--- 141,147 ----
    // Trying to find the method definition and mark it alive.
    NodeId ast_node_id = expr.get_mappings ().get_nodeid ();
    NodeId ref_node_id = UNKNOWN_NODEID;
!   find_value_definition (ast_node_id, ref_node_id);
  
    // node back to HIR
    if (auto hid = mappings.lookup_node_to_hir (ref_node_id))
*************** MarkLive::visit_path_segment (HIR::PathE
*** 163,170 ****
    //
    // We should mark them alive all and ignoring other kind of segments.
    // If the segment we dont care then just return false is fine
!   if (auto id = resolver.lookup (ast_node_id))
!     ref_node_id = *id;
    else
      return false;
    if (auto hid = mappings.lookup_node_to_hir (ref_node_id))
--- 164,175 ----
    //
    // We should mark them alive all and ignoring other kind of segments.
    // If the segment we dont care then just return false is fine
!   // TODO: Should we look that up in all namespaces?
! 
!   if (auto nslookup
!       = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Values,
! 			 Resolver2_0::Namespace::Types))
!     ref_node_id = nslookup->id;
    else
      return false;
    if (auto hid = mappings.lookup_node_to_hir (ref_node_id))
*************** MarkLive::visit (HIR::TypeAlias &alias)
*** 242,248 ****
    NodeId ast_node_id;
  
    if (auto id = resolver.lookup (
! 	alias.get_type_aliased ().get_mappings ().get_nodeid ()))
      ast_node_id = *id;
    else
      rust_unreachable ();
--- 247,254 ----
    NodeId ast_node_id;
  
    if (auto id = resolver.lookup (
! 	alias.get_type_aliased ().get_mappings ().get_nodeid (),
! 	Resolver2_0::Namespace::Types))
      ast_node_id = *id;
    else
      rust_unreachable ();
*************** MarkLive::mark_hir_id (HirId id)
*** 264,274 ****
  }
  
  void
! MarkLive::find_ref_node_id (NodeId ast_node_id, NodeId &ref_node_id)
  {
!   auto resolved = resolver.lookup (ast_node_id);
    rust_assert (resolved.has_value ());
!   ref_node_id = resolved.value ();
  }
  
  } // namespace Analysis
--- 270,282 ----
  }
  
  void
! MarkLive::find_value_definition (NodeId ast_node_id, NodeId &ref_node_id)
  {
!   auto resolved = resolver.lookup (ast_node_id, Resolver2_0::Namespace::Values,
! 				   Resolver2_0::Namespace::Types);
    rust_assert (resolved.has_value ());
! 
!   ref_node_id = resolved->id;
  }
  
  } // namespace Analysis
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/lints/rust-lint-marklive.h gcc-17-20260628/gcc/rust/checks/lints/rust-lint-marklive.h
*** gcc-17-20260621/gcc/rust/checks/lints/rust-lint-marklive.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/lints/rust-lint-marklive.h	Sun Jun 28 22:32:10 2026
***************
*** 23,29 ****
  #include "rust-hir-map.h"
  #include "rust-lint-marklive-base.h"
  #include "rust-name-resolver.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
--- 23,29 ----
  #include "rust-hir-map.h"
  #include "rust-lint-marklive-base.h"
  #include "rust-name-resolver.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
*************** private:
*** 278,294 ****
    std::set<HirId> liveSymbols;
    std::set<HirId> scannedSymbols;
    Analysis::Mappings &mappings;
!   const Resolver2_0::NameResolutionContext &resolver;
    Resolver::TypeCheckContext *tyctx;
    MarkLive (std::vector<HirId> worklist)
      : worklist (worklist), mappings (Analysis::Mappings::get ()),
!       resolver (
! 	Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
        tyctx (Resolver::TypeCheckContext::get ()){};
  
    void mark_hir_id (HirId);
    bool visit_path_segment (HIR::PathExprSegment);
!   void find_ref_node_id (NodeId ast_node_id, NodeId &ref_node_id);
  };
  
  } // namespace Analysis
--- 278,293 ----
    std::set<HirId> liveSymbols;
    std::set<HirId> scannedSymbols;
    Analysis::Mappings &mappings;
!   const Resolver2_0::FinalizedNameResolutionContext &resolver;
    Resolver::TypeCheckContext *tyctx;
    MarkLive (std::vector<HirId> worklist)
      : worklist (worklist), mappings (Analysis::Mappings::get ()),
!       resolver (Resolver2_0::FinalizedNameResolutionContext::get ()),
        tyctx (Resolver::TypeCheckContext::get ()){};
  
    void mark_hir_id (HirId);
    bool visit_path_segment (HIR::PathExprSegment);
!   void find_value_definition (NodeId ast_node_id, NodeId &ref_node_id);
  };
  
  } // namespace Analysis
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-checker.cc gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-checker.cc
*** gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-checker.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-checker.cc	Sun Jun 28 22:32:10 2026
***************
*** 23,34 ****
  
  #include "options.h"
  #include "rust-keyword-values.h"
  
  namespace Rust {
  namespace Analysis {
  UnusedChecker::UnusedChecker ()
!   : nr_context (
!     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
      mappings (Analysis::Mappings::get ()), unused_context (UnusedContext ())
  {}
  void
--- 23,34 ----
  
  #include "options.h"
  #include "rust-keyword-values.h"
+ #include "rust-rib.h"
  
  namespace Rust {
  namespace Analysis {
  UnusedChecker::UnusedChecker ()
!   : nr_context (Resolver2_0::FinalizedNameResolutionContext::get ()),
      mappings (Analysis::Mappings::get ()), unused_context (UnusedContext ())
  {}
  void
*************** UnusedChecker::visit (HIR::IdentifierPat
*** 105,124 ****
  		     "variable %qs should have a snake case name",
  		     var_name.c_str ());
  }
- void
  
  UnusedChecker::visit (HIR::AssignmentExpr &expr)
- 
  {
    const auto &lhs = expr.get_lhs ();
    auto var_name = lhs.to_string ();
    NodeId ast_node_id = lhs.get_mappings ().get_nodeid ();
!   NodeId def_id = nr_context.lookup (ast_node_id).value ();
!   HirId id = mappings.lookup_node_to_hir (def_id).value ();
!   if (unused_context.is_variable_assigned (id, lhs.get_mappings ().get_hirid ())
!       && var_name[0] != '_')
!     rust_warning_at (lhs.get_locus (), OPT_Wunused_variable,
! 		     "unused assignment %qs", var_name.c_str ());
  }
  
  void
--- 105,129 ----
  		     "variable %qs should have a snake case name",
  		     var_name.c_str ());
  }
  
+ void
  UnusedChecker::visit (HIR::AssignmentExpr &expr)
  {
    const auto &lhs = expr.get_lhs ();
    auto var_name = lhs.to_string ();
    NodeId ast_node_id = lhs.get_mappings ().get_nodeid ();
!   if (auto def_id
!       = nr_context.lookup (ast_node_id, Resolver2_0::Namespace::Values))
!     {
!       if (auto id = mappings.lookup_node_to_hir (*def_id))
! 	{
! 	  if (unused_context.is_variable_assigned (
! 		*id, lhs.get_mappings ().get_hirid ())
! 	      && var_name[0] != '_')
! 	    rust_warning_at (lhs.get_locus (), OPT_Wunused_variable,
! 			     "unused assignment %qs", var_name.c_str ());
! 	}
!     }
  }
  
  void
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-checker.h gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-checker.h
*** gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-checker.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-checker.h	Sun Jun 28 22:32:10 2026
***************
*** 22,28 ****
  #include "rust-hir-pattern.h"
  #include "rust-hir-visitor.h"
  #include "rust-unused-collector.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
--- 22,28 ----
  #include "rust-hir-pattern.h"
  #include "rust-hir-visitor.h"
  #include "rust-unused-collector.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
*************** public:
*** 33,39 ****
    void go (HIR::Crate &crate);
  
  private:
!   const Resolver2_0::NameResolutionContext &nr_context;
    Analysis::Mappings &mappings;
    UnusedContext unused_context;
  
--- 33,39 ----
    void go (HIR::Crate &crate);
  
  private:
!   const Resolver2_0::FinalizedNameResolutionContext &nr_context;
    Analysis::Mappings &mappings;
    UnusedContext unused_context;
  
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-collector.cc gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-collector.cc
*** gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-collector.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-collector.cc	Sun Jun 28 22:32:10 2026
***************
*** 22,34 ****
  #include "rust-hir-item.h"
  #include "rust-hir-path.h"
  #include "rust-hir-pattern.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Analysis {
  UnusedCollector::UnusedCollector (UnusedContext &context)
!   : nr_context (
!     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ()),
      mappings (Analysis::Mappings::get ()), unused_context (context)
  {}
  void
--- 22,34 ----
  #include "rust-hir-item.h"
  #include "rust-hir-path.h"
  #include "rust-hir-pattern.h"
! #include "rust-finalized-name-resolution-context.h"
! #include "rust-rib.h"
  
  namespace Rust {
  namespace Analysis {
  UnusedCollector::UnusedCollector (UnusedContext &context)
!   : nr_context (Resolver2_0::FinalizedNameResolutionContext::get ()),
      mappings (Analysis::Mappings::get ()), unused_context (context)
  {}
  void
*************** UnusedCollector::visit (HIR::StructExprF
*** 62,71 ****
  void
  UnusedCollector::visit (HIR::AssignmentExpr &expr)
  {
!   auto def_id = get_def_id (expr.get_lhs ());
!   HirId id = expr.get_lhs ().get_mappings ().get_hirid ();
!   unused_context.remove_mut (def_id);
!   unused_context.add_assign (def_id, id);
    visit_outer_attrs (expr);
    expr.get_rhs ().accept_vis (*this);
  }
--- 62,74 ----
  void
  UnusedCollector::visit (HIR::AssignmentExpr &expr)
  {
!   if (auto def_id
!       = get_def_id (expr.get_lhs (), Resolver2_0::Namespace::Values))
!     {
!       HirId id = expr.get_lhs ().get_mappings ().get_hirid ();
!       unused_context.remove_mut (*def_id);
!       unused_context.add_assign (*def_id, id);
!     }
    visit_outer_attrs (expr);
    expr.get_rhs ().accept_vis (*this);
  }
diff -Nrcpad gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-collector.h gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-collector.h
*** gcc-17-20260621/gcc/rust/checks/lints/unused/rust-unused-collector.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/checks/lints/unused/rust-unused-collector.h	Sun Jun 28 22:32:10 2026
***************
*** 21,27 ****
  #include "rust-hir-pattern.h"
  #include "rust-hir-visitor.h"
  #include "rust-mapping-common.h"
! #include "rust-name-resolution-context.h"
  #include "rust-unused-context.h"
  
  namespace Rust {
--- 21,28 ----
  #include "rust-hir-pattern.h"
  #include "rust-hir-visitor.h"
  #include "rust-mapping-common.h"
! #include "rust-finalized-name-resolution-context.h"
! #include "rust-rib.h"
  #include "rust-unused-context.h"
  
  namespace Rust {
*************** public:
*** 33,39 ****
    void go (HIR::Crate &crate);
  
  private:
!   const Resolver2_0::NameResolutionContext &nr_context;
    Analysis::Mappings &mappings;
    UnusedContext &unused_context;
  
--- 34,40 ----
    void go (HIR::Crate &crate);
  
  private:
!   const Resolver2_0::FinalizedNameResolutionContext &nr_context;
    Analysis::Mappings &mappings;
    UnusedContext &unused_context;
  
*************** private:
*** 55,79 ****
    virtual void visit (HIR::BreakExpr &expr) override;
    virtual void visit (HIR::ContinueExpr &expr) override;
  
!   template <typename T> HirId get_def_id (T &path_expr)
    {
      NodeId ast_node_id = path_expr.get_mappings ().get_nodeid ();
!     NodeId id = nr_context.lookup (ast_node_id).value ();
!     HirId def_id = mappings.lookup_node_to_hir (id).value ();
!     return def_id;
    }
  
    template <typename T> void mark_path_used (T &path_expr)
    {
!     auto def_id = get_def_id (path_expr);
!     unused_context.add_variable (def_id);
!     unused_context.remove_assign (def_id);
    }
  
    template <typename T> void mark_label_used (T &path_expr)
    {
!     auto def_id = get_def_id (path_expr);
!     unused_context.add_label (def_id);
    }
  };
  } // namespace Analysis
--- 56,111 ----
    virtual void visit (HIR::BreakExpr &expr) override;
    virtual void visit (HIR::ContinueExpr &expr) override;
  
!   template <typename T>
!   tl::optional<HirId> get_def_id (T &path_expr, Resolver2_0::Namespace ns)
    {
      NodeId ast_node_id = path_expr.get_mappings ().get_nodeid ();
! 
!     if (auto id = nr_context.lookup (ast_node_id, ns))
!       {
! 	if (auto def_id = mappings.lookup_node_to_hir (*id))
! 	  {
! 	    return *def_id;
! 	  }
!       }
!     return tl::nullopt;
!   }
! 
!   template <typename T>
!   tl::optional<HirId> get_def_id (T &path_expr, Resolver2_0::Namespace ns1,
! 				  Resolver2_0::Namespace ns2)
!   {
!     NodeId ast_node_id = path_expr.get_mappings ().get_nodeid ();
! 
!     if (auto nslookup = nr_context.lookup (ast_node_id, ns1, ns2))
!       {
! 	NodeId id = nslookup->id;
! 
! 	if (auto def_id = mappings.lookup_node_to_hir (id))
! 	  {
! 	    return *def_id;
! 	  }
!       }
! 
!     return tl::nullopt;
    }
  
    template <typename T> void mark_path_used (T &path_expr)
    {
!     if (auto def_id = get_def_id (path_expr, Resolver2_0::Namespace::Values,
! 				  Resolver2_0::Namespace::Types))
!       {
! 	unused_context.add_variable (*def_id);
! 	unused_context.remove_assign (*def_id);
!       }
    }
  
    template <typename T> void mark_label_used (T &path_expr)
    {
!     if (auto def_id = get_def_id (path_expr, Resolver2_0::Namespace::Labels))
!       {
! 	unused_context.add_label (*def_id);
!       }
    }
  };
  } // namespace Analysis
diff -Nrcpad gcc-17-20260621/gcc/rust/lex/rust-lex.cc gcc-17-20260628/gcc/rust/lex/rust-lex.cc
*** gcc-17-20260621/gcc/rust/lex/rust-lex.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/lex/rust-lex.cc	Sun Jun 28 22:32:10 2026
*************** Lexer::parse_decimal_int_or_float (locat
*** 2306,2312 ****
        loc += length - 1;
  
        str.shrink_to_fit ();
!       return Token::make_float (loc, std::move (str), str.length (),
  				CORETYPE_UNKNOWN);
      }
    else if (current_char == 'E' || current_char == 'e')
--- 2306,2313 ----
        loc += length - 1;
  
        str.shrink_to_fit ();
!       auto suffix_start = str.length ();
!       return Token::make_float (loc, std::move (str), suffix_start,
  				CORETYPE_UNKNOWN);
      }
    else if (current_char == 'E' || current_char == 'e')
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-default-resolver.cc gcc-17-20260628/gcc/rust/resolve/rust-default-resolver.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-default-resolver.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-default-resolver.cc	Sun Jun 28 22:32:10 2026
*************** namespace Resolver2_0 {
*** 31,36 ****
--- 31,41 ----
  void
  DefaultResolver::visit (AST::Crate &crate)
  {
+   // Guard against infinite recursion: `extern crate self;` resolves to the
+   // current crate, causing visit(AST::Crate) to call itself infinitely.
+   if (!visited_crates.insert (crate.get_node_id ()).second)
+     return;
+ 
    auto inner_fn = [this, &crate] () { AST::DefaultASTVisitor::visit (crate); };
  
    auto &mappings = Analysis::Mappings::get ();
*************** void
*** 444,450 ****
  DefaultResolver::visit (AST::ExternCrate &crate)
  {
    auto &mappings = Analysis::Mappings::get ();
!   auto num_opt = mappings.lookup_crate_name (crate.get_referenced_crate ());
  
    if (!num_opt)
      {
--- 449,459 ----
  DefaultResolver::visit (AST::ExternCrate &crate)
  {
    auto &mappings = Analysis::Mappings::get ();
!   tl::optional<CrateNum> num_opt;
!   if (crate.get_referenced_crate () == "self")
!     num_opt = mappings.get_current_crate ();
!   else
!     num_opt = mappings.lookup_crate_name (crate.get_referenced_crate ());
  
    if (!num_opt)
      {
*************** DefaultResolver::visit (AST::ExternCrate
*** 462,468 ****
  
    auto sub_visitor_2 = [&] () {
      ctx.canonical_ctx.scope_crate (referenced_crate.get_node_id (),
! 				   crate.get_referenced_crate (),
  				   std::move (sub_visitor_1));
    };
  
--- 471,479 ----
  
    auto sub_visitor_2 = [&] () {
      ctx.canonical_ctx.scope_crate (referenced_crate.get_node_id (),
! 				   crate.get_referenced_crate () == "self"
! 				     ? mappings.get_current_crate_name ()
! 				     : crate.get_referenced_crate (),
  				   std::move (sub_visitor_1));
    };
  
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-default-resolver.h gcc-17-20260628/gcc/rust/resolve/rust-default-resolver.h
*** gcc-17-20260621/gcc/rust/resolve/rust-default-resolver.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-default-resolver.h	Sun Jun 28 22:32:10 2026
***************
*** 20,25 ****
--- 20,26 ----
  #ifndef RUST_AST_DEFAULT_RESOLVER_H
  #define RUST_AST_DEFAULT_RESOLVER_H
  
+ #include "rust-system.h"
  #include "rust-ast-visitor.h"
  #include "rust-name-resolution-context.h"
  
*************** protected:
*** 89,94 ****
--- 90,97 ----
    DefaultResolver (NameResolutionContext &ctx) : ctx (ctx) {}
  
    NameResolutionContext &ctx;
+ 
+   std::set<NodeId> visited_crates;
  };
  
  } // namespace Resolver2_0
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-early-name-resolver-2.0.cc gcc-17-20260628/gcc/rust/resolve/rust-early-name-resolver-2.0.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-early-name-resolver-2.0.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-early-name-resolver-2.0.cc	Sun Jun 28 22:32:10 2026
***************
*** 23,28 ****
--- 23,30 ----
  #include "rust-diagnostics.h"
  #include "rust-hir-map.h"
  #include "rust-item.h"
+ #include "rust-name-resolution-context.h"
+ #include "rust-rib.h"
  #include "rust-toplevel-name-resolver-2.0.h"
  #include "rust-attributes.h"
  #include "rust-finalize-imports-2.0.h"
*************** Early::Early (NameResolutionContext &ctx
*** 37,46 ****
  {}
  
  void
! Early::insert_once (AST::MacroInvocation &invocation, NodeId resolved)
  {
!   // TODO: Should we use `ctx.mark_resolved()`?
!   auto definition = ctx.mappings.lookup_macro_def (resolved);
  
    if (!ctx.mappings.lookup_macro_invocation (invocation))
      ctx.mappings.insert_macro_invocation (invocation, definition.value ());
--- 39,55 ----
  {}
  
  void
! Early::try_insert_once (AST::MacroInvocation &invocation, NodeId resolved)
  {
!   auto leaf_macro = ctx.macros.find_leaf_definition (resolved);
! 
!   // Sometimes the import itself isn't resolved yet this turn of the fixed-point
!   if (!leaf_macro)
!     return;
! 
!   // TODO: Should we use `ctx.map_usage()`?
! 
!   auto definition = ctx.mappings.lookup_macro_def (leaf_macro->id);
  
    if (!ctx.mappings.lookup_macro_invocation (invocation))
      ctx.mappings.insert_macro_invocation (invocation, definition.value ());
*************** Early::insert_once (AST::MacroInvocation
*** 49,55 ****
  void
  Early::insert_once (AST::MacroRulesDefinition &def)
  {
-   // TODO: Should we use `ctx.mark_resolved()`?
    if (!ctx.mappings.lookup_macro_def (def.get_node_id ()))
      ctx.mappings.insert_macro_def (&def);
  }
--- 58,63 ----
*************** Early::go (AST::Crate &crate)
*** 64,69 ****
--- 72,78 ----
    // us
  
    dirty = toplevel.is_dirty ();
+ 
    // We now proceed with resolving macros, which can be nested in almost any
    // items
    textual_scope.push ();
*************** Early::resolve_glob_import (NodeId use_d
*** 84,90 ****
      return false;
  
    auto result = Analysis::Mappings::get ().lookup_glob_container (
!     resolved->get_node_id ());
  
    if (!result)
      return false;
--- 93,99 ----
      return false;
  
    auto result = Analysis::Mappings::get ().lookup_glob_container (
!     resolved->definition.get_node_id ());
  
    if (!result)
      return false;
*************** Early::resolve_glob_import (NodeId use_d
*** 92,101 ****
    // here, we insert the module's NodeId into the import_mappings and will look
    // up the module proper in `FinalizeImports`
    // The namespace does not matter here since we are dealing with a glob
    // TODO: Ugly
    import_mappings.insert (use_dec_id,
  			  ImportPair (std::move (glob),
! 				      ImportData::Glob (*resolved)));
  
    return true;
  }
--- 101,111 ----
    // here, we insert the module's NodeId into the import_mappings and will look
    // up the module proper in `FinalizeImports`
    // The namespace does not matter here since we are dealing with a glob
+   // FIXME: Does the namespace not matter? Is that valid?
    // TODO: Ugly
    import_mappings.insert (use_dec_id,
  			  ImportPair (std::move (glob),
! 				      ImportData::Glob (resolved->definition)));
  
    return true;
  }
*************** bool
*** 122,127 ****
--- 132,171 ----
  Early::resolve_rebind_import (NodeId use_dec_id,
  			      TopLevel::ImportKind &&rebind_import)
  {
+   NodeId import_id = UNKNOWN_NODEID;
+   auto &path = rebind_import.to_resolve;
+   auto &rebind = rebind_import.rebind.value ();
+ 
+   switch (rebind.get_new_bind_type ())
+     {
+     case AST::UseTreeRebind::NewBindType::IDENTIFIER:
+       import_id = rebind.get_node_id ();
+       break;
+     case AST::UseTreeRebind::NewBindType::NONE:
+       {
+ 	const auto &segments = path.get_segments ();
+ 	// We don't want to insert `self` with `use module::self`
+ 	if (path.get_final_segment ().is_lower_self_seg ())
+ 	  {
+ 	    // Erroneous `self` or `{self}` use declaration
+ 	    if (segments.size () == 1)
+ 	      break;
+ 	    import_id = segments[segments.size () - 2].get_node_id ();
+ 	  }
+ 	else
+ 	  {
+ 	    import_id = path.get_final_segment ().get_node_id ();
+ 	  }
+ 	break;
+       }
+     case AST::UseTreeRebind::NewBindType::WILDCARD:
+       // nothing
+       break;
+     }
+ 
+   if (ctx.lookup (import_id, Namespace::Types))
+     return true;
+ 
    auto definitions = resolve_path_in_all_ns (rebind_import.to_resolve);
  
    // if we've found at least one definition, then we're good
*************** Early::resolve_rebind_import (NodeId use
*** 129,135 ****
      return false;
    for (const auto &def : definitions)
      {
!       if (def.first.is_ambiguous ())
  	{
  	  rich_location rich_locus (line_table,
  				    rebind_import.to_resolve.get_locus ());
--- 173,179 ----
      return false;
    for (const auto &def : definitions)
      {
!       if (def.definition.is_ambiguous ())
  	{
  	  rich_location rich_locus (line_table,
  				    rebind_import.to_resolve.get_locus ());
*************** Early::visit (AST::MacroInvocation &invo
*** 289,308 ****
  
    // https://doc.rust-lang.org/reference/macros-by-example.html#path-based-scope
  
!   tl::optional<Rib::Definition> definition = tl::nullopt;
    if (path.get_segments ().size () == 1)
!     definition
!       = textual_scope.get (path.get_final_segment ().as_string ())
! 	  .map ([] (NodeId id) { return Rib::Definition::NonShadowable (id); });
  
    // we won't have changed `definition` from `nullopt` if there are more
    // than one segments in our path
!   if (!definition.has_value ())
!     definition = ctx.resolve_path (path, Namespace::Macros);
  
    // if the definition still does not have a value, then it's an error - unless
    // we should automatically resolve offset_of!() calls
!   if (!definition.has_value ())
      {
        if (!resolve_offset_of)
  	collect_error (Error (invoc.get_locus (), ErrorCode::E0433,
--- 333,355 ----
  
    // https://doc.rust-lang.org/reference/macros-by-example.html#path-based-scope
  
!   tl::optional<NameResolutionContext::NamespacedDefinition> ns_def
!     = tl::nullopt;
    if (path.get_segments ().size () == 1)
!     ns_def = textual_scope.get (path.get_final_segment ().as_string ())
! 	       .map ([] (NodeId id) {
! 		 return NameResolutionContext::NamespacedDefinition (
! 		   Rib::Definition::NonShadowable (id), Namespace::Macros);
! 	       });
  
    // we won't have changed `definition` from `nullopt` if there are more
    // than one segments in our path
!   if (!ns_def.has_value ())
!     ns_def = ctx.resolve_path (path, Namespace::Macros);
  
    // if the definition still does not have a value, then it's an error - unless
    // we should automatically resolve offset_of!() calls
!   if (!ns_def.has_value ())
      {
        if (!resolve_offset_of)
  	collect_error (Error (invoc.get_locus (), ErrorCode::E0433,
*************** Early::visit (AST::MacroInvocation &invo
*** 311,322 ****
        return;
      }
  
!   insert_once (invoc, definition->get_node_id ());
  
    // now do we need to keep mappings or something? or insert "uses" into our
    // ForeverStack? can we do that? are mappings simpler?
    auto &mappings = Analysis::Mappings::get ();
!   auto rules_def = mappings.lookup_macro_def (definition->get_node_id ());
  
    // Macro definition not found, maybe it is not expanded yet.
    if (!rules_def)
--- 358,370 ----
        return;
      }
  
!   try_insert_once (invoc, ns_def->definition.get_node_id ());
  
    // now do we need to keep mappings or something? or insert "uses" into our
    // ForeverStack? can we do that? are mappings simpler?
    auto &mappings = Analysis::Mappings::get ();
!   auto rules_def
!     = mappings.lookup_macro_def (ns_def->definition.get_node_id ());
  
    // Macro definition not found, maybe it is not expanded yet.
    if (!rules_def)
*************** Early::visit_derive_attribute (AST::Attr
*** 335,342 ****
    auto traits = attr.get_traits_to_derive ();
    for (auto &trait : traits)
      {
!       auto definition = ctx.resolve_path (trait.get (), Namespace::Macros);
!       if (!definition.has_value ())
  	{
  	  // FIXME: Change to proper error message
  	  collect_error (Error (trait.get ().get_locus (),
--- 383,390 ----
    auto traits = attr.get_traits_to_derive ();
    for (auto &trait : traits)
      {
!       auto ns_def = ctx.resolve_path (trait.get (), Namespace::Macros);
!       if (!ns_def.has_value ())
  	{
  	  // FIXME: Change to proper error message
  	  collect_error (Error (trait.get ().get_locus (),
*************** Early::visit_derive_attribute (AST::Attr
*** 345,352 ****
  	  continue;
  	}
  
!       auto pm_def
! 	= mappings.lookup_derive_proc_macro_def (definition->get_node_id ());
  
        if (pm_def.has_value ())
  	mappings.insert_derive_proc_macro_invocation (trait, pm_def.value ());
--- 393,400 ----
  	  continue;
  	}
  
!       auto pm_def = mappings.lookup_derive_proc_macro_def (
! 	ns_def->definition.get_node_id ());
  
        if (pm_def.has_value ())
  	mappings.insert_derive_proc_macro_invocation (trait, pm_def.value ());
*************** Early::visit_non_builtin_attribute (AST:
*** 358,365 ****
  				    Analysis::Mappings &mappings,
  				    std::string &name)
  {
!   auto definition = ctx.resolve_path (attr.get_path (), Namespace::Macros);
!   if (!definition.has_value ())
      {
        // FIXME: Change to proper error message
        collect_error (Error (attr.get_locus (),
--- 406,413 ----
  				    Analysis::Mappings &mappings,
  				    std::string &name)
  {
!   auto ns_def = ctx.resolve_path (attr.get_path (), Namespace::Macros);
!   if (!ns_def.has_value ())
      {
        // FIXME: Change to proper error message
        collect_error (Error (attr.get_locus (),
*************** Early::visit_non_builtin_attribute (AST:
*** 367,374 ****
  			    name.c_str ()));
        return;
      }
!   auto pm_def
!     = mappings.lookup_attribute_proc_macro_def (definition->get_node_id ());
  
    if (!pm_def.has_value ())
      return;
--- 415,422 ----
  			    name.c_str ()));
        return;
      }
!   auto pm_def = mappings.lookup_attribute_proc_macro_def (
!     ns_def->definition.get_node_id ());
  
    if (!pm_def.has_value ())
      return;
*************** Early::finalize_simple_import (const Ear
*** 406,420 ****
  {
    // FIXME: We probably need to store namespace information
  
!   auto locus = mapping.import_kind.to_resolve.get_locus ();
    auto data = mapping.data;
!   auto identifier
!     = mapping.import_kind.to_resolve.get_final_segment ().get_segment_name ();
  
    for (auto &&definition : data.definitions ())
!     toplevel
!       .insert_or_error_out (
! 	identifier, locus, definition.first.get_node_id (), definition.second /* TODO: This isn't clear - it would be better if it was called .ns or something */);
  }
  
  void
--- 454,476 ----
  {
    // FIXME: We probably need to store namespace information
  
!   auto import = mapping.import_kind.to_resolve;
!   auto import_id = import.get_final_segment ().get_node_id ();
    auto data = mapping.data;
!   auto identifier = import.get_final_segment ().get_segment_name ();
  
    for (auto &&definition : data.definitions ())
!     {
!       ctx.map_usage (Usage (import_id),
! 		     Definition (definition.definition.get_node_id ()),
! 		     definition.ns);
! 
!       toplevel.insert_or_error_out (identifier, import.get_locus (),
! 				    definition.definition.get_node_id (),
! 				    definition.ns);
! 
!       dirty = dirty || toplevel.is_dirty ();
!     }
  }
  
  void
*************** Early::finalize_rebind_import (const Ear
*** 446,452 ****
    auto &rebind = mapping.import_kind.rebind.value ();
    auto data = mapping.data;
  
!   location_t locus = UNKNOWN_LOCATION;
    std::string declared_name;
  
    // FIXME: This needs to be done in `FinalizeImports`
--- 502,508 ----
    auto &rebind = mapping.import_kind.rebind.value ();
    auto data = mapping.data;
  
!   NodeId import_id = UNKNOWN_NODEID;
    std::string declared_name;
  
    // FIXME: This needs to be done in `FinalizeImports`
*************** Early::finalize_rebind_import (const Ear
*** 454,460 ****
      {
      case AST::UseTreeRebind::NewBindType::IDENTIFIER:
        declared_name = rebind.get_identifier ().as_string ();
!       locus = rebind.get_identifier ().get_locus ();
        break;
      case AST::UseTreeRebind::NewBindType::NONE:
        {
--- 510,516 ----
      {
      case AST::UseTreeRebind::NewBindType::IDENTIFIER:
        declared_name = rebind.get_identifier ().as_string ();
!       import_id = rebind.get_node_id ();
        break;
      case AST::UseTreeRebind::NewBindType::NONE:
        {
*************** Early::finalize_rebind_import (const Ear
*** 464,475 ****
  	  {
  	    // Erroneous `self` or `{self}` use declaration
  	    if (segments.size () == 1)
! 	      break;
  	    declared_name = segments[segments.size () - 2].as_string ();
  	  }
  	else
! 	  declared_name = path.get_final_segment ().as_string ();
! 	locus = path.get_final_segment ().get_locus ();
  	break;
        }
      case AST::UseTreeRebind::NewBindType::WILDCARD:
--- 520,534 ----
  	  {
  	    // Erroneous `self` or `{self}` use declaration
  	    if (segments.size () == 1)
! 	      return;
  	    declared_name = segments[segments.size () - 2].as_string ();
+ 	    import_id = segments[segments.size () - 2].get_node_id ();
  	  }
  	else
! 	  {
! 	    declared_name = path.get_final_segment ().as_string ();
! 	    import_id = path.get_final_segment ().get_node_id ();
! 	  }
  	break;
        }
      case AST::UseTreeRebind::NewBindType::WILDCARD:
*************** Early::finalize_rebind_import (const Ear
*** 478,485 ****
      }
  
    for (auto &&definition : data.definitions ())
!     toplevel.insert_or_error_out (
!       declared_name, locus, definition.first.get_node_id (), definition.second /* TODO: This isn't clear - it would be better if it was called .ns or something */);
  }
  
  void
--- 537,564 ----
      }
  
    for (auto &&definition : data.definitions ())
!     {
!       ctx.map_usage (Usage (import_id),
! 		     Definition (definition.definition.get_node_id ()),
! 		     definition.ns);
! 
!       toplevel.insert_or_error_out (declared_name, path.get_locus (),
! 				    definition.definition.get_node_id (),
! 				    definition.ns);
! 
!       dirty = dirty || toplevel.is_dirty ();
! 
!       // Map the import to the glob container if it exists - this is important
!       // for 2-stepped glob imports which refer to glob containers, e.g.
!       //
!       // enum Foo { ... }
!       // pub use Foo;
!       // use self::Foo::*;
!       auto &mappings = Analysis::Mappings::get ();
!       if (auto container = mappings.lookup_glob_container (
! 	    definition.definition.get_node_id ()))
! 	mappings.insert_glob_container (import_id, container.value ());
!     }
  }
  
  void
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-early-name-resolver-2.0.h gcc-17-20260628/gcc/rust/resolve/rust-early-name-resolver-2.0.h
*** gcc-17-20260621/gcc/rust/resolve/rust-early-name-resolver-2.0.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-early-name-resolver-2.0.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 79,92 ****
        Rebind
      } kind;
  
!     static ImportData
!     Simple (std::vector<std::pair<Rib::Definition, Namespace>> &&definitions)
      {
        return ImportData (Kind::Simple, std::move (definitions));
      }
  
!     static ImportData
!     Rebind (std::vector<std::pair<Rib::Definition, Namespace>> &&definitions)
      {
        return ImportData (Kind::Rebind, std::move (definitions));
      }
--- 79,92 ----
        Rebind
      } kind;
  
!     static ImportData Simple (
!       std::vector<NameResolutionContext::NamespacedDefinition> &&definitions)
      {
        return ImportData (Kind::Simple, std::move (definitions));
      }
  
!     static ImportData Rebind (
!       std::vector<NameResolutionContext::NamespacedDefinition> &&definitions)
      {
        return ImportData (Kind::Rebind, std::move (definitions));
      }
*************** public:
*** 102,108 ****
        return glob_container;
      }
  
!     std::vector<std::pair<Rib::Definition, Namespace>> definitions () const
      {
        rust_assert (kind != Kind::Glob);
        return std::move (resolved_definitions);
--- 102,109 ----
        return glob_container;
      }
  
!     std::vector<NameResolutionContext::NamespacedDefinition>
!     definitions () const
      {
        rust_assert (kind != Kind::Glob);
        return std::move (resolved_definitions);
*************** public:
*** 111,117 ****
    private:
      ImportData (
        Kind kind,
!       std::vector<std::pair<Rib::Definition, Namespace>> &&definitions)
        : kind (kind), resolved_definitions (std::move (definitions))
      {}
  
--- 112,118 ----
    private:
      ImportData (
        Kind kind,
!       std::vector<NameResolutionContext::NamespacedDefinition> &&definitions)
        : kind (kind), resolved_definitions (std::move (definitions))
      {}
  
*************** public:
*** 122,128 ****
      // TODO: Should this be a union?
  
      // For Simple and Rebind
!     std::vector<std::pair<Rib::Definition, Namespace>> resolved_definitions;
  
      // For Glob
      Rib::Definition glob_container;
--- 123,130 ----
      // TODO: Should this be a union?
  
      // For Simple and Rebind
!     std::vector<NameResolutionContext::NamespacedDefinition>
!       resolved_definitions;
  
      // For Glob
      Rib::Definition glob_container;
*************** private:
*** 181,187 ****
     * and it will not trigger assertions for already resolved invocations.
     */
    // TODO: Rename
!   void insert_once (AST::MacroInvocation &invocation, NodeId resolved);
    // TODO: Rename
    void insert_once (AST::MacroRulesDefinition &definition);
  
--- 183,189 ----
     * and it will not trigger assertions for already resolved invocations.
     */
    // TODO: Rename
!   void try_insert_once (AST::MacroInvocation &invocation, NodeId resolved);
    // TODO: Rename
    void insert_once (AST::MacroRulesDefinition &definition);
  
*************** private:
*** 221,249 ****
    bool resolve_rebind_import (NodeId use_dec_id, TopLevel::ImportKind &&import);
  
    template <typename P>
!   std::vector<std::pair<Rib::Definition, Namespace>>
    resolve_path_in_all_ns (const P &path)
    {
!     std::vector<std::pair<Rib::Definition, Namespace>> resolved;
! 
!     // Pair a definition with the namespace it was found in
!     auto pair_with_ns = [&] (Namespace ns) {
!       return [&, ns] (Rib::Definition def) {
! 	auto pair = std::make_pair (def, ns);
! 	return resolved.emplace_back (std::move (pair));
!       };
!     };
  
      std::vector<Error> value_errors;
      std::vector<Error> type_errors;
      std::vector<Error> macro_errors;
  
!     ctx.resolve_path (path, value_errors, Namespace::Values)
!       .map (pair_with_ns (Namespace::Values));
!     ctx.resolve_path (path, type_errors, Namespace::Types)
!       .map (pair_with_ns (Namespace::Types));
!     ctx.resolve_path (path, macro_errors, Namespace::Macros)
!       .map (pair_with_ns (Namespace::Macros));
  
      if (!value_errors.empty () && !type_errors.empty ()
  	&& !macro_errors.empty ())
--- 223,245 ----
    bool resolve_rebind_import (NodeId use_dec_id, TopLevel::ImportKind &&import);
  
    template <typename P>
!   std::vector<NameResolutionContext::NamespacedDefinition>
    resolve_path_in_all_ns (const P &path)
    {
!     std::vector<NameResolutionContext::NamespacedDefinition> resolved;
  
      std::vector<Error> value_errors;
      std::vector<Error> type_errors;
      std::vector<Error> macro_errors;
  
!     auto resolved_fn
!       = [&resolved] (NameResolutionContext::NamespacedDefinition new_def) {
! 	  resolved.emplace_back (new_def);
! 	};
! 
!     ctx.resolve_path (path, value_errors, Namespace::Values).map (resolved_fn);
!     ctx.resolve_path (path, type_errors, Namespace::Types).map (resolved_fn);
!     ctx.resolve_path (path, macro_errors, Namespace::Macros).map (resolved_fn);
  
      if (!value_errors.empty () && !type_errors.empty ()
  	&& !macro_errors.empty ())
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-finalize-imports-2.0.cc gcc-17-20260628/gcc/rust/resolve/rust-finalize-imports-2.0.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-finalize-imports-2.0.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-finalize-imports-2.0.cc	Sun Jun 28 22:32:10 2026
*************** GlobbingVisitor::visit (AST::ConstantIte
*** 143,148 ****
--- 143,170 ----
  }
  
  void
+ GlobbingVisitor::visit (AST::TypeAlias &type)
+ {
+   ctx.insert_globbed (type.get_new_type_name (), type.get_node_id (),
+ 		      Namespace::Types);
+ }
+ 
+ void
+ GlobbingVisitor::visit (AST::Trait &trait)
+ {
+   ctx.insert_globbed (trait.get_identifier (), trait.get_node_id (),
+ 		      Namespace::Types);
+ }
+ 
+ void
+ GlobbingVisitor::visit (AST::InherentImpl &impl)
+ {}
+ 
+ void
+ GlobbingVisitor::visit (AST::TraitImpl &impl)
+ {}
+ 
+ void
  GlobbingVisitor::visit (AST::ExternCrate &crate)
  {}
  
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-finalize-imports-2.0.h gcc-17-20260628/gcc/rust/resolve/rust-finalize-imports-2.0.h
*** gcc-17-20260621/gcc/rust/resolve/rust-finalize-imports-2.0.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-finalize-imports-2.0.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 48,53 ****
--- 48,57 ----
    void visit (AST::Enum &enum_item) override;
    void visit (AST::Union &union_item) override;
    void visit (AST::ConstantItem &const_item) override;
+   void visit (AST::TypeAlias &type) override;
+   void visit (AST::Trait &trait) override;
+   void visit (AST::InherentImpl &impl) override;
+   void visit (AST::TraitImpl &impl) override;
    void visit (AST::ExternCrate &crate) override;
    void visit (AST::UseDeclaration &use) override;
  
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-finalized-name-resolution-context.cc gcc-17-20260628/gcc/rust/resolve/rust-finalized-name-resolution-context.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-finalized-name-resolution-context.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/resolve/rust-finalized-name-resolution-context.cc	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,106 ----
+ // Copyright (C) 2020-2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #include "rust-finalized-name-resolution-context.h"
+ #include "expected.h"
+ #include "optional.h"
+ #include "rust-forever-stack.h"
+ 
+ namespace Rust {
+ namespace Resolver2_0 {
+ 
+ static FinalizedNameResolutionContext *instance = nullptr;
+ 
+ const FinalizedNameResolutionContext &
+ FinalizedNameResolutionContext::init (NameResolutionContext &ctx)
+ {
+   rust_assert (!instance);
+ 
+   instance = new FinalizedNameResolutionContext (ctx);
+ 
+   return *instance;
+ }
+ 
+ FinalizedNameResolutionContext &
+ FinalizedNameResolutionContext::get ()
+ {
+   rust_assert (instance);
+ 
+   return *instance;
+ }
+ 
+ void
+ FinalizedNameResolutionContext::map_usage (Usage usage, Definition definition,
+ 					   Namespace ns)
+ {
+   tl::expected<Definition, LookupFinalizeError> leaf_result
+     = tl::make_unexpected (LookupFinalizeError::NoDefinition);
+ 
+   switch (ns)
+     {
+     case Namespace::Values:
+       leaf_result = ctx.values.find_leaf_definition (definition.id);
+       break;
+     case Namespace::Types:
+       leaf_result = ctx.types.find_leaf_definition (definition.id);
+       break;
+     case Namespace::Labels:
+       leaf_result = ctx.labels.find_leaf_definition (definition.id);
+       break;
+     case Namespace::Macros:
+       leaf_result = ctx.macros.find_leaf_definition (definition.id);
+       break;
+     }
+ 
+   ctx.map_usage (usage, leaf_result.value_or (definition), ns);
+ }
+ 
+ tl::optional<NodeId>
+ FinalizedNameResolutionContext::lookup (NodeId usage, Namespace ns) const
+ {
+   return ctx.lookup (usage, ns);
+ }
+ 
+ tl::optional<NameResolutionContext::NSLookup>
+ FinalizedNameResolutionContext::lookup (NodeId usage, Namespace ns1,
+ 					Namespace ns2) const
+ {
+   return ctx.lookup (usage, ns1, ns2);
+ }
+ 
+ tl::optional<NameResolutionContext::NSLookup>
+ FinalizedNameResolutionContext::lookup (NodeId usage, Namespace ns1,
+ 					Namespace ns2, Namespace ns3) const
+ {
+   return ctx.lookup (usage, ns1, ns2, ns3);
+ }
+ 
+ Resolver::CanonicalPath
+ FinalizedNameResolutionContext::to_canonical_path (NodeId id,
+ 						   Namespace ns) const
+ {
+   return ctx.canonical_ctx.get_path (id, ns);
+ }
+ 
+ FinalizedNameResolutionContext::FinalizedNameResolutionContext (
+   NameResolutionContext &ctx)
+   : ctx (ctx)
+ {}
+ 
+ } // namespace Resolver2_0
+ } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-finalized-name-resolution-context.h gcc-17-20260628/gcc/rust/resolve/rust-finalized-name-resolution-context.h
*** gcc-17-20260621/gcc/rust/resolve/rust-finalized-name-resolution-context.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/resolve/rust-finalized-name-resolution-context.h	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,103 ----
+ // Copyright (C) 2020-2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef RUST_FINALIZED_NRCTX_H
+ #define RUST_FINALIZED_NRCTX_H
+ 
+ #include "rust-name-resolution-context.h"
+ #include "rust-rib.h"
+ 
+ namespace Rust {
+ namespace Resolver2_0 {
+ 
+ /**
+  * Once the name resolution pass is complete, later passes of the compiler can
+  * access it and still perform name resolution operations - for example, the
+  * typechecker is able to insert method resolution into the name resolution
+  * context.
+  *
+  * Using this type instead of `NameResolutionContext` provides better APIs which
+  * are more suited to late passes, which shouldn't have to think about the inner
+  * workings of name resolution too much.
+  *
+  * This class provides wrappers around all basic name resolution operations
+  * (insertion, lookup) as well as an unsafe way to access the underlying name
+  * resolution context.
+  */
+ class FinalizedNameResolutionContext
+ {
+ public:
+   /**
+    * Initialize the finalized name resolution context from a filled-out
+    * `NameResolutionContext`. This function should be called after name
+    * resolution is done, and `FinalizedNameResolutionContext` should be used
+    * instead of `NameResolutionContext` by later passes of the pipeline.
+    */
+   static const FinalizedNameResolutionContext &
+   init (NameResolutionContext &ctx);
+ 
+   /**
+    * Access the finalized name resolution context that you previously
+    * initialized with `FinalizedNameResolutionContext::init`
+    */
+   static FinalizedNameResolutionContext &get ();
+ 
+   /**
+    * The exact same method as NameResolutionContext::map_usage, but this one
+    * uses the leafmost definition by default - as we are past the name
+    * resolution stage, every import chain has been resolved, and can be followed
+    * to an actual definition instead of an import definition
+    */
+   void map_usage (Usage usage, Definition definition, Namespace ns);
+ 
+   /**
+    * Same as NameResolutionContext::lookup
+    */
+   tl::optional<NodeId> lookup (NodeId usage, Namespace ns) const;
+   tl::optional<NameResolutionContext::NSLookup>
+   lookup (NodeId usage, Namespace ns1, Namespace ns2) const;
+   tl::optional<NameResolutionContext::NSLookup>
+   lookup (NodeId usage, Namespace ns1, Namespace ns2, Namespace ns3) const;
+ 
+   /**
+    * Same as NameResolutionContext::to_canonical_path
+    */
+   Resolver::CanonicalPath to_canonical_path (NodeId id, Namespace ns) const;
+ 
+   /**
+    * Avoid using these and prefer adding wrapper methods to this class instead.
+    *
+    * Let's limit the number of times we use these, and eventually try to remove
+    * them.
+    */
+   const NameResolutionContext &get_underlying () const { return ctx; }
+   NameResolutionContext &get_underlying () { return ctx; }
+ 
+ private:
+   FinalizedNameResolutionContext (NameResolutionContext &ctx);
+   FinalizedNameResolutionContext (const FinalizedNameResolutionContext &other)
+     = default;
+ 
+   NameResolutionContext &ctx;
+ };
+ 
+ } // namespace Resolver2_0
+ 
+ } // namespace Rust
+ 
+ #endif //! RUST_FINALIZED_NRCTX_H
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-forever-stack.h gcc-17-20260628/gcc/rust/resolve/rust-forever-stack.h
*** gcc-17-20260621/gcc/rust/resolve/rust-forever-stack.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-forever-stack.h	Sun Jun 28 22:32:10 2026
*************** private:
*** 620,625 ****
--- 620,639 ----
    NodeId node_id;
  };
  
+ /**
+  * Error enum for finding leaf definitions in the resolved_nodes map
+  */
+ enum class LookupFinalizeError
+ {
+   // Impossible - we did not find any definition corresponding to a Usage.
+   // This is an internal compiler error
+   NoDefinition,
+   // There was a loop in the map, such as an import resolving to another
+   // import which eventually resolved to the original import. Report the
+   // error and stop the pipeline
+   Loop,
+ };
+ 
  template <Namespace N> class ForeverStack
  {
  public:
*************** public:
*** 862,882 ****
  
    Node &find_closest_module (Node &starting_point);
  
!   tl::optional<SegIterator> find_starting_point (
!     const std::vector<ResolutionPath::Segment> &segments,
!     std::reference_wrapper<Node> &starting_point,
!     std::function<void (Usage, Definition)> insert_segment_resolution,
!     std::vector<Error> &collect_errors);
! 
!   tl::optional<Node &> resolve_segments (
!     Node &starting_point, const std::vector<ResolutionPath::Segment> &segments,
!     SegIterator iterator,
!     std::function<void (Usage, Definition)> insert_segment_resolution,
!     std::vector<Error> &collect_errors);
! 
!   tl::optional<Rib::Definition> resolve_final_segment (Node &final_node,
! 						       std::string &seg_name,
! 						       bool is_lower_self);
  
    /* Helper functions for forward resolution (to_canonical_path, to_rib...) */
    struct DfsResult
--- 876,887 ----
  
    Node &find_closest_module (Node &starting_point);
  
!   tl::optional<SegIterator>
!   find_starting_point (const std::vector<ResolutionPath::Segment> &segments,
! 		       std::reference_wrapper<Node> &starting_point,
! 		       std::function<void (Usage, Definition, Namespace)>
! 			 insert_segment_resolution,
! 		       std::vector<Error> &collect_errors);
  
    /* Helper functions for forward resolution (to_canonical_path, to_rib...) */
    struct DfsResult
*************** public:
*** 916,921 ****
--- 921,963 ----
      return (definition_rib
  	    && definition_rib.value ().kind == Rib::Kind::ForwardTypeParamBan);
    }
+ 
+   void map_usage (Usage usage, Definition definition)
+   {
+     resolved_nodes.emplace (usage, definition);
+ 
+     // auto inserted = resolved_nodes.emplace (usage, definition);
+ 
+     // is that valid?
+     // FIXME: Yikes
+     // rust_assert (inserted.first->first.id == definition.id);
+   }
+ 
+   tl::optional<NodeId> lookup (NodeId usage) const
+   {
+     auto it = resolved_nodes.find (Usage (usage));
+ 
+     if (it == resolved_nodes.end ())
+       return tl::nullopt;
+ 
+     return it->second.id;
+   }
+ 
+   tl::expected<Definition, LookupFinalizeError>
+   find_leaf_definition (const NodeId &key) const;
+ 
+   // Flattening is not needed for now but should be used later?
+ #if 0
+   /**
+    * Look at NameResolutionContext::flatten - This is the inner working function
+    * which works on one specific namespace, while NameResolutionContext::flatten
+    * calls flatten for every namespace
+    */
+   void flatten ();
+ #endif
+ 
+   /* Map of "usage" nodes which have been resolved to a "definition" node */
+   std::map<Usage, Definition> resolved_nodes;
  };
  
  } // namespace Resolver2_0
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-forever-stack.hxx gcc-17-20260628/gcc/rust/resolve/rust-forever-stack.hxx
*** gcc-17-20260621/gcc/rust/resolve/rust-forever-stack.hxx	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-forever-stack.hxx	Sun Jun 28 22:32:10 2026
*************** tl::optional<typename std::vector<Resolu
*** 462,468 ****
  ForeverStack<N>::find_starting_point (
    const std::vector<ResolutionPath::Segment> &segments,
    std::reference_wrapper<Node> &starting_point,
!   std::function<void (Usage, Definition)> insert_segment_resolution,
    std::vector<Error> &collect_errors)
  {
    auto iterator = segments.begin ();
--- 462,468 ----
  ForeverStack<N>::find_starting_point (
    const std::vector<ResolutionPath::Segment> &segments,
    std::reference_wrapper<Node> &starting_point,
!   std::function<void (Usage, Definition, Namespace)> insert_segment_resolution,
    std::vector<Error> &collect_errors)
  {
    auto iterator = segments.begin ();
*************** ForeverStack<N>::find_starting_point (
*** 485,491 ****
  	{
  	  starting_point = root;
  	  insert_segment_resolution (Usage (seg.node_id),
! 				     Definition (starting_point.get ().id));
  	  iterator++;
  	  break;
  	}
--- 485,491 ----
  	{
  	  starting_point = root;
  	  insert_segment_resolution (Usage (seg.node_id),
! 				     Definition (starting_point.get ().id), N);
  	  iterator++;
  	  break;
  	}
*************** ForeverStack<N>::find_starting_point (
*** 494,500 ****
  	  // insert segment resolution and exit
  	  starting_point = find_closest_module (starting_point);
  	  insert_segment_resolution (Usage (seg.node_id),
! 				     Definition (starting_point.get ().id));
  	  iterator++;
  	  break;
  	}
--- 494,500 ----
  	  // insert segment resolution and exit
  	  starting_point = find_closest_module (starting_point);
  	  insert_segment_resolution (Usage (seg.node_id),
! 				     Definition (starting_point.get ().id), N);
  	  iterator++;
  	  break;
  	}
*************** ForeverStack<N>::find_starting_point (
*** 513,519 ****
  	    = find_closest_module (starting_point.get ().parent.value ());
  
  	  insert_segment_resolution (Usage (seg.node_id),
! 				     Definition (starting_point.get ().id));
  	  continue;
  	}
  
--- 513,519 ----
  	    = find_closest_module (starting_point.get ().parent.value ());
  
  	  insert_segment_resolution (Usage (seg.node_id),
! 				     Definition (starting_point.get ().id), N);
  	  continue;
  	}
  
*************** ForeverStack<N>::find_starting_point (
*** 527,673 ****
  }
  
  template <Namespace N>
- tl::optional<typename ForeverStack<N>::Node &>
- ForeverStack<N>::resolve_segments (
-   Node &starting_point, const std::vector<ResolutionPath::Segment> &segments,
-   typename std::vector<ResolutionPath::Segment>::const_iterator iterator,
-   std::function<void (Usage, Definition)> insert_segment_resolution,
-   std::vector<Error> &collect_errors)
- {
-   Node *current_node = &starting_point;
-   for (; !is_last (iterator, segments); iterator++)
-     {
-       auto &seg = *iterator;
- 
-       std::string str = seg.name;
-       rust_debug ("[ARTHUR]: resolving segment part: %s", str.c_str ());
- 
-       // check that we don't encounter *any* leading keywords afterwards
-       if (check_leading_kw_at_start (collect_errors, seg,
- 				     seg.is_crate_path_seg ()
- 				       || seg.is_super_path_seg ()
- 				       || seg.is_lower_self_seg ()))
- 	return tl::nullopt;
- 
-       tl::optional<std::reference_wrapper<Node>> child = tl::nullopt;
- 
-       /*
-        * On every iteration this loop either
-        *
-        * 1. terminates
-        *
-        * 2. decreases the depth of the node pointed to by current_node until
-        *    current_node reaches the root
-        *
-        * 3. If the root node is reached, and we were not able to resolve the
-        *    segment, we search the prelude rib for the segment, by setting
-        *    current_node to point to the prelude, and toggling the
-        *    searched_prelude boolean to true. If current_node is the prelude
-        *    rib, and searched_prelude is true, we will exit.
-        *
-        * This ensures termination.
-        *
-        */
-       bool searched_prelude = false;
-       while (true)
- 	{
- 	  if (is_start (iterator, segments)
- 	      && current_node->rib.kind == Rib::Kind::TraitOrImpl)
- 	    {
- 	      // we can't reference associated types/functions like this
- 	      current_node = &current_node->parent.value ();
- 	      continue;
- 	    }
- 
- 	  // may set the value of child
- 	  for (auto &kv : current_node->children)
- 	    {
- 	      auto &link = kv.first;
- 
- 	      if (link.path.map_or (
- 		    [&str] (Identifier path) {
- 		      auto &path_str = path.as_string ();
- 		      return str == path_str;
- 		    },
- 		    false))
- 		{
- 		  child = kv.second;
- 		  break;
- 		}
- 	    }
- 
- 	  if (child.has_value ())
- 	    {
- 	      break;
- 	    }
- 
- 	  auto rib_lookup = current_node->rib.get (seg.name);
- 	  if (rib_lookup && !rib_lookup->is_ambiguous ())
- 	    {
- 	      if (Analysis::Mappings::get ()
- 		    .lookup_glob_container (rib_lookup->get_node_id ())
- 		    .has_value ())
- 		{
- 		  child = dfs_node (root, rib_lookup->get_node_id ()).value ();
- 		  break;
- 		}
- 	      else
- 		{
- 		  insert_segment_resolution (Usage (seg.node_id),
- 					     Definition (
- 					       rib_lookup->get_node_id ()));
- 		  return tl::nullopt;
- 		}
- 	    }
- 
- 	  if (current_node->is_root () && !searched_prelude)
- 	    {
- 	      searched_prelude = true;
- 	      current_node = &lang_prelude;
- 	      continue;
- 	    }
- 
- 	  if (!is_start (iterator, segments)
- 	      || current_node->rib.kind == Rib::Kind::Module
- 	      || current_node->is_prelude ())
- 	    {
- 	      return tl::nullopt;
- 	    }
- 
- 	  current_node = &current_node->parent.value ();
- 	}
- 
-       // if child didn't point to a value
-       // the while loop above would have returned or kept looping
-       current_node = &child->get ();
-       insert_segment_resolution (Usage (seg.node_id),
- 				 Definition (current_node->id));
-     }
- 
-   return *current_node;
- }
- 
- template <>
- inline tl::optional<Rib::Definition>
- ForeverStack<Namespace::Types>::resolve_final_segment (Node &final_node,
- 						       std::string &seg_name,
- 						       bool is_lower_self)
- {
-   if (is_lower_self)
-     return Rib::Definition::NonShadowable (final_node.id);
-   else
-     return final_node.rib.get (seg_name);
- }
- 
- template <Namespace N>
- tl::optional<Rib::Definition>
- ForeverStack<N>::resolve_final_segment (Node &final_node, std::string &seg_name,
- 					bool is_lower_self)
- {
-   return final_node.rib.get (seg_name);
- }
- 
- template <Namespace N>
  tl::optional<typename ForeverStack<N>::DfsResult>
  ForeverStack<N>::dfs (ForeverStack<N>::Node &starting_point, NodeId to_find)
  {
--- 527,532 ----
*************** ForeverStack<N>::is_module_descendant (N
*** 874,879 ****
--- 733,801 ----
    return dfs_node (dfs_node (root, parent).value (), child).has_value ();
  }
  
+ static tl::expected<Definition, LookupFinalizeError>
+ find_leaf_definition_inner (const Usage &key,
+ 			    const std::map<Usage, Definition> &resolved_nodes,
+ 			    std::set<Usage> &keys_seen)
+ {
+   auto original_definition = resolved_nodes.find (key);
+   auto possible_import = Usage (original_definition->second.id);
+ 
+   if (original_definition == resolved_nodes.end ())
+     return tl::make_unexpected (LookupFinalizeError::NoDefinition);
+ 
+   if (!keys_seen.insert (key).second)
+     return tl::make_unexpected (LookupFinalizeError::Loop);
+ 
+   if (resolved_nodes.find (possible_import) == resolved_nodes.end ())
+     return original_definition->second;
+ 
+   // We're dealing with an import - a reference to another
+   // definition. Go through the chain and update the original key's
+   // corresponding definition.
+   return find_leaf_definition_inner (possible_import, resolved_nodes,
+ 				     keys_seen);
+ }
+ 
+ template <Namespace N>
+ tl::expected<Definition, LookupFinalizeError>
+ ForeverStack<N>::find_leaf_definition (const NodeId &key) const
+ {
+   std::set<Usage> keys_seen;
+ 
+   return find_leaf_definition_inner (Usage (key), resolved_nodes, keys_seen);
+ }
+ 
+ #if 0
+ template <Namespace N>
+ void
+ ForeverStack<N>::flatten ()
+ {
+   for (auto &k_v : resolved_nodes)
+     {
+       // Loop detection
+       auto keys_seen = std::set<Usage> ();
+ 
+       auto result
+ 	= find_leaf_definition_inner (k_v.first, resolved_nodes, keys_seen);
+ 
+       if (!result)
+ 	{
+ 	  // Trigger an ICE if we haven't found a definition because that's
+ 	  // really weird
+ 	  rust_assert (result.error () != LookupFinalizeError::NoDefinition);
+ 
+ 	  // FIXME: This needs to be improved and tested, but later
+ 	  rust_error_at (UNDEF_LOCATION, "import loop");
+ 	  continue;
+ 	}
+ 
+       // Replace the Definition for this Usage in the map. This may be a no-op.
+       k_v.second = result.value ();
+     }
+ }
+ #endif
+ 
  // FIXME: Can we add selftests?
  
  } // namespace Resolver2_0
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-immutable-name-resolution-context.cc gcc-17-20260628/gcc/rust/resolve/rust-immutable-name-resolution-context.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-immutable-name-resolution-context.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-immutable-name-resolution-context.cc	Thu Jan  1 00:00:00 1970
***************
*** 1,56 ****
- // Copyright (C) 2020-2026 Free Software Foundation, Inc.
- 
- // This file is part of GCC.
- 
- // GCC is free software; you can redistribute it and/or modify it under
- // the terms of the GNU General Public License as published by the Free
- // Software Foundation; either version 3, or (at your option) any later
- // version.
- 
- // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- // WARRANTY; without even the implied warranty of MERCHANTABILITY or
- // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- // for more details.
- 
- // You should have received a copy of the GNU General Public License
- // along with GCC; see the file COPYING3.  If not see
- // <http://www.gnu.org/licenses/>.
- 
- #include "rust-immutable-name-resolution-context.h"
- 
- namespace Rust {
- namespace Resolver2_0 {
- 
- static ImmutableNameResolutionContext *instance = nullptr;
- 
- const ImmutableNameResolutionContext &
- ImmutableNameResolutionContext::init (const NameResolutionContext &ctx)
- {
-   rust_assert (!instance);
- 
-   instance = new ImmutableNameResolutionContext (ctx);
- 
-   return *instance;
- }
- 
- const ImmutableNameResolutionContext &
- ImmutableNameResolutionContext::get ()
- {
-   rust_assert (instance);
- 
-   return *instance;
- }
- 
- const NameResolutionContext &
- ImmutableNameResolutionContext::resolver () const
- {
-   return ctx;
- }
- 
- ImmutableNameResolutionContext::ImmutableNameResolutionContext (
-   const NameResolutionContext &ctx)
-   : ctx (ctx)
- {}
- 
- } // namespace Resolver2_0
- } // namespace Rust
--- 0 ----
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-immutable-name-resolution-context.h gcc-17-20260628/gcc/rust/resolve/rust-immutable-name-resolution-context.h
*** gcc-17-20260621/gcc/rust/resolve/rust-immutable-name-resolution-context.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-immutable-name-resolution-context.h	Thu Jan  1 00:00:00 1970
***************
*** 1,55 ****
- // Copyright (C) 2020-2026 Free Software Foundation, Inc.
- 
- // This file is part of GCC.
- 
- // GCC is free software; you can redistribute it and/or modify it under
- // the terms of the GNU General Public License as published by the Free
- // Software Foundation; either version 3, or (at your option) any later
- // version.
- 
- // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- // WARRANTY; without even the implied warranty of MERCHANTABILITY or
- // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- // for more details.
- 
- // You should have received a copy of the GNU General Public License
- // along with GCC; see the file COPYING3.  If not see
- // <http://www.gnu.org/licenses/>.
- 
- #ifndef RUST_IMMUTABLE_NRCTX_H
- #define RUST_IMMUTABLE_NRCTX_H
- 
- #include "rust-name-resolution-context.h"
- 
- namespace Rust {
- namespace Resolver2_0 {
- 
- /**
-  * Once the name resolution pass is complete, the typechecker can access it
-  *
-  * FIXME: More documentation
-  */
- class ImmutableNameResolutionContext
- {
- public:
-   /** FIXME: Documentation */
-   static const ImmutableNameResolutionContext &
-   init (const NameResolutionContext &ctx);
- 
-   /** FIXME: Documentation */
-   static const ImmutableNameResolutionContext &get ();
- 
-   const NameResolutionContext &resolver () const;
- 
- private:
-   ImmutableNameResolutionContext (const NameResolutionContext &ctx);
-   ImmutableNameResolutionContext (const ImmutableNameResolutionContext &other)
-     = default;
- 
-   const NameResolutionContext &ctx;
- };
- 
- } // namespace Resolver2_0
- } // namespace Rust
- 
- #endif //! RUST_IMMUTABLE_NRCTX_H
--- 0 ----
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-late-name-resolver-2.0.cc gcc-17-20260628/gcc/rust/resolve/rust-late-name-resolver-2.0.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-late-name-resolver-2.0.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-late-name-resolver-2.0.cc	Sun Jun 28 22:32:10 2026
***************
*** 26,31 ****
--- 26,32 ----
  #include "rust-name-resolution-context.h"
  #include "rust-resolve-builtins.h"
  #include "rust-path.h"
+ #include "rust-rib.h"
  #include "rust-system.h"
  #include "rust-tyty.h"
  #include "rust-hir-type-check.h"
*************** visit_identifier_as_pattern (NameResolut
*** 189,195 ****
      {
        auto res = ctx.values.get (ident);
        rust_assert (res.has_value () && !res->is_ambiguous ());
!       ctx.map_usage (Usage (node_id), Definition (res->get_node_id ()));
      }
    else
      {
--- 190,197 ----
      {
        auto res = ctx.values.get (ident);
        rust_assert (res.has_value () && !res->is_ambiguous ());
!       ctx.map_usage (Usage (node_id), Definition (res->get_node_id ()),
! 		     Namespace::Values);
      }
    else
      {
*************** Late::visit (AST::StructPatternFieldIden
*** 244,250 ****
    if (auto resolved = ctx.resolve_path (path, Namespace::Types))
      {
        ctx.map_usage (Usage (field.get_node_id ()),
! 		     Definition (resolved->get_node_id ()));
        return;
      }
  
--- 246,253 ----
    if (auto resolved = ctx.resolve_path (path, Namespace::Types))
      {
        ctx.map_usage (Usage (field.get_node_id ()),
! 		     Definition (resolved->definition.get_node_id ()),
! 		     Namespace::Types);
        return;
      }
  
*************** Late::visit (AST::BreakExpr &expr)
*** 299,305 ****
  void
  Late::visit (AST::LoopLabel &label)
  {
!   auto resolved = ctx.lookup (label.get_lifetime ().get_node_id ());
    if (resolved.has_value ())
      return;
    auto &lifetime = label.get_lifetime ();
--- 302,309 ----
  void
  Late::visit (AST::LoopLabel &label)
  {
!   auto resolved
!     = ctx.lookup (label.get_lifetime ().get_node_id (), Namespace::Labels);
    if (resolved.has_value ())
      return;
    auto &lifetime = label.get_lifetime ();
*************** Late::resolve_label (AST::Lifetime &life
*** 314,320 ****
      {
        if (resolved->get_node_id () != lifetime.get_node_id ())
  	ctx.map_usage (Usage (lifetime.get_node_id ()),
! 		       Definition (resolved->get_node_id ()));
      }
    else
      rust_error_at (lifetime.get_locus (), ErrorCode::E0426,
--- 318,325 ----
      {
        if (resolved->get_node_id () != lifetime.get_node_id ())
  	ctx.map_usage (Usage (lifetime.get_node_id ()),
! 		       Definition (resolved->get_node_id ()),
! 		       Namespace::Labels);
      }
    else
      rust_error_at (lifetime.get_locus (), ErrorCode::E0426,
*************** Late::visit (AST::IdentifierExpr &expr)
*** 337,350 ****
--- 342,358 ----
    // TODO: same thing as visit(PathInExpression) here?
  
    tl::optional<Rib::Definition> resolved = tl::nullopt;
+   tl::optional<Namespace> ns = tl::nullopt;
  
    if (auto value = ctx.values.get (expr.get_ident ()))
      {
        resolved = value;
+       ns = Namespace::Values;
      }
    else if (auto type = ctx.types.get (expr.get_ident ()))
      {
        resolved = type;
+       ns = Namespace::Types;
      }
    else if (funny_error)
      {
*************** Late::visit (AST::IdentifierExpr &expr)
*** 359,373 ****
--- 367,384 ----
        if (auto type = ctx.types.get_lang_prelude (expr.get_ident ()))
  	{
  	  resolved = type;
+ 	  ns = Namespace::Types;
  	}
        else if (!resolved && ctx.prelude)
  	{
  	  resolved
  	    = ctx.values.get_from_prelude (*ctx.prelude, expr.get_ident ());
+ 	  ns = Namespace::Values;
  
  	  if (!resolved)
  	    resolved
  	      = ctx.types.get_from_prelude (*ctx.prelude, expr.get_ident ());
+ 	  ns = Namespace::Types;
  	}
  
        if (!resolved)
*************** Late::visit (AST::IdentifierExpr &expr)
*** 387,393 ****
      }
  
    ctx.map_usage (Usage (expr.get_node_id ()),
! 		 Definition (resolved->get_node_id ()));
  
    // For empty types, do we perform a lookup in ctx.types or should the
    // toplevel instead insert a name in ctx.values? (like it currently does)
--- 398,404 ----
      }
  
    ctx.map_usage (Usage (expr.get_node_id ()),
! 		 Definition (resolved->get_node_id ()), ns.value ());
  
    // For empty types, do we perform a lookup in ctx.types or should the
    // toplevel instead insert a name in ctx.values? (like it currently does)
*************** Late::visit (AST::StructExprFieldIdentif
*** 418,424 ****
      }
  
    ctx.map_usage (Usage (expr.get_node_id ()),
! 		 Definition (resolved->get_node_id ()));
  }
  
  void
--- 429,435 ----
      }
  
    ctx.map_usage (Usage (expr.get_node_id ()),
! 		 Definition (resolved->get_node_id ()), Namespace::Values);
  }
  
  void
*************** Late::visit (AST::PathInExpression &expr
*** 430,455 ****
  
    DefaultResolver::visit (expr);
  
    if (expr.is_lang_item ())
      {
        ctx.map_usage (Usage (expr.get_node_id ()),
  		     Definition (Analysis::Mappings::get ().get_lang_item_node (
! 		       expr.get_lang_item ())));
        return;
      }
  
    auto resolved = ctx.resolve_path (expr, Namespace::Values, Namespace::Types);
  
    if (!resolved)
      {
!       if (!ctx.lookup (expr.get_segments ().front ().get_node_id ()))
  	rust_error_at (expr.get_locus (), ErrorCode::E0433,
  		       "Cannot find path %qs in this scope",
  		       expr.as_simple_path ().as_string ().c_str ());
        return;
      }
  
!   if (resolved->is_ambiguous ())
      {
        rust_error_at (expr.get_locus (), ErrorCode::E0659, "%qs is ambiguous",
  		     expr.as_string ().c_str ());
--- 441,470 ----
  
    DefaultResolver::visit (expr);
  
+   // TODO: do we need a namespace associated with each lang item?
    if (expr.is_lang_item ())
      {
        ctx.map_usage (Usage (expr.get_node_id ()),
  		     Definition (Analysis::Mappings::get ().get_lang_item_node (
! 		       expr.get_lang_item ())),
! 		     Namespace::Values);
        return;
      }
  
+   // TODO: we need to know which namespace that was in actually
    auto resolved = ctx.resolve_path (expr, Namespace::Values, Namespace::Types);
  
    if (!resolved)
      {
!       if (!ctx.lookup (expr.get_segments ().front ().get_node_id (),
! 		       Namespace::Values, Namespace::Types))
  	rust_error_at (expr.get_locus (), ErrorCode::E0433,
  		       "Cannot find path %qs in this scope",
  		       expr.as_simple_path ().as_string ().c_str ());
        return;
      }
  
!   if (resolved->definition.is_ambiguous ())
      {
        rust_error_at (expr.get_locus (), ErrorCode::E0659, "%qs is ambiguous",
  		     expr.as_string ().c_str ());
*************** Late::visit (AST::PathInExpression &expr
*** 457,463 ****
      }
  
    ctx.map_usage (Usage (expr.get_node_id ()),
! 		 Definition (resolved->get_node_id ()));
  }
  
  void
--- 472,479 ----
      }
  
    ctx.map_usage (Usage (expr.get_node_id ()),
! 		 Definition (resolved->definition.get_node_id ()),
! 		 resolved->ns);
  }
  
  void
*************** resolve_type_path_like (NameResolutionCo
*** 498,518 ****
  
    if (!resolved.has_value ())
      {
!       if (!ctx.lookup (unwrap_segment_node_id (type.get_segments ().front ())))
  	rust_error_at (type.get_locus (), ErrorCode::E0412,
  		       "could not resolve type path %qs",
  		       unwrap_segment_error_string (type).c_str ());
        return;
      }
  
!   if (resolved->is_ambiguous ())
      {
        rust_error_at (type.get_locus (), ErrorCode::E0659, "%qs is ambiguous",
  		     unwrap_segment_error_string (type).c_str ());
        return;
      }
  
!   if (ctx.types.forward_declared (resolved->get_node_id (),
  				  type.get_node_id ()))
      {
        rust_error_at (type.get_locus (), ErrorCode::E0128,
--- 514,535 ----
  
    if (!resolved.has_value ())
      {
!       if (!ctx.lookup (unwrap_segment_node_id (type.get_segments ().front ()),
! 		       Namespace::Types))
  	rust_error_at (type.get_locus (), ErrorCode::E0412,
  		       "could not resolve type path %qs",
  		       unwrap_segment_error_string (type).c_str ());
        return;
      }
  
!   if (resolved->definition.is_ambiguous ())
      {
        rust_error_at (type.get_locus (), ErrorCode::E0659, "%qs is ambiguous",
  		     unwrap_segment_error_string (type).c_str ());
        return;
      }
  
!   if (ctx.types.forward_declared (resolved->definition.get_node_id (),
  				  type.get_node_id ()))
      {
        rust_error_at (type.get_locus (), ErrorCode::E0128,
*************** resolve_type_path_like (NameResolutionCo
*** 520,527 ****
  		     "declared identifiers");
      }
  
    ctx.map_usage (Usage (type.get_node_id ()),
! 		 Definition (resolved->get_node_id ()));
  }
  
  void
--- 537,573 ----
  		     "declared identifiers");
      }
  
+   if (Analysis::Mappings::get ().is_module (
+ 	resolved->definition.get_node_id ()))
+     {
+       if (type.get_segments ().size () == 1)
+ 	{
+ 	  if (auto resolved
+ 	      = Builtins::find_builtin_node_id (type.as_string ()))
+ 	    {
+ 	      ctx.map_usage (Usage (type.get_node_id ()),
+ 			     Definition (*resolved), Namespace::Types);
+ 
+ 	      // In that specific case, we also override the segment resolution
+ 	      // as it causes issues later down the line during typechecking
+ 	      ctx.map_usage (Usage (unwrap_segment_node_id (
+ 			       type.get_segments ().front ())),
+ 			     Definition (*resolved), Namespace::Types);
+ 	    }
+ 	  else
+ 	    {
+ 	      rust_error_at (type.get_locus (), ErrorCode::E0573,
+ 			     "expected type, found module %qs",
+ 			     unwrap_segment_error_string (type).c_str ());
+ 	    }
+ 	}
+ 
+       return;
+     }
+ 
    ctx.map_usage (Usage (type.get_node_id ()),
! 		 Definition (resolved->definition.get_node_id ()),
! 		 Namespace::Types);
  }
  
  void
*************** Late::visit (AST::Visibility &vis)
*** 578,591 ****
      }
  
    // TODO: is this possible?
!   if (res->is_ambiguous ())
      {
        rust_error_at (path.get_locus (), ErrorCode::E0659, "%qs is ambiguous",
  		     path.as_string ().c_str ());
        return;
      }
  
!   ctx.map_usage (Usage (path.get_node_id ()), Definition (res->get_node_id ()));
  }
  
  void
--- 624,638 ----
      }
  
    // TODO: is this possible?
!   if (res->definition.is_ambiguous ())
      {
        rust_error_at (path.get_locus (), ErrorCode::E0659, "%qs is ambiguous",
  		     path.as_string ().c_str ());
        return;
      }
  
!   ctx.map_usage (Usage (path.get_node_id ()),
! 		 Definition (res->definition.get_node_id ()), res->ns);
  }
  
  void
*************** Late::visit (AST::Trait &trait)
*** 596,602 ****
    // which is then resolved to the node id of trait
    // we set up the latter mapping here
    ctx.map_usage (Usage (trait.get_implicit_self ().get_node_id ()),
! 		 Definition (trait.get_node_id ()));
  
    DefaultResolver::visit (trait);
  }
--- 643,649 ----
    // which is then resolved to the node id of trait
    // we set up the latter mapping here
    ctx.map_usage (Usage (trait.get_implicit_self ().get_node_id ()),
! 		 Definition (trait.get_node_id ()), Namespace::Types);
  
    DefaultResolver::visit (trait);
  }
*************** Late::visit (AST::StructExprStructFields
*** 646,652 ****
      }
  
    ctx.map_usage (Usage (path.get_node_id ()),
! 		 Definition (resolved->get_node_id ()));
  }
  
  // needed because Late::visit (AST::GenericArg &) is non-virtual
--- 693,700 ----
      }
  
    ctx.map_usage (Usage (path.get_node_id ()),
! 		 Definition (resolved->definition.get_node_id ()),
! 		 Namespace::Types);
  }
  
  // needed because Late::visit (AST::GenericArg &) is non-virtual
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-name-resolution-context.cc gcc-17-20260628/gcc/rust/resolve/rust-name-resolution-context.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-name-resolution-context.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-name-resolution-context.cc	Sun Jun 28 22:32:10 2026
***************
*** 19,24 ****
--- 19,26 ----
  #include "rust-name-resolution-context.h"
  #include "optional.h"
  #include "rust-mapping-common.h"
+ #include "rust-rib.h"
+ #include "rust-system.h"
  
  namespace Rust {
  namespace Resolver2_0 {
*************** BindingLayer::get_source () const
*** 130,136 ****
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordCrateRoot::as_path (const NameResolutionContext &)
  {
    auto ret = Resolver::CanonicalPath::new_seg (node_id, seg);
    ret.set_crate_num (crate_num);
--- 132,139 ----
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordCrateRoot::as_path (const NameResolutionContext &,
! 				       Namespace ns)
  {
    auto ret = Resolver::CanonicalPath::new_seg (node_id, seg);
    ret.set_crate_num (crate_num);
*************** CanonicalPathRecordCrateRoot::as_path (c
*** 138,156 ****
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordNormal::as_path (const NameResolutionContext &ctx)
  {
!   auto parent_path = get_parent ().as_path (ctx);
    return parent_path.append (Resolver::CanonicalPath::new_seg (node_id, seg));
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordLookup::as_path (const NameResolutionContext &ctx)
  {
    if (!cache)
      {
!       auto res = ctx.lookup (lookup_id).and_then (
! 	[&ctx] (NodeId id) { return ctx.canonical_ctx.get_record_opt (id); });
  
        if (!res)
  	{
--- 141,163 ----
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordNormal::as_path (const NameResolutionContext &ctx,
! 				    Namespace ns)
  {
!   auto parent_path = get_parent ().as_path (ctx, ns);
    return parent_path.append (Resolver::CanonicalPath::new_seg (node_id, seg));
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordLookup::as_path (const NameResolutionContext &ctx,
! 				    Namespace ns)
  {
    if (!cache)
      {
!       // TODO: what namespace do we use here? can the caller give one?
!       auto res = ctx.lookup (lookup_id, ns).and_then ([&ctx] (NodeId id) {
! 	return ctx.canonical_ctx.get_record_opt (id);
!       });
  
        if (!res)
  	{
*************** CanonicalPathRecordLookup::as_path (cons
*** 163,187 ****
  
        cache = res.value ();
      }
!   return cache->as_path (ctx);
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordImpl::as_path (const NameResolutionContext &ctx)
  {
!   auto parent_path = get_parent ().as_path (ctx);
    return parent_path.append (
      Resolver::CanonicalPath::inherent_impl_seg (impl_id,
! 						type_record.as_path (ctx)));
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordTraitImpl::as_path (const NameResolutionContext &ctx)
  {
!   auto parent_path = get_parent ().as_path (ctx);
    return parent_path.append (
      Resolver::CanonicalPath::trait_impl_projection_seg (
!       impl_id, trait_path_record.as_path (ctx), type_record.as_path (ctx)));
  }
  
  NameResolutionContext::NameResolutionContext ()
--- 170,198 ----
  
        cache = res.value ();
      }
!   return cache->as_path (ctx, ns);
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordImpl::as_path (const NameResolutionContext &ctx,
! 				  Namespace ns)
  {
!   auto parent_path = get_parent ().as_path (ctx, ns);
    return parent_path.append (
      Resolver::CanonicalPath::inherent_impl_seg (impl_id,
! 						type_record.as_path (ctx, ns)));
  }
  
  Resolver::CanonicalPath
! CanonicalPathRecordTraitImpl::as_path (const NameResolutionContext &ctx,
! 				       Namespace ns)
  {
!   // Maybe this doesn't need the namespace and will always be in the types NS?
!   auto parent_path = get_parent ().as_path (ctx, ns);
    return parent_path.append (
      Resolver::CanonicalPath::trait_impl_projection_seg (
!       impl_id, trait_path_record.as_path (ctx, ns),
!       type_record.as_path (ctx, ns)));
  }
  
  NameResolutionContext::NameResolutionContext ()
*************** NameResolutionContext::insert_globbed (I
*** 253,276 ****
      }
  }
  
  void
! NameResolutionContext::map_usage (Usage usage, Definition definition)
  {
!   auto inserted = resolved_nodes.emplace (usage, definition).second;
! 
!   // is that valid?
!   rust_assert (inserted);
  }
  
  tl::optional<NodeId>
! NameResolutionContext::lookup (NodeId usage) const
  {
!   auto it = resolved_nodes.find (Usage (usage));
  
!   if (it == resolved_nodes.end ())
!     return tl::nullopt;
  
!   return it->second.id;
  }
  
  void
--- 264,330 ----
      }
  }
  
+ // TODO: Maybe this should take a NamespacedDefinition as argument?
  void
! NameResolutionContext::map_usage (Usage usage, Definition definition,
! 				  Namespace ns)
  {
!   switch (ns)
!     {
!     case Namespace::Values:
!       values.map_usage (usage, definition);
!       break;
!     case Namespace::Types:
!       types.map_usage (usage, definition);
!       break;
!     case Namespace::Labels:
!       labels.map_usage (usage, definition);
!       break;
!     case Namespace::Macros:
!       macros.map_usage (usage, definition);
!       break;
!     }
  }
  
  tl::optional<NodeId>
! NameResolutionContext::lookup (NodeId usage, Namespace ns) const
  {
!   switch (ns)
!     {
!     case Namespace::Values:
!       return values.lookup (usage);
!     case Namespace::Types:
!       return types.lookup (usage);
!     case Namespace::Labels:
!       return labels.lookup (usage);
!     case Namespace::Macros:
!       return macros.lookup (usage);
!     default:
!       rust_unreachable ();
!     }
! }
  
! tl::optional<NameResolutionContext::NSLookup>
! NameResolutionContext::lookup (NodeId usage, Namespace ns1, Namespace ns2) const
! {
!   if (auto result = lookup (usage, ns1))
!     return NSLookup (*result, ns1);
  
!   return lookup (usage, ns2).map ([&ns2] (NodeId id) {
!     return NSLookup (id, ns2);
!   });
! }
! 
! tl::optional<NameResolutionContext::NSLookup>
! NameResolutionContext::lookup (NodeId usage, Namespace ns1, Namespace ns2,
! 			       Namespace ns3) const
! {
!   if (auto result = lookup (usage, ns1, ns2))
!     return result;
! 
!   return lookup (usage, ns3).map ([&ns3] (NodeId id) {
!     return NSLookup (id, ns3);
!   });
  }
  
  void
*************** NameResolutionContext::scoped (Rib::Kind
*** 330,334 ****
--- 384,399 ----
      }
  }
  
+ #if 0
+ void
+ NameResolutionContext::flatten ()
+ {
+   values.flatten ();
+   types.flatten ();
+   macros.flatten ();
+   labels.flatten ();
+ }
+ #endif
+ 
  } // namespace Resolver2_0
  } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-name-resolution-context.h gcc-17-20260628/gcc/rust/resolve/rust-name-resolution-context.h
*** gcc-17-20260621/gcc/rust/resolve/rust-name-resolution-context.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-name-resolution-context.h	Sun Jun 28 22:32:10 2026
*************** class NameResolutionContext;
*** 223,229 ****
  class CanonicalPathRecord
  {
  public:
!   virtual Resolver::CanonicalPath as_path (const NameResolutionContext &) = 0;
  
    virtual bool is_root () const = 0;
  
--- 223,231 ----
  class CanonicalPathRecord
  {
  public:
!   virtual Resolver::CanonicalPath as_path (const NameResolutionContext &,
! 					   Namespace ns)
!     = 0;
  
    virtual bool is_root () const = 0;
  
*************** public:
*** 254,260 ****
      crate_num = Analysis::Mappings::get ().lookup_crate_num (node_id).value ();
    }
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &) override;
  
    bool is_root () const override final { return true; }
  
--- 256,263 ----
      crate_num = Analysis::Mappings::get ().lookup_crate_num (node_id).value ();
    }
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &,
! 				   Namespace ns) override;
  
    bool is_root () const override final { return true; }
  
*************** public:
*** 275,281 ****
      rust_assert (!Analysis::Mappings::get ().node_is_crate (node_id));
    }
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &) override;
  
  private:
    NodeId node_id;
--- 278,285 ----
      rust_assert (!Analysis::Mappings::get ().node_is_crate (node_id));
    }
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &,
! 				   Namespace ns) override;
  
  private:
    NodeId node_id;
*************** public:
*** 289,295 ****
      : lookup_id (lookup_id), cache (nullptr)
    {}
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &) override;
  
    bool is_root () const override final { return true; }
  
--- 293,300 ----
      : lookup_id (lookup_id), cache (nullptr)
    {}
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &,
! 				   Namespace ns) override;
  
    bool is_root () const override final { return true; }
  
*************** public:
*** 307,313 ****
        type_record (type_id)
    {}
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &) override;
  
  private:
    NodeId impl_id;
--- 312,319 ----
        type_record (type_id)
    {}
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &,
! 				   Namespace ns) override;
  
  private:
    NodeId impl_id;
*************** public:
*** 323,329 ****
        type_record (type_id), trait_path_record (trait_path_id)
    {}
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &) override;
  
  private:
    NodeId impl_id;
--- 329,336 ----
        type_record (type_id), trait_path_record (trait_path_id)
    {}
  
!   Resolver::CanonicalPath as_path (const NameResolutionContext &,
! 				   Namespace ns) override;
  
  private:
    NodeId impl_id;
*************** public:
*** 338,346 ****
      : current_record (nullptr), nr_ctx (&ctx)
    {}
  
!   Resolver::CanonicalPath get_path (NodeId id) const
    {
!     return get_record (id).as_path (*nr_ctx);
    }
  
    CanonicalPathRecord &get_record (NodeId id) const
--- 345,353 ----
      : current_record (nullptr), nr_ctx (&ctx)
    {}
  
!   Resolver::CanonicalPath get_path (NodeId id, Namespace ns) const
    {
!     return get_record (id).as_path (*nr_ctx, ns);
    }
  
    CanonicalPathRecord &get_record (NodeId id) const
*************** public:
*** 517,562 ****
  
    CanonicalPathCtx canonical_ctx;
  
!   // TODO: Rename
!   // TODO: Use newtype pattern for Usage and Definition
!   void map_usage (Usage usage, Definition definition);
  
!   tl::optional<NodeId> lookup (NodeId usage) const;
  
!   Resolver::CanonicalPath to_canonical_path (NodeId id) const
    {
!     return canonical_ctx.get_path (id);
    }
  
!   tl::optional<Rib::Definition>
    resolve_path (const ResolutionPath &path, ResolutionMode mode,
  		std::vector<Error> &collect_errors, Namespace ns)
    {
!     std::function<void (Usage, Definition)> insert_segment_resolution
!       = [this] (Usage seg_id, Definition id) {
! 	  if (resolved_nodes.find (seg_id) == resolved_nodes.end ())
! 	    map_usage (seg_id, id);
  	};
  
!     tl::optional<Rib::Definition> resolved = tl::nullopt;
  
      switch (ns)
        {
        case Namespace::Values:
! 	resolved = resolve_path (values, path, mode, insert_segment_resolution,
! 				 collect_errors);
  	break;
        case Namespace::Types:
! 	resolved = resolve_path (types, path, mode, insert_segment_resolution,
! 				 collect_errors);
  	break;
        case Namespace::Macros:
! 	resolved = resolve_path (macros, path, mode, insert_segment_resolution,
! 				 collect_errors);
  	break;
        case Namespace::Labels:
! 	resolved = resolve_path (labels, path, mode, insert_segment_resolution,
! 				 collect_errors);
  	break;
        default:
  	rust_unreachable ();
--- 524,624 ----
  
    CanonicalPathCtx canonical_ctx;
  
!   /**
!    * The result type for a multi-namespace call to
!    * NameResolutionContext::lookup()
!    */
!   struct NSLookup
!   {
!     NodeId id;
!     Namespace ns;
  
!     NSLookup (NodeId id, Namespace ns) : id (id), ns (ns) {}
!   };
  
!   /**
!    * These functions are mostly useful for the FinalizedNameResolutionContext
!    * and used in later passes of the pipeline. They don't need to know as much
!    * about a definition, hence why they don't use the NamespacedDefinition which
!    * returns a Rib::Definition.
!    */
!   void map_usage (Usage usage, Definition definition, Namespace ns);
!   tl::optional<NodeId> lookup (NodeId usage, Namespace ns) const;
! 
!   /**
!    * The order of namespaces is important - if the usage resolves in the first
!    * namespace, then it will be returned. Collisions are not guarded against and
!    * should NOT happen. This is for looking up usages once name resolution is
!    * done and we are in later stages of the pipeline.
!    */
!   tl::optional<NSLookup> lookup (NodeId usage, Namespace ns1,
! 				 Namespace ns2) const;
!   tl::optional<NSLookup> lookup (NodeId usage, Namespace ns1, Namespace ns2,
! 				 Namespace ns3) const;
! 
!   Resolver::CanonicalPath to_canonical_path (NodeId id, Namespace ns) const
    {
!     return canonical_ctx.get_path (id, ns);
    }
  
!   /**
!    * The return value when the namespace in which a definition was resolved
!    * matters
!    */
!   struct NamespacedDefinition
!   {
!     explicit NamespacedDefinition (Rib::Definition definition, Namespace ns)
!       : definition (definition), ns (ns)
!     {}
! 
!     static tl::optional<NamespacedDefinition>
!     Maybe (tl::optional<Rib::Definition> definition, Namespace ns)
!     {
!       return definition.map ([ns] (Rib::Definition definition) {
! 	return NamespacedDefinition (definition, ns);
!       });
!     }
! 
!     Rib::Definition definition;
!     Namespace ns;
!   };
! 
!   tl::optional<NamespacedDefinition>
    resolve_path (const ResolutionPath &path, ResolutionMode mode,
  		std::vector<Error> &collect_errors, Namespace ns)
    {
!     std::function<void (Usage, Definition, Namespace)> insert_segment_resolution
!       = [this] (Usage seg_id, Definition id, Namespace ns) {
! 	  map_usage (seg_id, id, ns);
  	};
  
!     tl::optional<NamespacedDefinition> resolved = tl::nullopt;
  
      switch (ns)
        {
        case Namespace::Values:
! 	resolved = NamespacedDefinition::Maybe (
! 	  resolve_path (values, path, mode, insert_segment_resolution,
! 			collect_errors),
! 	  ns);
  	break;
        case Namespace::Types:
! 	resolved = NamespacedDefinition::Maybe (
! 	  resolve_path (types, path, mode, insert_segment_resolution,
! 			collect_errors),
! 	  ns);
  	break;
        case Namespace::Macros:
! 	resolved = NamespacedDefinition::Maybe (
! 	  resolve_path (macros, path, mode, insert_segment_resolution,
! 			collect_errors),
! 	  ns);
  	break;
        case Namespace::Labels:
! 	resolved = NamespacedDefinition::Maybe (
! 	  resolve_path (labels, path, mode, insert_segment_resolution,
! 			collect_errors),
! 	  ns);
  	break;
        default:
  	rust_unreachable ();
*************** public:
*** 569,585 ****
  	switch (ns)
  	  {
  	  case Namespace::Values:
! 	    return resolve_path (values, path, mode, insert_segment_resolution,
! 				 collect_errors, *prelude);
  	  case Namespace::Types:
! 	    return resolve_path (types, path, mode, insert_segment_resolution,
! 				 collect_errors, *prelude);
  	  case Namespace::Macros:
! 	    return resolve_path (macros, path, mode, insert_segment_resolution,
! 				 collect_errors, *prelude);
  	  case Namespace::Labels:
! 	    return resolve_path (labels, path, mode, insert_segment_resolution,
! 				 collect_errors, *prelude);
  	  default:
  	    rust_unreachable ();
  	  }
--- 631,655 ----
  	switch (ns)
  	  {
  	  case Namespace::Values:
! 	    return NamespacedDefinition::Maybe (
! 	      resolve_path (values, path, mode, insert_segment_resolution,
! 			    collect_errors, *prelude),
! 	      ns);
  	  case Namespace::Types:
! 	    return NamespacedDefinition::Maybe (
! 	      resolve_path (types, path, mode, insert_segment_resolution,
! 			    collect_errors, *prelude),
! 	      ns);
  	  case Namespace::Macros:
! 	    return NamespacedDefinition::Maybe (
! 	      resolve_path (macros, path, mode, insert_segment_resolution,
! 			    collect_errors, *prelude),
! 	      ns);
  	  case Namespace::Labels:
! 	    return NamespacedDefinition::Maybe (
! 	      resolve_path (labels, path, mode, insert_segment_resolution,
! 			    collect_errors, *prelude),
! 	      ns);
  	  default:
  	    rust_unreachable ();
  	  }
*************** public:
*** 651,657 ****
        this->collect_errors = collect_errors;
      }
  
!     tl::optional<Rib::Definition> resolve ()
      {
        rust_assert (has_path_set);
  
--- 721,727 ----
        this->collect_errors = collect_errors;
      }
  
!     tl::optional<NamespacedDefinition> resolve ()
      {
        rust_assert (has_path_set);
  
*************** public:
*** 693,699 ****
    };
  
    template <typename S, typename... Args>
!   tl::optional<Rib::Definition>
    resolve_path (const std::vector<S> &path_segments, ResolutionMode mode,
  		tl::optional<std::vector<Error> &> collect_errors,
  		Namespace ns_first, Args... ns_args)
--- 763,769 ----
    };
  
    template <typename S, typename... Args>
!   tl::optional<NamespacedDefinition>
    resolve_path (const std::vector<S> &path_segments, ResolutionMode mode,
  		tl::optional<std::vector<Error> &> collect_errors,
  		Namespace ns_first, Args... ns_args)
*************** public:
*** 707,713 ****
    }
  
    template <typename S, typename... Args>
!   tl::optional<Rib::Definition>
    resolve_path (const std::vector<S> &path_segments,
  		bool has_opening_scope_resolution,
  		tl::optional<std::vector<Error> &> collect_errors,
--- 777,783 ----
    }
  
    template <typename S, typename... Args>
!   tl::optional<NamespacedDefinition>
    resolve_path (const std::vector<S> &path_segments,
  		bool has_opening_scope_resolution,
  		tl::optional<std::vector<Error> &> collect_errors,
*************** public:
*** 723,729 ****
    }
  
    template <typename S, typename... Args>
!   tl::optional<Rib::Definition>
    resolve_path (const std::vector<S> &path_segments,
  		bool has_opening_scope_resolution, Namespace ns_first,
  		Args... ns_args)
--- 793,799 ----
    }
  
    template <typename S, typename... Args>
!   tl::optional<NamespacedDefinition>
    resolve_path (const std::vector<S> &path_segments,
  		bool has_opening_scope_resolution, Namespace ns_first,
  		Args... ns_args)
*************** public:
*** 737,743 ****
    }
  
    template <typename S, typename... Args>
!   tl::optional<Rib::Definition>
    resolve_path (const std::vector<S> &path_segments, ResolutionMode mode,
  		Namespace ns_first, Args... ns_args)
    {
--- 807,813 ----
    }
  
    template <typename S, typename... Args>
!   tl::optional<NamespacedDefinition>
    resolve_path (const std::vector<S> &path_segments, ResolutionMode mode,
  		Namespace ns_first, Args... ns_args)
    {
*************** public:
*** 749,756 ****
    }
  
    template <typename... Args>
!   tl::optional<Rib::Definition> resolve_path (const AST::SimplePath &path,
! 					      Args &&...args)
    {
      return resolve_path (path.get_segments (),
  			 path.has_opening_scope_resolution (),
--- 819,826 ----
    }
  
    template <typename... Args>
!   tl::optional<NamespacedDefinition> resolve_path (const AST::SimplePath &path,
! 						   Args &&...args)
    {
      return resolve_path (path.get_segments (),
  			 path.has_opening_scope_resolution (),
*************** public:
*** 758,781 ****
    }
  
    template <typename... Args>
!   tl::optional<Rib::Definition> resolve_path (const AST::PathInExpression &path,
! 					      Args &&...args)
    {
      return resolve_path (path.get_segments (), path.opening_scope_resolution (),
  			 std::forward<Args> (args)...);
    }
  
    template <typename... Args>
!   tl::optional<Rib::Definition> resolve_path (const AST::TypePath &path,
! 					      Args &&...args)
    {
      return resolve_path (path.get_segments (),
  			 path.has_opening_scope_resolution_op (),
  			 std::forward<Args> (args)...);
    }
  
    /**
!    * Resolve a path to its definition in the current `ForeverStack`
     *
     * // TODO: Add documentation for `segments`
     *
--- 828,885 ----
    }
  
    template <typename... Args>
!   tl::optional<NamespacedDefinition>
!   resolve_path (const AST::PathInExpression &path, Args &&...args)
    {
      return resolve_path (path.get_segments (), path.opening_scope_resolution (),
  			 std::forward<Args> (args)...);
    }
  
    template <typename... Args>
!   tl::optional<NamespacedDefinition> resolve_path (const AST::TypePath &path,
! 						   Args &&...args)
    {
      return resolve_path (path.get_segments (),
  			 path.has_opening_scope_resolution_op (),
  			 std::forward<Args> (args)...);
    }
  
+   // We disable this function for now as it causes regressions, but I think it
+   // is important for a more proper final nameres context - need to investigate
+ #if 0
    /**
!    * We've now collected every definition and import, and errored out when
!    * necessary if multiple definitions are colliding. Do a final flattening of
!    * the name resolution context to make it easier to digest for the late name
!    * resolution and type-checker. This basically turns the `resolved_nodes`
!    * map from a linked-list-like map to a regular, flat hashmap.
!    *
!    * FIXME: The documentation is wrong, this needs to also run after all
!    * usages have been *resolved* so after Late as well!!!
!    *
!    * TODO: Should this return something like the FinalizedNameResolutionCtx?
!    * Or set it up at least? And instead of mutating the `resolved_nodes` map,
!    * create a new one for the FinalizedNameResolutionCtx?
!    * Actually, since Late uses the NRCtx directly we should mutate this. Most
!    * later passes don't look at this map. So let's go for side-effects in a
!    * void function, yipee.
!    */
!   void flatten ();
! #endif
! 
!   /* If declared with #[prelude_import], the current standard library module
!    */
!   tl::optional<NodeId> prelude;
! 
! private:
!   template <Namespace N>
!   bool
!   should_search_prelude (const typename ForeverStack<N>::Node *current_node,
! 			 const typename ForeverStack<N>::SegIterator &iterator,
! 			 const std::vector<ResolutionPath::Segment> &segments);
! 
!   /**
!    * Resolve a path to its definition
     *
     * // TODO: Add documentation for `segments`
     *
*************** public:
*** 783,813 ****
     *         current map, an empty one otherwise.
     */
    template <Namespace N>
!   tl::optional<Rib::Definition> resolve_path (
!     ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!     std::function<void (Usage, Definition)> insert_segment_resolution,
!     std::vector<Error> &collect_errors);
  
    template <Namespace N>
!   tl::optional<Rib::Definition> resolve_path (
!     ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!     std::function<void (Usage, Definition)> insert_segment_resolution,
!     std::vector<Error> &collect_errors, NodeId starting_point_id);
  
-   /* TODO: Make private? */
    template <Namespace N>
    tl::optional<Rib::Definition> resolve_path (
      ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!     std::function<void (Usage, Definition)> insert_segment_resolution,
      std::vector<Error> &collect_errors,
      std::reference_wrapper<typename ForeverStack<N>::Node> starting_point);
  
!   /* If declared with #[prelude_import], the current standard library module */
!   tl::optional<NodeId> prelude;
  
! private:
!   /* Map of "usage" nodes which have been resolved to a "definition" node */
!   std::map<Usage, Definition> resolved_nodes;
  };
  
  } // namespace Resolver2_0
--- 887,930 ----
     *         current map, an empty one otherwise.
     */
    template <Namespace N>
!   tl::optional<Rib::Definition>
!   resolve_path (ForeverStack<N> &stack, const ResolutionPath &path,
! 		ResolutionMode mode,
! 		std::function<void (Usage, Definition, Namespace)>
! 		  insert_segment_resolution,
! 		std::vector<Error> &collect_errors);
  
    template <Namespace N>
!   tl::optional<Rib::Definition>
!   resolve_path (ForeverStack<N> &stack, const ResolutionPath &path,
! 		ResolutionMode mode,
! 		std::function<void (Usage, Definition, Namespace)>
! 		  insert_segment_resolution,
! 		std::vector<Error> &collect_errors, NodeId starting_point_id);
  
    template <Namespace N>
    tl::optional<Rib::Definition> resolve_path (
      ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!     std::function<void (Usage, Definition, Namespace)>
!       insert_segment_resolution,
      std::vector<Error> &collect_errors,
      std::reference_wrapper<typename ForeverStack<N>::Node> starting_point);
  
!   template <Namespace N>
!   tl::optional<typename ForeverStack<N>::Node &>
!   resolve_segments (ForeverStack<N> &stack,
! 		    typename ForeverStack<N>::Node &starting_point,
! 		    const std::vector<ResolutionPath::Segment> &segments,
! 		    typename ForeverStack<N>::SegIterator iterator,
! 		    std::function<void (Usage, Definition, Namespace)>
! 		      insert_segment_resolution,
! 		    std::vector<Error> &collect_errors);
  
!   template <Namespace N>
!   tl::optional<Rib::Definition>
!   resolve_final_segment (ForeverStack<N> &stack,
! 			 typename ForeverStack<N>::Node &final_node,
! 			 std::string &seg_name, bool is_lower_self);
  };
  
  } // namespace Resolver2_0
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-name-resolution-context.hxx gcc-17-20260628/gcc/rust/resolve/rust-name-resolution-context.hxx
*** gcc-17-20260621/gcc/rust/resolve/rust-name-resolution-context.hxx	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-name-resolution-context.hxx	Sun Jun 28 22:32:10 2026
***************
*** 17,22 ****
--- 17,23 ----
  // <http://www.gnu.org/licenses/>.
  
  #include "optional.h"
+ #include "rust-forever-stack.h"
  #include "rust-name-resolution-context.h"
  
  /**
*************** namespace Rust {
*** 28,37 ****
  namespace Resolver2_0 {
  
  template <Namespace N>
  tl::optional<Rib::Definition>
  NameResolutionContext::resolve_path (
    ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!   std::function<void (Usage, Definition)> insert_segment_resolution,
    std::vector<Error> &collect_errors)
  {
    std::reference_wrapper<typename ForeverStack<N>::Node> starting_point
--- 29,58 ----
  namespace Resolver2_0 {
  
  template <Namespace N>
+ bool
+ NameResolutionContext::should_search_prelude (
+   const typename ForeverStack<N>::Node *current_node,
+   const typename ForeverStack<N>::SegIterator &iterator,
+   const std::vector<ResolutionPath::Segment> &segments)
+ {
+   // Check whether the current_node is a root node
+   if (current_node->is_root ())
+     return true;
+ 
+   // Check whether we're at the start of a module (we can't travel elsewhere
+   // from the start of a module)
+   if (is_start (iterator, segments)
+       && current_node->rib.kind == Rib::Kind::Module)
+     return true;
+ 
+   return false;
+ }
+ 
+ template <Namespace N>
  tl::optional<Rib::Definition>
  NameResolutionContext::resolve_path (
    ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!   std::function<void (Usage, Definition, Namespace)> insert_segment_resolution,
    std::vector<Error> &collect_errors)
  {
    std::reference_wrapper<typename ForeverStack<N>::Node> starting_point
*************** template <Namespace N>
*** 46,52 ****
  tl::optional<Rib::Definition>
  NameResolutionContext::resolve_path (
    ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!   std::function<void (Usage, Definition)> insert_segment_resolution,
    std::vector<Error> &collect_errors, NodeId starting_point_id)
  
  {
--- 67,73 ----
  tl::optional<Rib::Definition>
  NameResolutionContext::resolve_path (
    ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!   std::function<void (Usage, Definition, Namespace)> insert_segment_resolution,
    std::vector<Error> &collect_errors, NodeId starting_point_id)
  
  {
*************** template <Namespace N>
*** 66,72 ****
  tl::optional<Rib::Definition>
  NameResolutionContext::resolve_path (
    ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!   std::function<void (Usage, Definition)> insert_segment_resolution,
    std::vector<Error> &collect_errors,
    std::reference_wrapper<typename ForeverStack<N>::Node> starting_point)
  {
--- 87,93 ----
  tl::optional<Rib::Definition>
  NameResolutionContext::resolve_path (
    ForeverStack<N> &stack, const ResolutionPath &path, ResolutionMode mode,
!   std::function<void (Usage, Definition, Namespace)> insert_segment_resolution,
    std::vector<Error> &collect_errors,
    std::reference_wrapper<typename ForeverStack<N>::Node> starting_point)
  {
*************** NameResolutionContext::resolve_path (
*** 79,86 ****
        NodeId seg_id
  	= Analysis::Mappings::get ().get_lang_item_node (lang_item->first);
  
!       insert_segment_resolution (Usage (lang_item->second),
! 				 Definition (seg_id));
  
        if (path.get_segments ().empty ())
  	return Rib::Definition::NonShadowable (seg_id);
--- 100,107 ----
        NodeId seg_id
  	= Analysis::Mappings::get ().get_lang_item_node (lang_item->first);
  
!       insert_segment_resolution (Usage (lang_item->second), Definition (seg_id),
! 				 N);
  
        if (path.get_segments ().empty ())
  	return Rib::Definition::NonShadowable (seg_id);
*************** NameResolutionContext::resolve_path (
*** 129,142 ****
  	  if (seg.is_crate_path_seg ())
  	    {
  	      insert_segment_resolution (Usage (seg.node_id),
! 					 Definition (stack.root.id));
  	      // TODO: does NonShadowable matter?
  	      return Rib::Definition::NonShadowable (stack.root.id);
  	    }
  	  else if (seg.is_lower_self_seg ())
  	    {
  	      NodeId id = stack.find_closest_module (starting_point.get ()).id;
! 	      insert_segment_resolution (Usage (seg.node_id), Definition (id));
  	      // TODO: does NonShadowable matter?
  	      return Rib::Definition::NonShadowable (id);
  	    }
--- 150,164 ----
  	  if (seg.is_crate_path_seg ())
  	    {
  	      insert_segment_resolution (Usage (seg.node_id),
! 					 Definition (stack.root.id), N);
  	      // TODO: does NonShadowable matter?
  	      return Rib::Definition::NonShadowable (stack.root.id);
  	    }
  	  else if (seg.is_lower_self_seg ())
  	    {
  	      NodeId id = stack.find_closest_module (starting_point.get ()).id;
! 	      insert_segment_resolution (Usage (seg.node_id), Definition (id),
! 					 N);
  	      // TODO: does NonShadowable matter?
  	      return Rib::Definition::NonShadowable (id);
  	    }
*************** NameResolutionContext::resolve_path (
*** 153,188 ****
  
  	      NodeId id
  		= stack.find_closest_module (closest_module.parent.value ()).id;
! 	      insert_segment_resolution (Usage (seg.node_id), Definition (id));
  	      // TODO: does NonShadowable matter?
  	      return Rib::Definition::NonShadowable (id);
  	    }
- 	  else
- 	    {
- 	      // HACK: check for a module after we check the language prelude
- 	      for (auto &kv :
- 		   stack.find_closest_module (starting_point.get ()).children)
- 		{
- 		  auto &link = kv.first;
- 
- 		  if (link.path.map_or (
- 			[&seg] (Identifier path) {
- 			  auto &path_str = path.as_string ();
- 			  return path_str == seg.name;
- 			},
- 			false))
- 		    {
- 		      insert_segment_resolution (Usage (seg.node_id),
- 						 Definition (kv.second.id));
- 		      return Rib::Definition::NonShadowable (kv.second.id);
- 		    }
- 		}
- 	    }
  	}
  
        if (res && !res->is_ambiguous ())
  	insert_segment_resolution (Usage (seg.node_id),
! 				   Definition (res->get_node_id ()));
        return res;
      }
  
--- 175,191 ----
  
  	      NodeId id
  		= stack.find_closest_module (closest_module.parent.value ()).id;
! 	      insert_segment_resolution (Usage (seg.node_id), Definition (id),
! 					 N);
  	      // TODO: does NonShadowable matter?
  	      return Rib::Definition::NonShadowable (id);
  	    }
  	}
  
+       // FIXME: Is the NS to insert_segment_resolution valid?
        if (res && !res->is_ambiguous ())
  	insert_segment_resolution (Usage (seg.node_id),
! 				   Definition (res->get_node_id ()), N);
        return res;
      }
  
*************** NameResolutionContext::resolve_path (
*** 211,218 ****
    // NodeId as a starting point rather than a Node?
  
    auto node
!     = types.resolve_segments (types_starting_point.value (), segments, iterator,
! 			      insert_segment_resolution, collect_errors);
  
    if (!node)
      return tl::nullopt;
--- 214,221 ----
    // NodeId as a starting point rather than a Node?
  
    auto node
!     = resolve_segments (types, types_starting_point.value (), segments,
! 			iterator, insert_segment_resolution, collect_errors);
  
    if (!node)
      return tl::nullopt;
*************** NameResolutionContext::resolve_path (
*** 231,268 ****
    std::string seg_name = seg.name;
  
    tl::optional<Rib::Definition> res
!     = stack.resolve_final_segment (final_node, seg_name,
! 				   seg.is_lower_self_seg ());
    // Ok we didn't find it in the rib, Lets try the prelude...
    if (!res)
      res = stack.get_lang_prelude (seg_name);
  
!   if (N == Namespace::Types && !res)
      {
!       // HACK: check for a module after we check the language prelude
!       for (auto &kv : final_node.children)
  	{
! 	  auto &link = kv.first;
  
! 	  if (link.path.map_or (
! 		[&seg_name] (Identifier path) {
! 		  auto &path_str = path.as_string ();
! 		  return path_str == seg_name;
! 		},
! 		false))
  	    {
! 	      insert_segment_resolution (Usage (seg.node_id),
! 					 Definition (kv.second.id));
! 	      return Rib::Definition::NonShadowable (kv.second.id);
  	    }
  	}
      }
  
!   if (res && !res->is_ambiguous ())
!     insert_segment_resolution (Usage (seg.node_id),
! 			       Definition (res->get_node_id ()));
  
!   return res;
  }
  
  } // namespace Resolver2_0
--- 234,413 ----
    std::string seg_name = seg.name;
  
    tl::optional<Rib::Definition> res
!     = resolve_final_segment (stack, final_node, seg_name,
! 			     seg.is_lower_self_seg ());
    // Ok we didn't find it in the rib, Lets try the prelude...
    if (!res)
      res = stack.get_lang_prelude (seg_name);
  
!   if (res && !res->is_ambiguous ())
!     insert_segment_resolution (Usage (seg.node_id),
! 			       Definition (res->get_node_id ()), N);
! 
!   return res;
! }
! 
! template <Namespace N>
! tl::optional<typename ForeverStack<N>::Node &>
! NameResolutionContext::resolve_segments (
!   ForeverStack<N> &stack, typename ForeverStack<N>::Node &starting_point,
!   const std::vector<ResolutionPath::Segment> &segments,
!   typename ForeverStack<N>::SegIterator iterator,
!   std::function<void (Usage, Definition, Namespace)> insert_segment_resolution,
!   std::vector<Error> &collect_errors)
! {
!   auto *current_node = &starting_point;
!   for (; !is_last (iterator, segments); iterator++)
      {
!       auto &seg = *iterator;
! 
!       std::string str = seg.name;
! 
!       // check that we don't encounter *any* leading keywords afterwards
!       if (check_leading_kw_at_start (collect_errors, seg,
! 				     seg.is_crate_path_seg ()
! 				       || seg.is_super_path_seg ()
! 				       || seg.is_lower_self_seg ()))
! 	return tl::nullopt;
! 
!       tl::optional<std::reference_wrapper<typename ForeverStack<N>::Node>> child
! 	= tl::nullopt;
! 
!       /*
!        * On every iteration this loop either
!        *
!        * 1. terminates
!        *
!        * 2. decreases the depth of the node pointed to by current_node until
!        *    current_node reaches the root
!        *
!        * 3. If the root node is reached, and we were not able to resolve the
!        *    segment, we search the prelude rib for the segment, by setting
!        *    current_node to point to the prelude, and toggling the
!        *    searched_prelude boolean to true. If current_node is the prelude
!        *    rib, and searched_prelude is true, we will exit.
!        *
!        * This ensures termination.
!        *
!        */
!       bool searched_prelude = false;
!       while (true)
  	{
! 	  if (is_start (iterator, segments)
! 	      && current_node->rib.kind == Rib::Kind::TraitOrImpl)
! 	    {
! 	      // we can't reference associated types/functions like this
! 	      current_node = &current_node->parent.value ();
! 	      continue;
! 	    }
  
! 	  // may set the value of child
! 	  for (auto &kv : current_node->children)
  	    {
! 	      auto &link = kv.first;
! 
! 	      if (link.path.map_or (
! 		    [&str] (Identifier path) {
! 		      auto &path_str = path.as_string ();
! 		      return str == path_str;
! 		    },
! 		    false))
! 		{
! 		  child = kv.second;
! 		  break;
! 		}
! 	    }
! 
! 	  if (child.has_value ())
! 	    {
! 	      break;
  	    }
+ 
+ 	  auto rib_lookup = current_node->rib.get (seg.name);
+ 	  if (rib_lookup && !rib_lookup->is_ambiguous ())
+ 	    {
+ 	      if (Analysis::Mappings::get ()
+ 		    .lookup_glob_container (rib_lookup->get_node_id ())
+ 		    .has_value ())
+ 		{
+ 		  NodeId leaf_module
+ 		    = stack.find_leaf_definition (rib_lookup->get_node_id ())
+ 			.value_or (Definition (rib_lookup->get_node_id ()))
+ 			.id;
+ 
+ 		  if (auto new_child = stack.dfs_node (stack.root, leaf_module))
+ 		    {
+ 		      child = new_child.value ();
+ 		      break;
+ 		    }
+ 		  else
+ 		    {
+ 		      return tl::nullopt;
+ 		    }
+ 		}
+ 	      else
+ 		{
+ 		  // FIXME: Resolve segments always resolves in the Types NS
+ 		  // correct? If so, we should remove the template parameter for
+ 		  // this function - and use NS::Types directly here instead of
+ 		  // N
+ 		  insert_segment_resolution (Usage (seg.node_id),
+ 					     Definition (
+ 					       rib_lookup->get_node_id ()),
+ 					     N);
+ 
+ 		  return tl::nullopt;
+ 		}
+ 	    }
+ 
+ 	  if (!searched_prelude
+ 	      && should_search_prelude<N> (current_node, iterator, segments))
+ 	    {
+ 	      searched_prelude = true;
+ 	      current_node = &stack.lang_prelude;
+ 	      continue;
+ 	    }
+ 
+ 	  if (!is_start (iterator, segments)
+ 	      || current_node->rib.kind == Rib::Kind::Module
+ 	      || current_node->is_prelude ())
+ 	    {
+ 	      return tl::nullopt;
+ 	    }
+ 
+ 	  current_node = &current_node->parent.value ();
  	}
+ 
+       // if child didn't point to a value
+       // the while loop above would have returned or kept looping
+       current_node = &child->get ();
+       insert_segment_resolution (Usage (seg.node_id),
+ 				 Definition (current_node->id), N);
      }
  
!   return *current_node;
! }
  
! template <>
! inline tl::optional<Rib::Definition>
! NameResolutionContext::resolve_final_segment (
!   ForeverStack<Namespace::Types> &stack,
!   typename ForeverStack<Namespace::Types>::Node &final_node,
!   std::string &seg_name, bool is_lower_self)
! {
!   if (is_lower_self)
!     return Rib::Definition::NonShadowable (final_node.id);
!   else
!     return final_node.rib.get (seg_name);
! }
! 
! template <Namespace N>
! tl::optional<Rib::Definition>
! NameResolutionContext::resolve_final_segment (
!   ForeverStack<N> &stack, typename ForeverStack<N>::Node &final_node,
!   std::string &seg_name, bool is_lower_self)
! {
!   return final_node.rib.get (seg_name);
  }
  
  } // namespace Resolver2_0
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-name-resolution.h gcc-17-20260628/gcc/rust/resolve/rust-name-resolution.h
*** gcc-17-20260621/gcc/rust/resolve/rust-name-resolution.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-name-resolution.h	Sun Jun 28 22:32:10 2026
***************
*** 19,24 ****
--- 19,26 ----
  #ifndef RUST_NAME_RESOLVER_2_0_H
  #define RUST_NAME_RESOLVER_2_0_H
  
+ #include "rust-mapping-common.h"
+ 
  namespace Rust {
  namespace Resolver2_0 {
  
*************** public:
*** 39,44 ****
--- 41,47 ----
  class Definition
  {
  public:
+   explicit Definition () : id (UNKNOWN_NODEID) {}
    explicit Definition (NodeId id) : id (id) {}
  
    NodeId id;
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-resolve-builtins.cc gcc-17-20260628/gcc/rust/resolve/rust-resolve-builtins.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-resolve-builtins.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-resolve-builtins.cc	Sun Jun 28 22:32:10 2026
*************** setup_type_ctx ()
*** 120,125 ****
--- 120,135 ----
  			 unit_type);
  }
  
+ tl::optional<NodeId>
+ find_builtin_node_id (const std::string &name)
+ {
+   for (size_t i = 0; i < builtin_count; i++)
+     if (strcmp (name.c_str (), builtin_names[i]) == 0)
+       return builtin_node_ids[i];
+ 
+   return tl::nullopt;
+ }
+ 
  } // namespace Builtins
  } // namespace Resolver2_0
  } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-resolve-builtins.h gcc-17-20260628/gcc/rust/resolve/rust-resolve-builtins.h
*** gcc-17-20260621/gcc/rust/resolve/rust-resolve-builtins.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-resolve-builtins.h	Sun Jun 28 22:32:10 2026
***************
*** 19,24 ****
--- 19,27 ----
  #ifndef RUST_RESOLVE_BUILTINS_H
  #define RUST_RESOLVE_BUILTINS_H
  
+ #include "optional.h"
+ #include "rust-ast.h"
+ 
  namespace Rust {
  namespace Resolver2_0 {
  
*************** namespace Builtins {
*** 30,35 ****
--- 33,41 ----
  void setup_lang_prelude (NameResolutionContext &ctx);
  void setup_type_ctx ();
  
+ // Return the NodeId associated with a builtin type name if it exists
+ tl::optional<NodeId> find_builtin_node_id (const std::string &name);
+ 
  } // namespace Builtins
  } // namespace Resolver2_0
  } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc gcc-17-20260628/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc
*** gcc-17-20260621/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/resolve/rust-toplevel-name-resolver-2.0.cc	Sun Jun 28 22:32:10 2026
*************** TopLevel::go (AST::Crate &crate)
*** 107,118 ****
  void
  TopLevel::visit (AST::Module &module)
  {
-   DefaultResolver::visit (module);
- 
    if (Analysis::Mappings::get ().lookup_glob_container (module.get_node_id ())
        == tl::nullopt)
      Analysis::Mappings::get ().insert_glob_container (module.get_node_id (),
  						      &module);
  }
  
  void
--- 107,122 ----
  void
  TopLevel::visit (AST::Module &module)
  {
    if (Analysis::Mappings::get ().lookup_glob_container (module.get_node_id ())
        == tl::nullopt)
      Analysis::Mappings::get ().insert_glob_container (module.get_node_id (),
  						      &module);
+ 
+   insert_or_error_out (module.get_name (), module, Namespace::Types);
+ 
+   Analysis::Mappings::get ().insert_module_id (module.get_node_id ());
+ 
+   DefaultResolver::visit (module);
  }
  
  void
diff -Nrcpad gcc-17-20260621/gcc/rust/rust-session-manager.cc gcc-17-20260628/gcc/rust/rust-session-manager.cc
*** gcc-17-20260621/gcc/rust/rust-session-manager.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/rust-session-manager.cc	Sun Jun 28 22:32:10 2026
***************
*** 24,30 ****
  #include "rust-diagnostics.h"
  #include "rust-expression-yeast.h"
  #include "rust-hir-pattern-analysis.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-location.h"
  #include "rust-unsafe-checker.h"
  #include "rust-lex.h"
--- 24,30 ----
  #include "rust-diagnostics.h"
  #include "rust-expression-yeast.h"
  #include "rust-hir-pattern-analysis.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-location.h"
  #include "rust-unsafe-checker.h"
  #include "rust-lex.h"
*************** Session::compile_crate (const char *file
*** 650,656 ****
      {
        options.target_data.dump_target_options ();
      }
- 
    if (saw_errors ())
      return;
  
--- 650,655 ----
*************** Session::compile_crate (const char *file
*** 798,804 ****
      return;
  
    // name resolution is done, we now freeze the name resolver for type checking
!   Resolver2_0::ImmutableNameResolutionContext::init (name_resolution_ctx);
  
    // type resolve
    Compile::Context *ctx = Compile::Context::get ();
--- 797,803 ----
      return;
  
    // name resolution is done, we now freeze the name resolver for type checking
!   Resolver2_0::FinalizedNameResolutionContext::init (name_resolution_ctx);
  
    // type resolve
    Compile::Context *ctx = Compile::Context::get ();
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-trait-resolve.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-trait-resolve.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-trait-resolve.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-trait-resolve.cc	Sun Jun 28 22:32:10 2026
***************
*** 18,26 ****
  
  #include "rust-hir-trait-resolve.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
--- 18,27 ----
  
  #include "rust-hir-trait-resolve.h"
  #include "rust-hir-type-check-expr.h"
+ #include "rust-rib.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
*************** bool
*** 120,130 ****
  TraitResolver::resolve_path_to_trait (const HIR::TypePath &path,
  				      HIR::Trait **resolved) const
  {
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    NodeId ref;
!   if (auto ref_opt = nr_ctx.lookup (path.get_mappings ().get_nodeid ()))
      {
        ref = *ref_opt;
      }
--- 121,131 ----
  TraitResolver::resolve_path_to_trait (const HIR::TypePath &path,
  				      HIR::Trait **resolved) const
  {
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    NodeId ref;
!   if (auto ref_opt = nr_ctx.lookup (path.get_mappings ().get_nodeid (),
! 				    Resolver2_0::Namespace::Types))
      {
        ref = *ref_opt;
      }
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-enumitem.cc	Sun Jun 28 22:32:10 2026
***************
*** 20,27 ****
  #include "rust-hir-type-check-type.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-type-check-enumitem.h"
  #include "rust-type-util.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
--- 20,28 ----
  #include "rust-hir-type-check-type.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-type-check-enumitem.h"
+ #include "rust-rib.h"
  #include "rust-type-util.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
*************** TypeCheckEnumItem::visit (HIR::EnumItem
*** 76,86 ****
    rust_assert (ok);
    context->insert_type (mapping, isize);
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
--- 77,87 ----
    rust_assert (ok);
    context->insert_type (mapping, isize);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
*************** TypeCheckEnumItem::visit (HIR::EnumItemD
*** 108,118 ****
  	      TyTy::TyWithLocation (expected_ty),
  	      TyTy::TyWithLocation (capacity_type), item.get_locus ());
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant
--- 109,119 ----
  	      TyTy::TyWithLocation (expected_ty),
  	      TyTy::TyWithLocation (capacity_type), item.get_locus ());
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant
*************** TypeCheckEnumItem::visit (HIR::EnumItemT
*** 158,168 ****
    rust_assert (ok);
    context->insert_type (mapping, isize);
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
--- 159,169 ----
    rust_assert (ok);
    context->insert_type (mapping, isize);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
*************** TypeCheckEnumItem::visit (HIR::EnumItemS
*** 206,216 ****
    rust_assert (ok);
    context->insert_type (mapping, isize);
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
--- 207,217 ----
    rust_assert (ok);
    context->insert_type (mapping, isize);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (item.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, item.get_locus ()};
    variant = new TyTy::VariantDef (item.get_mappings ().get_hirid (),
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-expr.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-expr.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-expr.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-expr.cc	Sun Jun 28 22:32:10 2026
***************
*** 19,24 ****
--- 19,26 ----
  #include "optional.h"
  #include "rust-common.h"
  #include "rust-hir-expr.h"
+ #include "rust-hir-map.h"
+ #include "rust-rib.h"
  #include "rust-system.h"
  #include "rust-tyty-call.h"
  #include "rust-hir-type-check-struct-field.h"
***************
*** 31,37 ****
  #include "rust-hir-type-check-stmt.h"
  #include "rust-hir-type-check-item.h"
  #include "rust-type-util.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-compile-base.h"
  #include "rust-tyty-util.h"
  #include "rust-tyty.h"
--- 33,39 ----
  #include "rust-hir-type-check-stmt.h"
  #include "rust-hir-type-check-item.h"
  #include "rust-type-util.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-compile-base.h"
  #include "rust-tyty-util.h"
  #include "rust-tyty.h"
*************** TypeCheckExpr::visit (HIR::MethodCallExp
*** 1535,1545 ****
    // store the expected fntype
    context->insert_type (expr.get_method_name ().get_mappings (), lookup);
  
!   auto &nr_ctx = const_cast<Resolver2_0::NameResolutionContext &> (
!     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ());
  
    nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 		    Resolver2_0::Definition (resolved_node_id));
  
    // return the result of the function back
    infered = function_ret_tyty;
--- 1537,1547 ----
    // store the expected fntype
    context->insert_type (expr.get_method_name ().get_mappings (), lookup);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 		    Resolver2_0::Definition (resolved_node_id),
! 		    Resolver2_0::Namespace::Values);
  
    // return the result of the function back
    infered = function_ret_tyty;
*************** TypeCheckExpr::visit (HIR::ClosureExpr &
*** 1885,1894 ****
    // Resolve closure captures
  
    std::set<NodeId> captures;
-   auto &nr_ctx = const_cast<Resolver2_0::NameResolutionContext &> (
-     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ());
  
!   if (auto opt_cap = nr_ctx.mappings.lookup_captures (closure_node_id))
      for (auto cap : opt_cap.value ())
        captures.insert (cap);
  
--- 1887,1895 ----
    // Resolve closure captures
  
    std::set<NodeId> captures;
  
!   if (auto opt_cap
!       = Analysis::Mappings::get ().lookup_captures (closure_node_id))
      for (auto cap : opt_cap.value ())
        captures.insert (cap);
  
*************** TypeCheckExpr::resolve_operator_overload
*** 2180,2190 ****
    context->insert_operator_overload (expr.get_mappings ().get_hirid (), type);
  
    // set up the resolved name on the path
!   auto &nr_ctx = const_cast<Resolver2_0::NameResolutionContext &> (
!     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ());
  
    nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 		    Resolver2_0::Definition (resolved_node_id));
  
    // return the result of the function back
    infered = function_ret_tyty;
--- 2181,2191 ----
    context->insert_operator_overload (expr.get_mappings ().get_hirid (), type);
  
    // set up the resolved name on the path
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 		    Resolver2_0::Definition (resolved_node_id),
! 		    Resolver2_0::Namespace::Types);
  
    // return the result of the function back
    infered = function_ret_tyty;
*************** TypeCheckExpr::resolve_fn_trait_call (HI
*** 2376,2390 ****
    context->insert_operator_overload (expr.get_mappings ().get_hirid (), fn);
  
    // set up the resolved name on the path
!   auto &nr_ctx = const_cast<Resolver2_0::NameResolutionContext &> (
!     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ());
  
!   auto existing = nr_ctx.lookup (expr.get_mappings ().get_nodeid ());
    if (existing)
      rust_assert (*existing == resolved_node_id);
    else
      nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 		      Resolver2_0::Definition (resolved_node_id));
  
    // return the result of the function back
    *result = function_ret_tyty;
--- 2377,2395 ----
    context->insert_operator_overload (expr.get_mappings ().get_hirid (), fn);
  
    // set up the resolved name on the path
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
!   // TODO: What namespace to use for inserting and looking up here? It's a trait
!   // call, so NS::Types is right?
! 
!   auto existing = nr_ctx.lookup (expr.get_mappings ().get_nodeid (),
! 				 Resolver2_0::Namespace::Types);
    if (existing)
      rust_assert (*existing == resolved_node_id);
    else
      nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 		      Resolver2_0::Definition (resolved_node_id),
! 		      Resolver2_0::Namespace::Types);
  
    // return the result of the function back
    *result = function_ret_tyty;
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-implitem.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-implitem.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-implitem.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-implitem.cc	Sun Jun 28 22:32:10 2026
***************
*** 21,32 ****
  #include "rust-hir-full-decls.h"
  #include "rust-hir-pattern.h"
  #include "rust-hir-type-check-base.h"
  #include "rust-hir-type-check-type.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-type-check-pattern.h"
  #include "rust-type-util.h"
  #include "rust-tyty.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
--- 21,34 ----
  #include "rust-hir-full-decls.h"
  #include "rust-hir-pattern.h"
  #include "rust-hir-type-check-base.h"
+ #include "rust-hir-type-check-intrinsic.h"
  #include "rust-hir-type-check-type.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-type-check-pattern.h"
+ #include "rust-rib.h"
  #include "rust-type-util.h"
  #include "rust-tyty.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
*************** TypeCheckTopLevelExternItem::visit (HIR:
*** 156,161 ****
--- 158,168 ----
      region_constraints);
  
    context->insert_type (function.get_mappings (), fnType);
+ 
+   if (parent.get_abi () == Rust::ABI::INTRINSIC
+       && IntrinsicChecker::check (fnType) == IntrinsicCheckResult::Invalid)
+     return;
+ 
    resolved = fnType;
  }
  
*************** TypeCheckImplItem::visit (HIR::Function
*** 339,349 ****
  			   param_tyty);
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, function.get_locus ()};
    auto fnType = new TyTy::FnType (
--- 346,356 ----
  			   param_tyty);
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, function.get_locus ()};
    auto fnType = new TyTy::FnType (
*************** TypeCheckImplItem::visit (HIR::ConstantI
*** 400,409 ****
      }
  
    // special case when this is a generic constant
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (constant.get_mappings ().get_nodeid ());
    RustIdent ident{canonical_path, constant.get_locus ()};
    auto fnType = new TyTy::FnType (
      constant.get_mappings ().get_hirid (),
--- 407,417 ----
      }
  
    // special case when this is a generic constant
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
!   // TODO: Is Values the correct NS?
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (constant.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Values);
    RustIdent ident{canonical_path, constant.get_locus ()};
    auto fnType = new TyTy::FnType (
      constant.get_mappings ().get_hirid (),
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-intrinsic.cc	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,788 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #include "rust-hir-type-check-intrinsic.h"
+ #include "rust-diagnostics.h"
+ #include "rust-intrinsic-values.h"
+ #include "rust-system.h"
+ #include "rust-tyty.h"
+ 
+ namespace Rust {
+ namespace Resolver {
+ 
+ using IValue = Values::Intrinsics;
+ using IRT = IntrinsicRuleType;
+ 
+ const std::unordered_map<std::string, IntrinsicRules>
+   IntrinsicChecker::intrinsic_rules = {
+     // fn unreachable() -> !;
+     {IValue::UNREACHABLE, {0, {}, IRT::Never}},
+ 
+     // pub fn sqrtf32(x: f32) -> f32;
+     {IValue::SQRTF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn sqrtf64(x: f64) -> f64;
+     {IValue::SQRTF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn sinf32(x: f32) -> f32;
+     {IValue::SINF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn sinf64(x: f64) -> f64;
+     {IValue::SINF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn cosf32(x: f32) -> f32;
+     {IValue::COSF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn cosf64(x: f64) -> f64;
+     {IValue::COSF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn expf32(x: f32) -> f32;
+     {IValue::EXPF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn expf64(x: f64) -> f64;
+     {IValue::EXPF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn exp2f32(x: f32) -> f32;
+     {IValue::EXP2F32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn exp2f64(x: f64) -> f64;
+     {IValue::EXP2F64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn logf32(x: f32) -> f32;
+     {IValue::LOGF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn logf64(x: f64) -> f64;
+     {IValue::LOGF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn log10f32(x: f32) -> f32;
+     {IValue::LOG10F32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn log10f64(x: f64) -> f64;
+     {IValue::LOG10F64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn log2f32(x: f32) -> f32;
+     {IValue::LOG2F32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn log2f64(x: f64) -> f64;
+     {IValue::LOG2F64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn fabsf32(x: f32) -> f32;
+     {IValue::FABSF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn fabsf64(x: f64) -> f64;
+     {IValue::FABSF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn floorf32(x: f32) -> f32;
+     {IValue::FLOORF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn floorf64(x: f64) -> f64;
+     {IValue::FLOORF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn ceilf32(x: f32) -> f32;
+     {IValue::CEILF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn ceilf64(x: f64) -> f64;
+     {IValue::CEILF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn truncf32(x: f32) -> f32;
+     {IValue::TRUNCF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn truncf64(x: f64) -> f64;
+     {IValue::TRUNCF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn rintf32(x: f32) -> f32;
+     {IValue::RINTF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn rintf64(x: f64) -> f64;
+     {IValue::RINTF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn nearbyintf32(x: f32) -> f32;
+     {IValue::NEARBYINTF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn nearbyintf64(x: f64) -> f64;
+     {IValue::NEARBYINTF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn roundf32(x: f32) -> f32;
+     {IValue::ROUNDF32, {0, {IRT::F32}, IRT::F32}},
+     // pub fn roundf64(x: f64) -> f64;
+     {IValue::ROUNDF64, {0, {IRT::F64}, IRT::F64}},
+     // pub fn minnumf32(x: f32, y: f32) -> f32;
+     {IValue::MINNUMF32, {0, {IRT::F32, IRT::F32}, IRT::F32}},
+     // pub fn minnumf64(x: f64, y: f64) -> f64;
+     {IValue::MINNUMF64, {0, {IRT::F64, IRT::F64}, IRT::F64}},
+     // pub fn maxnumf32(x: f32, y: f32) -> f32;
+     {IValue::MAXNUMF32, {0, {IRT::F32, IRT::F32}, IRT::F32}},
+     // pub fn maxnumf64(x: f64, y: f64) -> f64;
+     {IValue::MAXNUMF64, {0, {IRT::F64, IRT::F64}, IRT::F64}},
+ 
+     // pub fn powf32(a: f32, x: f32) -> f32;
+     {IValue::POWF32, {0, {IRT::F32, IRT::F32}, IRT::F32}},
+     // pub fn powf64(a: f64, x: f64) -> f64;
+     {IValue::POWF64, {0, {IRT::F64, IRT::F64}, IRT::F64}},
+     // pub fn copysignf32(x: f32, y: f32) -> f32;
+     {IValue::COPYSIGNF32, {0, {IRT::F32, IRT::F32}, IRT::F32}},
+     // pub fn copysignf64(x: f64, y: f64) -> f64;
+     {IValue::COPYSIGNF64, {0, {IRT::F64, IRT::F64}, IRT::F64}},
+ 
+     // pub fn fmaf32(a: f32, b: f32, c: f32) -> f32;
+     {IValue::FMAF32, {0, {IRT::F32, IRT::F32, IRT::F32}, IRT::F32}},
+     // pub fn fmaf64(a: f64, b: f64, c: f64) -> f64;
+     {IValue::FMAF64, {0, {IRT::F64, IRT::F64, IRT::F64}, IRT::F64}},
+ 
+     // pub fn powif32(a: f32, x: i32) -> f32;
+     {IValue::POWIF32, {0, {IRT::F32, IRT::I32}, IRT::F32}},
+     // pub fn powif64(a: f64, x: i32) -> f64;
+     {IValue::POWIF64, {0, {IRT::F64, IRT::I32}, IRT::F64}},
+ 
+     // pub fn abort() -> !;
+     {IValue::ABORT, {0, {}, IRT::Never}},
+     // pub fn offset<T>(dst: *const T, offset: isize) -> *const T;
+     {IValue::OFFSET,
+      {1, {IRT::ConstPtrFirstGeneric, IRT::Isize}, IRT::ConstPtrFirstGeneric}},
+     // pub fn size_of<T>() -> usize;
+     {IValue::SIZE_OF, {1, {}, IRT::Usize}},
+     // pub fn transmute<T, U>(e: T) -> U;
+     {IValue::TRANSMUTE, {2, {IRT::FirstGeneric}, IRT::SecondGeneric}},
+     // pub fn add_with_overflow<T: Copy>(x: T, y: T) -> (T, bool);
+     {IValue::ADD_WITH_OVERFLOW,
+      {1,
+       {IRT::FirstGeneric, IRT::FirstGeneric},
+       IRT::TupleFirstGenericAndBool}},
+     // pub fn sub_with_overflow<T: Copy>(x: T, y: T) -> (T, bool);
+     {IValue::SUB_WITH_OVERFLOW,
+      {1,
+       {IRT::FirstGeneric, IRT::FirstGeneric},
+       IRT::TupleFirstGenericAndBool}},
+     // pub fn mul_with_overflow<T: Copy>(x: T, y: T) -> (T, bool);
+     {IValue::MUL_WITH_OVERFLOW,
+      {1,
+       {IRT::FirstGeneric, IRT::FirstGeneric},
+       IRT::TupleFirstGenericAndBool}},
+     // fn copy<T>(src: *const T, dst: *mut T, count: usize);
+     {IValue::COPY,
+      {1,
+       {IRT::ConstPtrFirstGeneric, IRT::MutPtrFirstGeneric, IRT::Usize},
+       IRT::Unit}},
+     // fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
+     {IValue::COPY_NONOVERLAPPING,
+      {1,
+       {IRT::ConstPtrFirstGeneric, IRT::MutPtrFirstGeneric, IRT::Usize},
+       IRT::Unit}},
+     // pub fn prefetch_read_data<T>(data: *const T, locality: i32);
+     {IValue::PREFETCH_READ_DATA,
+      {1, {IRT::ConstPtrFirstGeneric, IRT::I32}, IRT::Unit}},
+     // pub fn prefetch_write_data<T>(data: *const T, locality: i32);
+     {IValue::PREFETCH_WRITE_DATA,
+      {1, {IRT::ConstPtrFirstGeneric, IRT::I32}, IRT::Unit}},
+     // pub unsafe fn atomic_store_seqcst<T: Copy>(_dst: *mut T, _val: T);
+     {IValue::ATOMIC_STORE_SEQCST,
+      {1, {IRT::MutPtrFirstGeneric, IRT::FirstGeneric}, IRT::Unit}},
+     // pub unsafe fn atomic_store_release<T: Copy>(_dst: *mut T, _val: T);
+     {IValue::ATOMIC_STORE_RELEASE,
+      {1, {IRT::MutPtrFirstGeneric, IRT::FirstGeneric}, IRT::Unit}},
+     // pub unsafe fn atomic_store_relaxed<T: Copy>(_dst: *mut T, _val: T);
+     {IValue::ATOMIC_STORE_RELAXED,
+      {1, {IRT::MutPtrFirstGeneric, IRT::FirstGeneric}, IRT::Unit}},
+     // pub unsafe fn atomic_store_unordered<T: Copy>(_dst: *mut T, _val: T);
+     {IValue::ATOMIC_STORE_UNORDERED,
+      {1, {IRT::MutPtrFirstGeneric, IRT::FirstGeneric}, IRT::Unit}},
+     // pub unsafe fn atomic_load_seqcst<T: Copy>(_src: *const T) -> T;
+     {IValue::ATOMIC_LOAD_SEQCST,
+      {1, {IRT::ConstPtrFirstGeneric}, IRT::FirstGeneric}},
+     // pub unsafe fn atomic_load_acquire<T: Copy>(_src: *const T) -> T;
+     {IValue::ATOMIC_LOAD_ACQUIRE,
+      {1, {IRT::ConstPtrFirstGeneric}, IRT::FirstGeneric}},
+     // pub unsafe fn atomic_load_relaxed<T: Copy>(_src: *const T) -> T;
+     {IValue::ATOMIC_LOAD_RELAXED,
+      {1, {IRT::ConstPtrFirstGeneric}, IRT::FirstGeneric}},
+     // pub unsafe fn atomic_load_unordered<T: Copy>(_src: *const T) -> T;
+     {IValue::ATOMIC_LOAD_UNORDERED,
+      {1, {IRT::ConstPtrFirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_add<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_ADD,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_sub<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_SUB,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_mul<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_MUL,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_div<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_DIV,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_rem<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_REM,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_shl<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_SHL,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn unchecked_shr<T: Copy>(x: T, y: T) -> T;
+     {IValue::UNCHECKED_SHR,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub unsafe fn uninit<T>() -> T
+     {IValue::UNINIT, {1, {}, IRT::FirstGeneric}},
+     // pub fn move_val_init<T>(dst: *mut T, src: T);
+     {IValue::MOVE_VAL_INIT,
+      {1, {IRT::MutPtrFirstGeneric, IRT::FirstGeneric}, IRT::Unit}},
+     // pub fn rotate_left<T: Copy>(x: T, y: T) -> T;
+     {IValue::ROTATE_LEFT,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn rotate_right<T: Copy>(x: T, y: T) -> T;
+     {IValue::ROTATE_RIGHT,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn wrapping_add<T: Copy>(a: T, b: T) -> T;
+     {IValue::WRAPPING_ADD,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn wrapping_sub<T: Copy>(a: T, b: T) -> T;
+     {IValue::WRAPPING_SUB,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn wrapping_mul<T: Copy>(a: T, b: T) -> T;
+     {IValue::WRAPPING_MUL,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn saturating_add<T: Copy>(a: T, b: T) -> T;
+     {IValue::SATURATING_ADD,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn saturating_sub<T: Copy>(a: T, b: T) -> T;
+     {IValue::SATURATING_SUB,
+      {1, {IRT::FirstGeneric, IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn likely(b: bool) -> bool;
+     {IValue::LIKELY, {0, {IRT::Bool}, IRT::Bool}},
+     // pub fn unlikely(b: bool) -> bool;
+     {IValue::UNLIKELY, {0, {IRT::Bool}, IRT::Bool}},
+     // fn discriminant_value<T>(v: &T) -> <T as DiscriminantKind>::Discriminant;
+     {IValue::DISCRIMINANT_VALUE,
+      {1, {IRT::RefFirstGeneric}, IRT::AssocTypePlaceholder}},
+     // pub fn variant_count<T>() -> usize;
+     {IValue::VARIANT_COUNT, {1, {}, IRT::Usize}},
+     // NOTE: The return value was temporarily set to () instead of i32.
+     // pub unsafe fn catch_unwind(
+     //    _try_fn: fn(_: *mut u8),
+     //    _data: *mut u8,
+     //    _catch_fn: fn(_: *mut u8, _: *mut u8),
+     // ) -> i32
+     {IValue::CATCH_UNWIND,
+      {0,
+       {IRT::Fn_MutPtrU8, IRT::MutPtrU8, IRT::Fn_MutPtrU8MutPtrU8},
+       IRT::Unit}},
+     // pub fn r#try(
+     // 		try_fn: fn(*mut u8),
+     // 		data: *mut u8,
+     // 		catch_fn: fn(*mut u8,
+     // 		*mut u8)
+     // ) -> i32;
+     {IValue::TRY,
+      {0,
+       {IRT::Fn_MutPtrU8, IRT::MutPtrU8, IRT::Fn_MutPtrU8MutPtrU8},
+       IRT::I32}},
+     // pub fn assume(b: bool);
+     {IValue::ASSUME, {0, {IRT::Bool}, IRT::Unit}},
+     // pub fn min_align_of<T>() -> usize;
+     {IValue::MIN_ALIGN_OF, {1, {}, IRT::Usize}},
+     // pub fn needs_drop<T>() -> bool;
+     {IValue::NEEDS_DROP, {1, {}, IRT::Bool}},
+     // pub fn caller_location() -> &'static crate::panic::Location<'static>;
+     {IValue::CALLER_LOCATION, {0, {}, IRT::RefAdt}},
+     // pub fn ctpop<T: Copy>(x: T) -> T;
+     {IValue::CTPOP, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+ 
+     // pub fn ctlz<T: Copy>(x: T) -> T;
+     {IValue::CTLZ, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn ctlz_nonzero<T: Copy>(x: T) -> T;
+     {IValue::CTLZ_NONZERO, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn cttz<T: Copy>(x: T) -> T;
+     {IValue::CTTZ, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn cttz_nonzero<T: Copy>(x: T) -> T;
+     {IValue::CTTZ_NONZERO, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn bswap<T: Copy>(x: T) -> T;
+     {IValue::BSWAP, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn bitreverse<T: Copy>(x: T) -> T;
+     {IValue::BITREVERSE, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn type_id<T: ?Sized + 'static>() -> u64;
+     {IValue::TYPE_ID, {1, {}, IRT::U64}},
+     // pub fn ptr_guaranteed_eq<T>(ptr: *const T, other: *const T) -> bool;
+     {IValue::PTR_GUARANTEED_EQ,
+      {1, {IRT::ConstPtrFirstGeneric, IRT::ConstPtrFirstGeneric}, IRT::Bool}},
+     // pub fn ptr_guaranteed_ne<T>(ptr: *const T, other: *const T) -> bool;
+     {IValue::PTR_GUARANTEED_NE,
+      {1, {IRT::ConstPtrFirstGeneric, IRT::ConstPtrFirstGeneric}, IRT::Bool}},
+     // pub fn rustc_peek<T>(_: T) -> T;
+     {IValue::RUSTC_PEEK, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+     // pub fn type_name<T: ?Sized>() -> &'static str;
+     {IValue::TYPE_NAME, {1, {}, IRT::RefStaticStr}},
+     // pub fn forget<T: ?Sized>(_: T);
+     {IValue::FORGET, {1, {IRT::FirstGeneric}, IRT::Unit}},
+     // pub fn black_box<T>(mut dummy: T) -> T
+     {IValue::BLACK_BOX, {1, {IRT::FirstGeneric}, IRT::FirstGeneric}},
+ };
+ 
+ IntrinsicCheckResult
+ IntrinsicChecker::check (const TyTy::FnType *fntype)
+ {
+   auto it = intrinsic_rules.find (fntype->get_identifier ());
+   if (it == intrinsic_rules.end ())
+     {
+       rust_error_at (fntype->get_locus (), ErrorCode::E0093,
+ 		     "unrecognized intrinsic function: %qs",
+ 		     fntype->get_identifier ().c_str ());
+       return IntrinsicCheckResult::Invalid;
+     }
+   auto rule = &it->second;
+ 
+   if (fntype->get_substs ().size () != rule->generic_count)
+     {
+       rust_error_at (fntype->get_locus (), ErrorCode::E0094,
+ 		     "intrinsic has wrong number of type parameters: found "
+ 		     "%lu, expected %lu",
+ 		     (unsigned long) fntype->get_substs ().size (),
+ 		     (unsigned long) rule->generic_count);
+       return IntrinsicCheckResult::Invalid;
+     }
+ 
+   IntrinsicCheckResult result = IntrinsicCheckResult::Valid;
+ 
+   if (fntype->get_num_params () != rule->param_types.size ())
+     {
+       rust_error_at (fntype->get_locus (), ErrorCode::E0308,
+ 		     "intrinsic has wrong number of function parameters: found "
+ 		     "%lu, expected %lu",
+ 		     (unsigned long) fntype->get_params ().size (),
+ 		     (unsigned long) rule->param_types.size ());
+       result = IntrinsicCheckResult::Invalid;
+     }
+   else
+     {
+       for (size_t i = 0; i < rule->param_types.size (); i++)
+ 	{
+ 	  const TyTy::BaseType *actual_param
+ 	    = fntype->get_params ().at (i).get_type ();
+ 	  IntrinsicRuleType expected_type = rule->param_types.at (i);
+ 
+ 	  if (!check_type (actual_param, expected_type, fntype))
+ 	    {
+ 	      rust_error_at (fntype->get_locus (), ErrorCode::E0308,
+ 			     "intrinsic has wrong type");
+ 	      result = IntrinsicCheckResult::Invalid;
+ 	    }
+ 	}
+     }
+ 
+   if (!check_type (fntype->get_return_type (), rule->return_type, fntype))
+     {
+       rust_error_at (fntype->get_locus (), ErrorCode::E0308,
+ 		     "intrinsic has wrong type");
+       result = IntrinsicCheckResult::Invalid;
+     }
+ 
+   if (result == IntrinsicCheckResult::Invalid)
+     {
+       rust_inform (fntype->get_locus (), "expected fn pointer %qs",
+ 		   expected_intrinsic_as_string (fntype).c_str ());
+       rust_inform (fntype->get_locus (), "   found fn pointer %qs",
+ 		   found_intrinsic_as_string (fntype).c_str ());
+     }
+   return result;
+ }
+ 
+ bool
+ IntrinsicChecker::check_type (const TyTy::BaseType *actual,
+ 			      IntrinsicRuleType expected,
+ 			      const TyTy::FnType *fntype)
+ {
+   switch (expected)
+     {
+     case IRT::Bool:
+       return actual->get_kind () == TyTy::TypeKind::BOOL;
+     case IRT::F32:
+       return actual->get_kind () == TyTy::TypeKind::FLOAT
+ 	     && static_cast<const TyTy::FloatType *> (actual)->get_float_kind ()
+ 		  == TyTy::FloatType::FloatKind::F32;
+     case IRT::F64:
+       return actual->get_kind () == TyTy::TypeKind::FLOAT
+ 	     && static_cast<const TyTy::FloatType *> (actual)->get_float_kind ()
+ 		  == TyTy::FloatType::FloatKind::F64;
+     case IRT::I32:
+       return actual->get_kind () == TyTy::TypeKind::INT
+ 	     && static_cast<const TyTy::IntType *> (actual)->get_int_kind ()
+ 		  == TyTy::IntType::IntKind::I32;
+     case IRT::Isize:
+       return actual->get_kind () == TyTy::TypeKind::ISIZE;
+     case IRT::U8:
+       return actual->get_kind () == TyTy::TypeKind::UINT
+ 	     && static_cast<const TyTy::UintType *> (actual)->get_uint_kind ()
+ 		  == TyTy::UintType::UintKind::U8;
+     case IRT::U64:
+       return actual->get_kind () == TyTy::TypeKind::UINT
+ 	     && static_cast<const TyTy::UintType *> (actual)->get_uint_kind ()
+ 		  == TyTy::UintType::UintKind::U64;
+     case IRT::Usize:
+       return actual->get_kind () == TyTy::TypeKind::USIZE;
+     case IRT::Unit:
+       return actual->is_unit ();
+     case IRT::Never:
+       return actual->get_kind () == TyTy::TypeKind::NEVER;
+ 
+     case IRT::FirstGeneric:
+     case IRT::SecondGeneric:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::PARAM)
+ 	  return false;
+ 
+ 	auto param = static_cast<const TyTy::ParamType *> (actual);
+ 	size_t expected_index = (expected == IRT::FirstGeneric) ? 0 : 1;
+ 	if (fntype->get_substs ().size () <= expected_index)
+ 	  return false;
+ 	auto expected_param
+ 	  = fntype->get_substs ().at (expected_index).get_param_ty ();
+ 	return param->get_ty_ref () == expected_param->get_ty_ref ();
+       }
+     case IRT::ConstPtrFirstGeneric:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::POINTER)
+ 	  return false;
+ 	auto ptr = static_cast<const TyTy::PointerType *> (actual);
+ 	if (!ptr->is_const ())
+ 	  return false;
+ 	return check_type (ptr->get_base (), IntrinsicRuleType::FirstGeneric,
+ 			   fntype);
+       }
+     case IRT::MutPtrFirstGeneric:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::POINTER)
+ 	  return false;
+ 	auto ptr = static_cast<const TyTy::PointerType *> (actual);
+ 	if (!ptr->is_mutable ())
+ 	  return false;
+ 	return check_type (ptr->get_base (), IntrinsicRuleType::FirstGeneric,
+ 			   fntype);
+       }
+     case IRT::RefFirstGeneric:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::REF)
+ 	  return false;
+ 	auto ref = static_cast<const TyTy::ReferenceType *> (actual);
+ 	if (ref->is_mutable ())
+ 	  return false;
+ 	return check_type (ref->get_base (), IntrinsicRuleType::FirstGeneric,
+ 			   fntype);
+       }
+     case IRT::RefAdt:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::REF)
+ 	  return false;
+ 	auto ref = static_cast<const TyTy::ReferenceType *> (actual);
+ 	if (ref->is_mutable ())
+ 	  return false;
+ 	return ref->get_base ()->get_kind () == TyTy::TypeKind::ADT;
+       }
+     case IRT::MutPtrU8:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::POINTER)
+ 	  return false;
+ 	auto ptr = static_cast<const TyTy::PointerType *> (actual);
+ 	if (!ptr->is_mutable ())
+ 	  return false;
+ 	return check_type (ptr->get_base (), IRT::U8, fntype);
+       }
+     case IRT::RefStaticStr:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::REF)
+ 	  return false;
+ 	auto ref = static_cast<const TyTy::ReferenceType *> (actual);
+ 	if (ref->is_mutable ())
+ 	  return false;
+ 	return ref->get_base ()->get_kind () == TyTy::TypeKind::STR;
+       }
+     case IRT::AssocTypePlaceholder:
+       return actual->get_kind () == TyTy::TypeKind::PLACEHOLDER;
+ 
+     case IRT::TupleFirstGenericAndBool:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::TUPLE)
+ 	  return false;
+ 	auto tuple = static_cast<const TyTy::TupleType *> (actual);
+ 	if (tuple->num_fields () != 2)
+ 	  return false;
+ 	return tuple->get_field (1)->get_kind () == TyTy::TypeKind::BOOL
+ 	       && check_type (tuple->get_field (0),
+ 			      IntrinsicRuleType::FirstGeneric, fntype);
+       }
+ 
+     case IRT::Fn_MutPtrU8:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::FNPTR)
+ 	  return false;
+ 	auto fn = static_cast<const TyTy::FnPtr *> (actual);
+ 	if (!fn->get_return_type ()->is_unit ())
+ 	  return false;
+ 	if (fn->get_num_params () != 1)
+ 	  return false;
+ 	return check_type (fn->get_param_type_at (0), IRT::MutPtrU8, fntype);
+       }
+     case IRT::Fn_MutPtrU8MutPtrU8:
+       {
+ 	if (actual->get_kind () != TyTy::TypeKind::FNPTR)
+ 	  return false;
+ 	auto fn = static_cast<const TyTy::FnPtr *> (actual);
+ 	if (!fn->get_return_type ()->is_unit ())
+ 	  return false;
+ 	if (fn->get_num_params () != 2)
+ 	  return false;
+ 	return check_type (fn->get_param_type_at (0), IRT::MutPtrU8, fntype)
+ 	       && check_type (fn->get_param_type_at (1), IRT::MutPtrU8, fntype);
+       }
+ 
+     default:
+       rust_unreachable ();
+     };
+   return true;
+ }
+ 
+ static std::string
+ to_string (const TyTy::BaseType *type, const TyTy::FnType *fntype)
+ {
+   switch (type->get_kind ())
+     {
+     case TyTy::TypeKind::BOOL:
+       return "bool";
+     case TyTy::TypeKind::USIZE:
+       return "usize";
+     case TyTy::TypeKind::ISIZE:
+       return "isize";
+     case TyTy::TypeKind::NEVER:
+       return "!";
+     case TyTy::TypeKind::STR:
+       return "str";
+ 
+     case TyTy::TypeKind::INT:
+       {
+ 	auto int_ty = static_cast<const TyTy::IntType *> (type);
+ 	switch (int_ty->get_int_kind ())
+ 	  {
+ 	  case TyTy::IntType::IntKind::I8:
+ 	    return "i8";
+ 	  case TyTy::IntType::IntKind::I16:
+ 	    return "i16";
+ 	  case TyTy::IntType::IntKind::I32:
+ 	    return "i32";
+ 	  case TyTy::IntType::IntKind::I64:
+ 	    return "i64";
+ 	  case TyTy::IntType::IntKind::I128:
+ 	    return "i128";
+ 	  }
+ 	rust_unreachable ();
+       }
+ 
+     case TyTy::TypeKind::UINT:
+       {
+ 	auto uint_ty = static_cast<const TyTy::UintType *> (type);
+ 	switch (uint_ty->get_uint_kind ())
+ 	  {
+ 	  case TyTy::UintType::UintKind::U8:
+ 	    return "u8";
+ 	  case TyTy::UintType::UintKind::U16:
+ 	    return "u16";
+ 	  case TyTy::UintType::UintKind::U32:
+ 	    return "u32";
+ 	  case TyTy::UintType::UintKind::U64:
+ 	    return "u64";
+ 	  case TyTy::UintType::UintKind::U128:
+ 	    return "u128";
+ 	  }
+ 	rust_unreachable ();
+       }
+ 
+     case TyTy::TypeKind::FLOAT:
+       {
+ 	auto float_ty = static_cast<const TyTy::FloatType *> (type);
+ 	switch (float_ty->get_float_kind ())
+ 	  {
+ 	  case TyTy::FloatType::FloatKind::F32:
+ 	    return "f32";
+ 	  case TyTy::FloatType::FloatKind::F64:
+ 	    return "f64";
+ 	  }
+ 	rust_unreachable ();
+       }
+ 
+     case TyTy::TypeKind::PARAM:
+       {
+ 	auto param = static_cast<const TyTy::ParamType *> (type);
+ 	if (fntype != nullptr)
+ 	  {
+ 	    auto substs = fntype->get_substs ();
+ 	    for (size_t i = 0; i < substs.size (); i++)
+ 	      {
+ 		if (substs[i].get_param_ty ()->get_ty_ref ()
+ 		    == param->get_ty_ref ())
+ 		  return "P" + std::to_string (i);
+ 	      }
+ 	  }
+ 	return param->get_symbol ();
+       }
+ 
+     case TyTy::TypeKind::POINTER:
+       {
+ 	auto ptr = static_cast<const TyTy::PointerType *> (type);
+ 	std::string prefix = ptr->is_mutable () ? "*mut "
+ 			     : ptr->is_const () ? "*const "
+ 						: "*";
+ 	return prefix + to_string (ptr->get_base (), fntype);
+       }
+ 
+     case TyTy::TypeKind::REF:
+       {
+ 	auto ref = static_cast<const TyTy::ReferenceType *> (type);
+ 	std::string prefix = ref->is_mutable () ? "&mut " : "&";
+ 	return prefix + to_string (ref->get_base (), fntype);
+       }
+ 
+     case TyTy::TypeKind::TUPLE:
+       {
+ 	auto tuple = static_cast<const TyTy::TupleType *> (type);
+ 	if (tuple->num_fields () == 0)
+ 	  return "()";
+ 
+ 	std::string res = "(";
+ 	for (size_t i = 0; i < tuple->num_fields (); i++)
+ 	  {
+ 	    if (i > 0)
+ 	      res += ", ";
+ 	    res += to_string (tuple->get_field (i), fntype);
+ 	  }
+ 	res += ")";
+ 	return res;
+       }
+ 
+     case TyTy::TypeKind::FNPTR:
+       {
+ 	auto fnptr = static_cast<const TyTy::FnPtr *> (type);
+ 	std::string res = "fn(";
+ 	for (size_t i = 0; i < fnptr->get_num_params (); i++)
+ 	  {
+ 	    if (i > 0)
+ 	      res += ", ";
+ 	    res += to_string (fnptr->get_param_type_at (i), fntype);
+ 	  }
+ 	res += ")";
+ 	if (!fnptr->get_return_type ()->is_unit ()
+ 	    || fnptr->get_return_type ()->get_kind () == TyTy::TypeKind::NEVER)
+ 	  {
+ 	    res += " -> ";
+ 	    res += to_string (fnptr->get_return_type (), fntype);
+ 	  }
+ 	return res;
+       }
+ 
+     case TyTy::TypeKind::ADT:
+       {
+ 	auto adt = static_cast<const TyTy::ADTType *> (type);
+ 	return adt->get_name ();
+       }
+ 
+     case TyTy::TypeKind::PLACEHOLDER:
+       {
+ 	auto ph = static_cast<const TyTy::PlaceholderType *> (type);
+ 	return "<" + ph->get_symbol () + ">";
+       }
+ 
+     default:
+       return type->as_string ();
+     }
+ }
+ 
+ static std::string
+ to_string (IntrinsicRuleType ty)
+ {
+   switch (ty)
+     {
+     case IRT::Bool:
+       return "bool";
+     case IRT::F32:
+       return "f32";
+     case IRT::F64:
+       return "f64";
+     case IRT::I32:
+       return "i32";
+     case IRT::Isize:
+       return "isize";
+     case IRT::U8:
+       return "u8";
+     case IRT::U64:
+       return "u64";
+     case IRT::Usize:
+       return "usize";
+     case IRT::Unit:
+       return "()";
+     case IRT::Never:
+       return "!";
+ 
+     case IRT::FirstGeneric:
+       return "P0";
+     case IRT::SecondGeneric:
+       return "P1";
+ 
+     case IRT::ConstPtrFirstGeneric:
+       return "*const P0";
+     case IRT::MutPtrFirstGeneric:
+       return "*mut P0";
+     case IRT::RefFirstGeneric:
+       return "&P0";
+ 
+     case IRT::RefAdt:
+       return "&<ADT>";
+     case IRT::MutPtrU8:
+       return "*mut u8";
+     case IRT::RefStaticStr:
+       return "&'static str";
+     case IRT::AssocTypePlaceholder:
+       return "<AssocType>";
+ 
+     case IRT::TupleFirstGenericAndBool:
+       return "(P0, bool)";
+ 
+     case IRT::Fn_MutPtrU8:
+       return "fn(*mut u8)";
+     case IRT::Fn_MutPtrU8MutPtrU8:
+       return "fn(*mut u8, *mut u8)";
+     };
+   rust_unreachable ();
+ }
+ 
+ std::string
+ IntrinsicChecker::expected_intrinsic_as_string (const TyTy::FnType *fntype)
+ {
+   auto it = intrinsic_rules.find (fntype->get_identifier ());
+   rust_assert (it != intrinsic_rules.end ());
+   auto rule = &it->second;
+   std::stringstream result;
+   result << "extern \"rust-intrinsic\" fn(";
+   if (rule->param_types.size () > 0)
+     {
+       for (size_t i = 0; i < rule->param_types.size (); i++)
+ 	{
+ 	  if (i != 0)
+ 	    result << ", ";
+ 	  result << to_string (rule->param_types.at (i));
+ 	}
+     }
+   result << ")";
+   if (rule->return_type != IntrinsicRuleType::Unit)
+     {
+       result << " -> " << to_string (rule->return_type);
+     }
+   return result.str ();
+ }
+ 
+ std::string
+ IntrinsicChecker::found_intrinsic_as_string (const TyTy::FnType *fntype)
+ {
+   std::stringstream result;
+   result << "extern \"rust-intrinsic\" fn(";
+   if (fntype->get_num_params () > 0)
+     {
+       const auto &params = fntype->get_params ();
+       for (size_t i = 0; i < params.size (); i++)
+ 	{
+ 	  if (i != 0)
+ 	    result << ", ";
+ 	  result << to_string (params.at (i).get_type (), fntype);
+ 	}
+     }
+   result << ")";
+   if (!fntype->get_return_type ()->is_unit ()
+       || fntype->get_return_type ()->get_kind () == TyTy::TypeKind::NEVER)
+     {
+       result << " -> " << to_string (fntype->get_return_type (), fntype);
+     }
+   return result.str ();
+ }
+ 
+ } // namespace Resolver
+ } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-intrinsic.h gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-intrinsic.h
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-intrinsic.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-intrinsic.h	Sun Jun 28 22:32:10 2026
***************
*** 0 ****
--- 1,89 ----
+ // Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ // This file is part of GCC.
+ 
+ // GCC is free software; you can redistribute it and/or modify it under
+ // the terms of the GNU General Public License as published by the Free
+ // Software Foundation; either version 3, or (at your option) any later
+ // version.
+ 
+ // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ // WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ // for more details.
+ 
+ // You should have received a copy of the GNU General Public License
+ // along with GCC; see the file COPYING3.  If not see
+ // <http://www.gnu.org/licenses/>.
+ 
+ #ifndef RUST_HIR_TYPE_CHECK_INTRINSIC_H
+ #define RUST_HIR_TYPE_CHECK_INTRINSIC_H
+ 
+ #include "rust-tyty.h"
+ 
+ namespace Rust {
+ namespace Resolver {
+ 
+ enum class IntrinsicRuleType
+ {
+   Bool,
+   F32,
+   F64,
+   I32,
+   Isize,
+   U8,
+   U64,
+   Usize,
+   Unit,
+   Never,
+ 
+   FirstGeneric,	 // <T>
+   SecondGeneric, // <U>
+ 
+   ConstPtrFirstGeneric, // *const T
+   MutPtrFirstGeneric,	// *mut T
+   RefFirstGeneric,	// &T
+ 
+   RefAdt,   // for caller_location() -> &'static crate::panic::Location<'static>
+   MutPtrU8, // *mut u8
+   RefStaticStr, // &'static str
+   AssocTypePlaceholder,
+   // for discriminant_value<T>(v: &T) -> <T as DiscriminantKind>::Discriminant
+ 
+   TupleFirstGenericAndBool, // (T, bool)
+ 
+   Fn_MutPtrU8,	       // fn(*mut u8)
+   Fn_MutPtrU8MutPtrU8, // fn(*mut u8, *mut u8)
+ };
+ 
+ struct IntrinsicRules
+ {
+   size_t generic_count;
+   std::vector<IntrinsicRuleType> param_types;
+   IntrinsicRuleType return_type;
+ };
+ 
+ enum class IntrinsicCheckResult
+ {
+   Valid,
+   Invalid,
+ };
+ 
+ class IntrinsicChecker
+ {
+ public:
+   static IntrinsicCheckResult check (const TyTy::FnType *fntype);
+ 
+ private:
+   static const std::unordered_map<std::string, IntrinsicRules> intrinsic_rules;
+   static bool check_type (const TyTy::BaseType *actual,
+ 			  IntrinsicRuleType expected,
+ 			  const TyTy::FnType *fntype);
+   static std::string expected_intrinsic_as_string (const TyTy::FnType *fntype);
+   static std::string found_intrinsic_as_string (const TyTy::FnType *fntype);
+ };
+ 
+ } // namespace Resolver
+ } // namespace Rust
+ 
+ #endif
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-item.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-item.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-item.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-item.cc	Sun Jun 28 22:32:10 2026
***************
*** 28,35 ****
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-trait-resolve.h"
  #include "rust-identifier.h"
  #include "rust-session-manager.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
  #include "rust-tyty-variance-analysis.h"
--- 28,36 ----
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-trait-resolve.h"
  #include "rust-identifier.h"
+ #include "rust-rib.h"
  #include "rust-session-manager.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
  #include "rust-tyty-variance-analysis.h"
*************** TypeCheckItem::visit (HIR::TupleStruct &
*** 205,215 ****
  
    // get the path
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath path
!     = nr_ctx.to_canonical_path (struct_decl.get_mappings ().get_nodeid ());
  
    RustIdent ident{path, struct_decl.get_locus ()};
  
--- 206,216 ----
  
    // get the path
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath path
!     = nr_ctx.to_canonical_path (struct_decl.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{path, struct_decl.get_locus ()};
  
*************** TypeCheckItem::visit (HIR::StructStruct
*** 274,284 ****
        context->insert_type (field.get_mappings (), ty_field->get_field_type ());
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath path
!     = nr_ctx.to_canonical_path (struct_decl.get_mappings ().get_nodeid ());
  
    RustIdent ident{path, struct_decl.get_locus ()};
  
--- 275,285 ----
        context->insert_type (field.get_mappings (), ty_field->get_field_type ());
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath path
!     = nr_ctx.to_canonical_path (struct_decl.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{path, struct_decl.get_locus ()};
  
*************** TypeCheckItem::visit (HIR::Enum &enum_de
*** 352,363 ****
  	}
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    // get the path
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (enum_decl.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, enum_decl.get_locus ()};
  
--- 353,364 ----
  	}
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    // get the path
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (enum_decl.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, enum_decl.get_locus ()};
  
*************** TypeCheckItem::visit (HIR::Union &union_
*** 405,416 ****
  			    ty_variant->get_field_type ());
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    // get the path
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (union_decl.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, union_decl.get_locus ()};
  
--- 406,417 ----
  			    ty_variant->get_field_type ());
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    // get the path
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (union_decl.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, union_decl.get_locus ()};
  
*************** TypeCheckItem::visit (HIR::Function &fun
*** 570,580 ****
  			   param_tyty);
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath path
!     = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid ());
  
    RustIdent ident{path, function.get_locus ()};
  
--- 571,581 ----
  			   param_tyty);
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath path
!     = nr_ctx.to_canonical_path (function.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Values);
  
    RustIdent ident{path, function.get_locus ()};
  
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-path.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-path.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-path.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-path.cc	Sun Jun 28 22:32:10 2026
***************
*** 23,35 ****
  #include "rust-hir-type-check-type.h"
  #include "rust-hir-type-check-item.h"
  #include "rust-hir-trait-resolve.h"
  #include "rust-substitution-mapper.h"
  #include "rust-hir-path-probe.h"
  #include "rust-type-util.h"
  #include "rust-hir-type-bounds.h"
  #include "rust-hir-item.h"
  #include "rust-session-manager.h"
! #include "rust-immutable-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
--- 23,36 ----
  #include "rust-hir-type-check-type.h"
  #include "rust-hir-type-check-item.h"
  #include "rust-hir-trait-resolve.h"
+ #include "rust-rib.h"
  #include "rust-substitution-mapper.h"
  #include "rust-hir-path-probe.h"
  #include "rust-type-util.h"
  #include "rust-hir-type-bounds.h"
  #include "rust-hir-item.h"
  #include "rust-session-manager.h"
! #include "rust-finalized-name-resolution-context.h"
  
  namespace Rust {
  namespace Resolver {
*************** TypeCheckExpr::visit (HIR::QualifiedPath
*** 157,167 ****
    bool fully_resolved = expr.get_segments ().size () <= 1;
    if (fully_resolved)
      {
!       auto &nr_ctx = const_cast<Resolver2_0::NameResolutionContext &> (
! 	Resolver2_0::ImmutableNameResolutionContext::get ().resolver ());
  
        nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 			Resolver2_0::Definition (root_resolved_node_id));
        return;
      }
  
--- 158,168 ----
    bool fully_resolved = expr.get_segments ().size () <= 1;
    if (fully_resolved)
      {
!       auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
        nr_ctx.map_usage (Resolver2_0::Usage (expr.get_mappings ().get_nodeid ()),
! 			Resolver2_0::Definition (root_resolved_node_id),
! 			Resolver2_0::Namespace::Values);
        return;
      }
  
*************** TypeCheckExpr::resolve_root_path (HIR::P
*** 255,268 ****
        bool is_root = *offset == 0;
        NodeId ast_node_id = seg.get_mappings ().get_nodeid ();
  
!       auto &nr_ctx
! 	= Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
        // lookup the reference_node_id
        NodeId ref_node_id;
!       if (auto res = nr_ctx.lookup (ast_node_id))
  	{
! 	  ref_node_id = *res;
  	}
        else
  	{
--- 256,269 ----
        bool is_root = *offset == 0;
        NodeId ast_node_id = seg.get_mappings ().get_nodeid ();
  
!       auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
        // lookup the reference_node_id
        NodeId ref_node_id;
!       if (auto res = nr_ctx.lookup (ast_node_id, Resolver2_0::Namespace::Types,
! 				    Resolver2_0::Namespace::Values))
  	{
! 	  ref_node_id = res->id;
  	}
        else
  	{
*************** TypeCheckExpr::resolve_segments (NodeId
*** 544,554 ****
  
    rust_assert (resolved_node_id != UNKNOWN_NODEID);
  
!   auto &nr_ctx = const_cast<Resolver2_0::NameResolutionContext &> (
!     Resolver2_0::ImmutableNameResolutionContext::get ().resolver ());
  
    nr_ctx.map_usage (Resolver2_0::Usage (expr_mappings.get_nodeid ()),
! 		    Resolver2_0::Definition (resolved_node_id));
  
    infered = tyseg;
  }
--- 545,555 ----
  
    rust_assert (resolved_node_id != UNKNOWN_NODEID);
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    nr_ctx.map_usage (Resolver2_0::Usage (expr_mappings.get_nodeid ()),
! 		    Resolver2_0::Definition (resolved_node_id),
! 		    Resolver2_0::Namespace::Values);
  
    infered = tyseg;
  }
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-pattern.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-pattern.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-pattern.cc	Sun Jun 28 22:32:10 2026
***************
*** 19,27 ****
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-pattern.h"
  #include "rust-hir-type-check-expr.h"
  #include "rust-token.h"
  #include "rust-type-util.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-tyty.h"
  #include "tree.h"
  
--- 19,28 ----
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-pattern.h"
  #include "rust-hir-type-check-expr.h"
+ #include "rust-rib.h"
  #include "rust-token.h"
  #include "rust-type-util.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-tyty.h"
  #include "tree.h"
  
*************** TypeCheckPattern::Resolve (HIR::Pattern
*** 48,65 ****
  void
  TypeCheckPattern::visit (HIR::PathInExpression &pattern)
  {
!   // Pattern must be enum variants, sturcts, constants, or associated constansts
    TyTy::BaseType *pattern_ty = TypeCheckExpr::Resolve (pattern);
  
    NodeId ref_node_id = UNKNOWN_NODEID;
    bool maybe_item = false;
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
!   if (auto id = nr_ctx.lookup (pattern.get_mappings ().get_nodeid ()))
      {
!       ref_node_id = *id;
        maybe_item = true;
      }
  
--- 49,67 ----
  void
  TypeCheckPattern::visit (HIR::PathInExpression &pattern)
  {
!   // Pattern must be enum variants, structs, constants, or associated constansts
    TyTy::BaseType *pattern_ty = TypeCheckExpr::Resolve (pattern);
  
    NodeId ref_node_id = UNKNOWN_NODEID;
    bool maybe_item = false;
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
!   if (auto nslookup = nr_ctx.lookup (pattern.get_mappings ().get_nodeid (),
! 				     Resolver2_0::Namespace::Values,
! 				     Resolver2_0::Namespace::Types))
      {
!       ref_node_id = nslookup->id;
        maybe_item = true;
      }
  
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-type.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-type.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check-type.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check-type.cc	Sun Jun 28 22:32:10 2026
***************
*** 24,35 ****
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-path-probe.h"
  #include "rust-hir-type-bounds.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "rust-mapping-common.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
  #include "rust-system.h"
  #include "rust-compile-base.h"
  
  namespace Rust {
  namespace Resolver {
--- 24,37 ----
  #include "rust-hir-type-check-expr.h"
  #include "rust-hir-path-probe.h"
  #include "rust-hir-type-bounds.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "rust-mapping-common.h"
+ #include "rust-rib.h"
  #include "rust-substitution-mapper.h"
  #include "rust-type-util.h"
  #include "rust-system.h"
  #include "rust-compile-base.h"
+ #include "rust-resolve-builtins.h"
  
  namespace Rust {
  namespace Resolver {
*************** TypeCheckType::resolve_root_path (HIR::T
*** 343,355 ****
  	  seg->get_lang_item ());
        else
  	{
! 	  auto &nr_ctx
! 	    = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
  	  // assign the ref_node_id if we've found something
! 	  nr_ctx.lookup (ast_node_id).map ([&ref_node_id] (NodeId resolved) {
! 	    ref_node_id = resolved;
! 	  });
  	}
  
        // ref_node_id is the NodeId that the segments refers to.
--- 345,363 ----
  	  seg->get_lang_item ());
        else
  	{
! 	  auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
  	  // assign the ref_node_id if we've found something
! 	  nr_ctx.lookup (ast_node_id, Resolver2_0::Namespace::Types)
! 	    .map ([&ref_node_id] (NodeId resolved) { ref_node_id = resolved; });
! 
! 	  // TODO: Should we add a special method to the name resolver to handle
! 	  // that case? Resolving something in the Types NS when we want to
! 	  // prioritize builtin types over modules or other conflicting things?
! 	  if (auto builtin_type_id
! 	      = Resolver2_0::Builtins::find_builtin_node_id (seg->to_string ()))
! 	    if (mappings.is_module (ref_node_id))
! 	      ref_node_id = builtin_type_id.value ();
  	}
  
        // ref_node_id is the NodeId that the segments refers to.
*************** TypeCheckType::resolve_root_path (HIR::T
*** 412,418 ****
  	  // A::B::C::this_is_a_module
  	  //          ^^^^^^^^^^^^^^^^
  	  // This is an error, we are not expecting a module.
! 	  rust_error_at (seg->get_locus (), "expected value");
  	  return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	}
  
--- 420,427 ----
  	  // A::B::C::this_is_a_module
  	  //          ^^^^^^^^^^^^^^^^
  	  // This is an error, we are not expecting a module.
! 	  rust_error_at (seg->get_locus (), "expected value, got module");
! 
  	  return new TyTy::ErrorType (path.get_mappings ().get_hirid ());
  	}
  
*************** ResolveWhereClauseItem::visit (HIR::Type
*** 1108,1117 ****
    // then lookup the reference_node_id
    NodeId ref_node_id = UNKNOWN_NODEID;
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
!   if (auto id = nr_ctx.lookup (ast_node_id))
      {
        ref_node_id = *id;
      }
--- 1117,1125 ----
    // then lookup the reference_node_id
    NodeId ref_node_id = UNKNOWN_NODEID;
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
!   if (auto id = nr_ctx.lookup (ast_node_id, Resolver2_0::Namespace::Types))
      {
        ref_node_id = *id;
      }
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check.cc gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-hir-type-check.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-hir-type-check.cc	Sun Jun 28 22:32:10 2026
***************
*** 24,30 ****
  #include "rust-hir-type-check-item.h"
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-type-check-struct-field.h"
! #include "rust-immutable-name-resolution-context.h"
  
  extern bool saw_errors (void);
  
--- 24,31 ----
  #include "rust-hir-type-check-item.h"
  #include "rust-hir-type-check-pattern.h"
  #include "rust-hir-type-check-struct-field.h"
! #include "rust-finalized-name-resolution-context.h"
! #include "rust-rib.h"
  
  extern bool saw_errors (void);
  
*************** TraitItemReference::get_type_from_fn (/*
*** 275,285 ****
  			   param_tyty);
      }
  
!   auto &nr_ctx
!     = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (fn.get_mappings ().get_nodeid ());
  
    RustIdent ident{canonical_path, fn.get_locus ()};
    auto resolved = new TyTy::FnType (
--- 276,286 ----
  			   param_tyty);
      }
  
!   auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
    CanonicalPath canonical_path
!     = nr_ctx.to_canonical_path (fn.get_mappings ().get_nodeid (),
! 				Resolver2_0::Namespace::Types);
  
    RustIdent ident{canonical_path, fn.get_locus ()};
    auto resolved = new TyTy::FnType (
diff -Nrcpad gcc-17-20260621/gcc/rust/typecheck/rust-type-util.cc gcc-17-20260628/gcc/rust/typecheck/rust-type-util.cc
*** gcc-17-20260621/gcc/rust/typecheck/rust-type-util.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/typecheck/rust-type-util.cc	Sun Jun 28 22:32:10 2026
***************
*** 25,34 ****
  #include "rust-hir-type-check-type.h"
  #include "rust-casts.h"
  #include "rust-mapping-common.h"
  #include "rust-unify.h"
  #include "rust-coercion.h"
  #include "rust-hir-type-bounds.h"
! #include "rust-immutable-name-resolution-context.h"
  #include "options.h"
  
  namespace Rust {
--- 25,35 ----
  #include "rust-hir-type-check-type.h"
  #include "rust-casts.h"
  #include "rust-mapping-common.h"
+ #include "rust-rib.h"
  #include "rust-unify.h"
  #include "rust-coercion.h"
  #include "rust-hir-type-bounds.h"
! #include "rust-finalized-name-resolution-context.h"
  #include "options.h"
  
  namespace Rust {
*************** query_type (HirId reference, TyTy::BaseT
*** 103,115 ****
  	  NodeId ref_node_id = UNKNOWN_NODEID;
  	  NodeId ast_node_id = ty.get_mappings ().get_nodeid ();
  
! 	  auto &nr_ctx
! 	    = Resolver2_0::ImmutableNameResolutionContext::get ().resolver ();
  
  	  // assign the ref_node_id if we've found something
! 	  nr_ctx.lookup (ast_node_id).map ([&ref_node_id] (NodeId resolved) {
! 	    ref_node_id = resolved;
! 	  });
  
  	  if (ref_node_id != UNKNOWN_NODEID)
  	    {
--- 104,114 ----
  	  NodeId ref_node_id = UNKNOWN_NODEID;
  	  NodeId ast_node_id = ty.get_mappings ().get_nodeid ();
  
! 	  auto &nr_ctx = Resolver2_0::FinalizedNameResolutionContext::get ();
  
  	  // assign the ref_node_id if we've found something
! 	  nr_ctx.lookup (ast_node_id, Resolver2_0::Namespace::Types)
! 	    .map ([&ref_node_id] (NodeId resolved) { ref_node_id = resolved; });
  
  	  if (ref_node_id != UNKNOWN_NODEID)
  	    {
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-attribute-values.h gcc-17-20260628/gcc/rust/util/rust-attribute-values.h
*** gcc-17-20260621/gcc/rust/util/rust-attribute-values.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-attribute-values.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 44,49 ****
--- 44,51 ----
    static constexpr auto &NO_STD = "no_std";
    static constexpr auto &LINK_SECTION = "link_section";
    static constexpr auto &NO_MANGLE = "no_mangle";
+   static constexpr auto &RUSTC_STD_INTERNAL_SYMBOL
+     = "rustc_std_internal_symbol";
    static constexpr auto &EXPORT_NAME = "export_name";
    static constexpr auto &REPR = "repr";
    static constexpr auto &RUSTC_BUILTIN_MACRO = "rustc_builtin_macro";
*************** public:
*** 105,110 ****
--- 107,115 ----
  
    static constexpr auto &RUSTC_ARGS_REQUIRED_CONST
      = "rustc_args_required_const";
+ 
+   static constexpr auto &RUSTC_ALLOCATOR = "rustc_allocator";
+   static constexpr auto &RUSTC_ALLOCATOR_NOUNWIND = "rustc_allocator_nounwind";
  };
  } // namespace Values
  } // namespace Rust
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-attributes.cc gcc-17-20260628/gcc/rust/util/rust-attributes.cc
*** gcc-17-20260621/gcc/rust/util/rust-attributes.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-attributes.cc	Sun Jun 28 22:32:10 2026
*************** static const BuiltinAttrDefinition __def
*** 44,49 ****
--- 44,50 ----
       {Attrs::LINK_NAME, CODE_GENERATION},
       {Attrs::LINK_SECTION, CODE_GENERATION},
       {Attrs::NO_MANGLE, CODE_GENERATION},
+      {Attrs::RUSTC_STD_INTERNAL_SYMBOL, CODE_GENERATION},
       {Attrs::EXPORT_NAME, CODE_GENERATION},
       {Attrs::REPR, CODE_GENERATION},
       {Attrs::RUSTC_BUILTIN_MACRO, EXPANSION},
*************** static const BuiltinAttrDefinition __def
*** 93,99 ****
       {Attrs::FUNDAMENTAL, TYPE_CHECK},
       {Attrs::NON_EXHAUSTIVE, TYPE_CHECK},
       {Attrs::RUSTFMT, EXTERNAL},
!      {Attrs::TEST, CODE_GENERATION}};
  
  static const std::set<std::string> __outer_attributes
    = {Attrs::INLINE,
--- 94,102 ----
       {Attrs::FUNDAMENTAL, TYPE_CHECK},
       {Attrs::NON_EXHAUSTIVE, TYPE_CHECK},
       {Attrs::RUSTFMT, EXTERNAL},
!      {Attrs::TEST, CODE_GENERATION},
!      {Attrs::RUSTC_ALLOCATOR, CODE_GENERATION},
!      {Attrs::RUSTC_ALLOCATOR_NOUNWIND, CODE_GENERATION}};
  
  static const std::set<std::string> __outer_attributes
    = {Attrs::INLINE,
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-hir-map.cc gcc-17-20260628/gcc/rust/util/rust-hir-map.cc
*** gcc-17-20260621/gcc/rust/util/rust-hir-map.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-hir-map.cc	Sun Jun 28 22:32:10 2026
*************** Mappings::insert_glob_container (NodeId
*** 1168,1173 ****
--- 1168,1185 ----
      glob_containers[id] = container;
  }
  
+ void
+ Mappings::insert_module_id (NodeId id)
+ {
+   module_ids.insert (id);
+ }
+ 
+ bool
+ Mappings::is_module (NodeId id)
+ {
+   return module_ids.find (id) != module_ids.end ();
+ }
+ 
  tl::optional<AST::GlobContainer *>
  Mappings::lookup_glob_container (NodeId id)
  {
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-hir-map.h gcc-17-20260628/gcc/rust/util/rust-hir-map.h
*** gcc-17-20260621/gcc/rust/util/rust-hir-map.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-hir-map.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 323,328 ****
--- 323,332 ----
  
    void insert_glob_container (NodeId, AST::GlobContainer *);
    tl::optional<AST::GlobContainer *> lookup_glob_container (NodeId id);
+ 
+   void insert_module_id (NodeId);
+   bool is_module (NodeId id);
+ 
    void insert_module_child (NodeId module, NodeId child);
    tl::optional<std::vector<NodeId> &> lookup_module_children (NodeId module);
  
*************** private:
*** 441,450 ****
--- 445,457 ----
    // Module tree maps
  
    // Maps each module's node id to a list of its children
+   // TODO: I think these are only used by the old resolved and can be removed
    std::map<NodeId, std::vector<NodeId>> module_child_map;
    std::map<NodeId, std::vector<Resolver::CanonicalPath>> module_child_items;
    std::map<NodeId, NodeId> child_to_parent_module_map;
+ 
    std::map<NodeId, AST::GlobContainer *> glob_containers;
+   std::set<NodeId> module_ids;
  
    // AST mappings
    std::map<NodeId, AST::Item *> ast_item_mappings;
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-intrinsic-values.h gcc-17-20260628/gcc/rust/util/rust-intrinsic-values.h
*** gcc-17-20260621/gcc/rust/util/rust-intrinsic-values.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-intrinsic-values.h	Sun Jun 28 22:32:10 2026
*************** namespace Values {
*** 21,26 ****
--- 21,86 ----
  class Intrinsics
  {
  public:
+   static constexpr auto &UNREACHABLE = "unreachable";
+ 
+   // Math intrinsics
+   static constexpr auto &SQRTF32 = "sqrtf32";
+   static constexpr auto &SQRTF64 = "sqrtf64";
+ 
+   static constexpr auto &SINF32 = "sinf32";
+   static constexpr auto &SINF64 = "sinf64";
+ 
+   static constexpr auto &COSF32 = "cosf32";
+   static constexpr auto &COSF64 = "cosf64";
+ 
+   static constexpr auto &POWF32 = "powf32";
+   static constexpr auto &POWF64 = "powf64";
+ 
+   static constexpr auto &POWIF32 = "powif32";
+   static constexpr auto &POWIF64 = "powif64";
+ 
+   static constexpr auto &EXPF32 = "expf32";
+   static constexpr auto &EXPF64 = "expf64";
+ 
+   static constexpr auto &EXP2F32 = "exp2f32";
+   static constexpr auto &EXP2F64 = "exp2f64";
+ 
+   static constexpr auto &LOGF32 = "logf32";
+   static constexpr auto &LOGF64 = "logf64";
+ 
+   static constexpr auto &LOG10F32 = "log10f32";
+   static constexpr auto &LOG10F64 = "log10f64";
+ 
+   static constexpr auto &LOG2F32 = "log2f32";
+   static constexpr auto &LOG2F64 = "log2f64";
+ 
+   static constexpr auto &FMAF32 = "fmaf32";
+   static constexpr auto &FMAF64 = "fmaf64";
+ 
+   static constexpr auto &FABSF32 = "fabsf32";
+   static constexpr auto &FABSF64 = "fabsf64";
+ 
+   static constexpr auto &COPYSIGNF32 = "copysignf32";
+   static constexpr auto &COPYSIGNF64 = "copysignf64";
+ 
+   static constexpr auto &FLOORF32 = "floorf32";
+   static constexpr auto &FLOORF64 = "floorf64";
+ 
+   static constexpr auto &CEILF32 = "ceilf32";
+   static constexpr auto &CEILF64 = "ceilf64";
+ 
+   static constexpr auto &TRUNCF32 = "truncf32";
+   static constexpr auto &TRUNCF64 = "truncf64";
+ 
+   static constexpr auto &RINTF32 = "rintf32";
+   static constexpr auto &RINTF64 = "rintf64";
+ 
+   static constexpr auto &NEARBYINTF32 = "nearbyintf32";
+   static constexpr auto &NEARBYINTF64 = "nearbyintf64";
+ 
+   static constexpr auto &ROUNDF32 = "roundf32";
+   static constexpr auto &ROUNDF64 = "roundf64";
+ 
    static constexpr auto &ABORT = "abort";
    static constexpr auto &OFFSET = "offset";
    static constexpr auto &SIZE_OF = "size_of";
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-lang-item.cc gcc-17-20260628/gcc/rust/util/rust-lang-item.cc
*** gcc-17-20260621/gcc/rust/util/rust-lang-item.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-lang-item.cc	Sun Jun 28 22:32:10 2026
*************** const BiMap<std::string, LangItem::Kind>
*** 120,125 ****
--- 120,127 ----
    {"discriminant_kind", Kind::DISCRIMINANT_KIND},
    {"discriminant_type", Kind::DISCRIMINANT_TYPE},
    {"manually_drop", Kind::MANUALLY_DROP},
+ 
+   {"exchange_malloc", Kind::EXCHANGE_MALLOC},
  }};
  
  tl::optional<LangItem::Kind>
diff -Nrcpad gcc-17-20260621/gcc/rust/util/rust-lang-item.h gcc-17-20260628/gcc/rust/util/rust-lang-item.h
*** gcc-17-20260621/gcc/rust/util/rust-lang-item.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/rust/util/rust-lang-item.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 156,161 ****
--- 156,163 ----
      DISCRIMINANT_KIND,
  
      MANUALLY_DROP,
+ 
+     EXCHANGE_MALLOC
    };
  
    static const BiMap<std::string, Kind> lang_items;
diff -Nrcpad gcc-17-20260621/gcc/sched-int.h gcc-17-20260628/gcc/sched-int.h
*** gcc-17-20260621/gcc/sched-int.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/sched-int.h	Sun Jun 28 22:32:10 2026
*************** public:
*** 572,578 ****
  
    /* True when this context should be treated as a readonly by
       the analysis.  */
!   BOOL_BITFIELD readonly : 1;
  };
  
  typedef class deps_desc *deps_t;
--- 572,578 ----
  
    /* True when this context should be treated as a readonly by
       the analysis.  */
!   bool readonly : 1;
  };
  
  typedef class deps_desc *deps_t;
diff -Nrcpad gcc-17-20260621/gcc/sel-sched-ir.h gcc-17-20260628/gcc/sel-sched-ir.h
*** gcc-17-20260621/gcc/sel-sched-ir.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/sel-sched-ir.h	Sun Jun 28 22:32:10 2026
*************** struct _expr
*** 140,156 ****
  
    /* True when this expression needs a speculation check to be scheduled.
       This is used during find_used_regs.  */
!   BOOL_BITFIELD needs_spec_check_p : 1;
  
    /* True when the expression was substituted.  Used for statistical
       purposes.  */
!   BOOL_BITFIELD was_substituted : 1;
  
    /* True when the expression was renamed.  */
!   BOOL_BITFIELD was_renamed : 1;
  
    /* True when expression can't be moved.  */
!   BOOL_BITFIELD cant_move : 1;
  };
  
  typedef struct _expr expr_def;
--- 140,156 ----
  
    /* True when this expression needs a speculation check to be scheduled.
       This is used during find_used_regs.  */
!   bool needs_spec_check_p : 1;
  
    /* True when the expression was substituted.  Used for statistical
       purposes.  */
!   bool was_substituted : 1;
  
    /* True when the expression was renamed.  */
!   bool was_renamed : 1;
  
    /* True when expression can't be moved.  */
!   bool cant_move : 1;
  };
  
  typedef struct _expr expr_def;
*************** struct _fence
*** 286,301 ****
    rtx_insn *sched_next;
  
    /* True if fill_insns processed this fence.  */
!   BOOL_BITFIELD processed_p : 1;
  
    /* True if fill_insns actually scheduled something on this fence.  */
!   BOOL_BITFIELD scheduled_p : 1;
  
    /* True when the next insn scheduled here would start a cycle.  */
!   BOOL_BITFIELD starts_cycle_p : 1;
  
    /* True when the next insn scheduled here would be scheduled after a stall.  */
!   BOOL_BITFIELD after_stall_p : 1;
  };
  typedef struct _fence *fence_t;
  
--- 286,301 ----
    rtx_insn *sched_next;
  
    /* True if fill_insns processed this fence.  */
!   bool processed_p : 1;
  
    /* True if fill_insns actually scheduled something on this fence.  */
!   bool scheduled_p : 1;
  
    /* True when the next insn scheduled here would start a cycle.  */
!   bool starts_cycle_p : 1;
  
    /* True when the next insn scheduled here would be scheduled after a stall.  */
!   bool after_stall_p : 1;
  };
  typedef struct _fence *fence_t;
  
*************** struct transformed_insns
*** 702,711 ****
    enum local_trans_type type;
  
    /* Whether a conflict on the target register happened.  */
!   BOOL_BITFIELD was_target_conflict : 1;
  
    /* Whether a check was needed.  */
!   BOOL_BITFIELD needs_check : 1;
  };
  
  /* Indexed by INSN_LUID, the collection of all data associated with
--- 702,711 ----
    enum local_trans_type type;
  
    /* Whether a conflict on the target register happened.  */
!   bool was_target_conflict : 1;
  
    /* Whether a check was needed.  */
!   bool needs_check : 1;
  };
  
  /* Indexed by INSN_LUID, the collection of all data associated with
*************** public:
*** 762,775 ****
    ds_t spec_checked_ds;
  
    /* Whether the live set valid or not.  */
!   BOOL_BITFIELD live_valid_p : 1;
    /* Insn is an ASM.  */
!   BOOL_BITFIELD asm_p : 1;
  
    /* True when an insn is scheduled after we've determined that a stall is
       required.
       This is used when emulating the Haifa scheduler for bundling.  */
!   BOOL_BITFIELD after_stall_p : 1;
  };
  
  typedef class _sel_insn_data sel_insn_data_def;
--- 762,775 ----
    ds_t spec_checked_ds;
  
    /* Whether the live set valid or not.  */
!   bool live_valid_p : 1;
    /* Insn is an ASM.  */
!   bool asm_p : 1;
  
    /* True when an insn is scheduled after we've determined that a stall is
       required.
       This is used when emulating the Haifa scheduler for bundling.  */
!   bool after_stall_p : 1;
  };
  
  typedef class _sel_insn_data sel_insn_data_def;
diff -Nrcpad gcc-17-20260621/gcc/sel-sched.cc gcc-17-20260628/gcc/sel-sched.cc
*** gcc-17-20260621/gcc/sel-sched.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/sel-sched.cc	Sun Jun 28 22:32:10 2026
*************** struct cmpd_local_params
*** 354,360 ****
    /* Local params used in move_op_* functions.  */
    /* True when we have removed last insn in the block which was
       also a boundary.  Do not update anything or create bookkeeping copies.  */
!   BOOL_BITFIELD removed_last_insn : 1;
  };
  
  /* Stores the static parameters for move_op_* calls.  */
--- 354,360 ----
    /* Local params used in move_op_* functions.  */
    /* True when we have removed last insn in the block which was
       also a boundary.  Do not update anything or create bookkeeping copies.  */
!   bool removed_last_insn : 1;
  };
  
  /* Stores the static parameters for move_op_* calls.  */
diff -Nrcpad gcc-17-20260621/gcc/splay-tree-utils.cc gcc-17-20260628/gcc/splay-tree-utils.cc
*** gcc-17-20260621/gcc/splay-tree-utils.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/splay-tree-utils.cc	Sun Jun 28 22:32:10 2026
***************
*** 1,4 ****
! // Splay tree utilities                                             -*- C++ -*-
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
--- 1,4 ----
! // Splay tree utilities.
  // Copyright (C) 2020-2026 Free Software Foundation, Inc.
  //
  // This file is part of GCC.
diff -Nrcpad gcc-17-20260621/gcc/system.h gcc-17-20260628/gcc/system.h
*** gcc-17-20260621/gcc/system.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/system.h	Sun Jun 28 22:32:10 2026
*************** extern void fancy_abort (const char *, i
*** 895,903 ****
  # define FALSE false
  #endif /* !__cplusplus */
  
- /* Some compilers do not allow the use of unsigned char in bitfields.  */
- #define BOOL_BITFIELD unsigned int
- 
  /* As the last action in this file, we poison the identifiers that
     shouldn't be used.  Note, luckily gcc-3.0's token-based integrated
     preprocessor won't trip on poisoned identifiers that arrive from
--- 895,900 ----
diff -Nrcpad gcc-17-20260621/gcc/target.def gcc-17-20260628/gcc/target.def
*** gcc-17-20260621/gcc/target.def	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/target.def	Sun Jun 28 22:32:10 2026
*************** DEFHOOK
*** 1535,1542 ****
  (reassociation_width,
  "This hook is called by tree reassociator to determine a level of\n\
  parallelism required in output calculations chain.",
! int, (unsigned int opc, machine_mode mode),
! hook_int_uint_mode_1)
  
  /* The following member value is a function that returns priority for
     fusion of each instruction via pointer parameters.  */
--- 1535,1542 ----
  (reassociation_width,
  "This hook is called by tree reassociator to determine a level of\n\
  parallelism required in output calculations chain.",
! int, (tree_code opc, machine_mode mode),
! default_reassociation_width)
  
  /* The following member value is a function that returns priority for
     fusion of each instruction via pointer parameters.  */
diff -Nrcpad gcc-17-20260621/gcc/targhooks.cc gcc-17-20260628/gcc/targhooks.cc
*** gcc-17-20260621/gcc/targhooks.cc	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/targhooks.cc	Sun Jun 28 22:32:10 2026
*************** default_memtag_untagged_pointer (rtx tag
*** 2950,2953 ****
--- 2950,2960 ----
    return untagged_base;
  }
  
+ /* The default implementation of TARGET_SCHED_REASSOCIATION_WIDTH.  */
+ int
+ default_reassociation_width (tree_code, machine_mode)
+ {
+   return 1;
+ }
+ 
  #include "gt-targhooks.h"
diff -Nrcpad gcc-17-20260621/gcc/targhooks.h gcc-17-20260628/gcc/targhooks.h
*** gcc-17-20260621/gcc/targhooks.h	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/targhooks.h	Sun Jun 28 22:32:10 2026
*************** extern rtx default_memtag_add_tag (rtx,
*** 320,324 ****
--- 320,325 ----
  extern rtx default_memtag_set_tag (rtx, rtx, rtx);
  extern rtx default_memtag_extract_tag (rtx, rtx);
  extern rtx default_memtag_untagged_pointer (rtx, rtx);
+ extern int default_reassociation_width (tree_code, machine_mode);
  
  #endif /* GCC_TARGHOOKS_H */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/ChangeLog gcc-17-20260628/gcc/testsuite/ChangeLog
*** gcc-17-20260621/gcc/testsuite/ChangeLog	Sun Jun 21 22:32:07 2026
--- gcc-17-20260628/gcc/testsuite/ChangeLog	Sun Jun 28 22:32:10 2026
***************
*** 1,3 ****
--- 1,616 ----
+ 2026-06-27  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR target/125992
+ 	* gcc.target/s390/pr125992.c: New test.
+ 
+ 2026-06-27  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/30438
+ 	PR fortran/125801
+ 	* gfortran.dg/warn_unused_but_set_error_1.f90: New test.
+ 	* gfortran.dg/warn_unused_intent_out_2.f90: New test.
+ 
+ 2026-06-27  Eikansh Gupta  <eikansh.gupta@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125385
+ 	* gcc.dg/tree-ssa/pr125385.c: New test.
+ 
+ 2026-06-27  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125100
+ 	* gcc.target/i386/pr125100-4.c: Replace "movq  %rax, \(%rdi\)"
+ 	with "movq  %rax, \(%[re]di\)" to support x32.
+ 
+ 2026-06-26  H.J. Lu  <hjl.tools@gmail.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR target/125856
+ 	PR target/125865
+ 	* gcc.target/i386/builtin-memcpy-1a.c: New test.
+ 	* gcc.target/i386/builtin-memcpy-1b.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-2a.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-2b.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-2c.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-3a.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-3b.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-3c.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-4a.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-4b.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-4c.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-5a.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-5b.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-5c.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-6.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-bounded-1a.c: Likewise.
+ 	* gcc.target/i386/builtin-memcpy-bounded-1b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-1a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-1b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-2a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-2b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-2c.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-3a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-3b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-3c.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-4a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-4b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-4c.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-5a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-5b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-5c.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-6a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-6b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-6c.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-7a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-7b.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-7c.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-8.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-bounded-1a.c: Likewise.
+ 	* gcc.target/i386/builtin-memset-bounded-1b.c: Likewise.
+ 
+ 2026-06-26  Andi Kleen  <ak@gcc.gnu.org>
+ 
+ 	* lib/profopt.exp (profopt-execute): Check if CREATE_GCOV env
+ 	variable exists and use it when there.
+ 
+ 2026-06-26  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125900
+ 	* g++.dg/reflect/expr18.C: New test.
+ 
+ 2026-06-26  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/125902
+ 	* gfortran.dg/c-prototypes_2.F90: New test.
+ 
+ 2026-06-26  Roger Sayle  <roger@nextmovesoftware.com>
+ 	    Hongtao Liu  <hongtao.liu@intel.com>
+ 
+ 	PR target/123238
+ 	* gcc.target/i386/pr123238-2.c: New test case.
+ 
+ 2026-06-26  vekumar  <Venkataramanan.Kumar@amd.com>
+ 
+ 	PR target/125949
+ 	* gcc.target/i386/pr125949.c: New test.
+ 
+ 2026-06-26  Stefan Schulze Frielinghaus  <stefansf@gcc.gnu.org>
+ 
+ 	PR target/125972
+ 	* gcc.target/s390/pr125972.c: New test.
+ 
+ 2026-06-26  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR middle-end/125875
+ 	* gcc.dg/torture/pr125875.c: New testcase.
+ 
+ 2026-06-26  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR middle-end/125977
+ 	* g++.dg/pr125977.C: New test.
+ 
+ 2026-06-26  Pengfei Li  <Pengfei.Li2@arm.com>
+ 
+ 	* gcc.target/aarch64/dispatch_sched_1.c: New test.
+ 
+ 2026-06-26  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	* gcc.target/i386/builtin-memmove-bounded-1a.c: New test.
+ 	* gcc.target/i386/builtin-memmove-bounded-1b.c: Likewise.
+ 
+ 2026-06-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/118793
+ 	* gfortran.dg/namelist_40.f90: Update expected dg-output.
+ 	* gfortran.dg/namelist_47.f90: Likewise
+ 
+ 2026-06-25  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* gcc.dg/lto/toplevel-extended-asm-1_0.c: Skip for Darwin.
+ 	* gcc.dg/lto/toplevel-extended-asm-2_0.c: Fix Mach-O syntax.
+ 	* gcc.dg/lto/toplevel-extended-asm-2_1.c: Likewise.
+ 	* gcc.dg/lto/toplevel-simple-asm-1_0.c: Skip for Darwin.
+ 	* gcc.dg/lto/toplevel-simple-asm-2_1.c: Fix Mach-O syntax.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/compile/ctlz.rs: Fix incorrect intrinsic signature.
+ 	* rust/compile/ctlz_nonzero.rs: Likewise.
+ 	* rust/compile/cttz.rs: Likewise.
+ 	* rust/compile/cttz_nonzero.rs: Likewise.
+ 	* rust/compile/issue-4245.rs: Likewise.
+ 	* rust/compile/torture/intrinsics-3.rs: Likewise.
+ 	* rust/execute/torture/ctlz.rs: Likewise.
+ 	* rust/execute/torture/ctlz_i16.rs: Likewise.
+ 	* rust/execute/torture/ctlz_i32.rs: Likewise.
+ 	* rust/execute/torture/ctlz_i64.rs: Likewise.
+ 	* rust/execute/torture/ctlz_i8.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_i16.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_i32.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_i64.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_i8.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_u16.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_u32.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_u64.rs: Likewise.
+ 	* rust/execute/torture/ctlz_nonzero_u8.rs: Likewise.
+ 	* rust/execute/torture/ctlz_u16.rs: Likewise.
+ 	* rust/execute/torture/ctlz_u32.rs: Likewise.
+ 	* rust/execute/torture/ctlz_u64.rs: Likewise.
+ 	* rust/execute/torture/ctlz_u8.rs: Likewise.
+ 	* rust/execute/torture/cttz.rs: Likewise.
+ 	* rust/execute/torture/cttz_nonzero.rs: Likewise.
+ 	* rust/compile/intrinsic-checker.rs: New test.
+ 
+ 2026-06-25  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* rust/compile/attr-macro.rs: Move to...
+ 	* rust/compile/macros/mbe/macro_attr_expr.rs: ...here.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/execute/min_align_of.rs: New test.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* rust/compile/type-with-builtin-type-name.rs: New test.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* rust/compile/issue-4563.rs: New test.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* rust/compile/mod_in_types_ns.rs: New test.
+ 	* rust/compile/mod_in_types_ns2.rs: New test.
+ 
+ 2026-06-25  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* rust/compile/name_resolution28.rs: New file.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* rust/execute/drop-function-scope-unit.rs: New test.
+ 	* rust/execute/drop-function-scope.rs: New test.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* rust/execute/drop-block-scope.rs: Extend test coverage for simple
+ 	immutable and mutable bindings.
+ 	* rust/compile/drop-ref-pattern.rs: New test.
+ 
+ 2026-06-25  lishin  <lishin1008@gmail.com>
+ 
+ 	* rust/execute/drop-block-scope.rs: New test.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/compile/attr-allocator1.rs: New test.
+ 	* rust/compile/attr-allocator2.rs: New test.
+ 	* rust/compile/attr-allocator3.rs: New test.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/compile/rustc_std_internal_symbol1.rs: New test.
+ 	* rust/compile/rustc_std_internal_symbol2.rs: New test.
+ 
+ 2026-06-25  Pierre-Emmanuel Patry  <pierre-emmanuel.patry@embecosm.com>
+ 
+ 	* rust/compile/float_literals.rs: New test.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* rust/compile/torture/utf8_identifiers.rs: Use a more classical
+ 	looking float value to test our UTF-8 identifier.
+ 
+ 2026-06-25  Arthur Cohen  <arthur.cohen@embecosm.com>
+ 
+ 	* rust/compile/import_in_type_ns6.rs: New test.
+ 	* rust/compile/import_in_type_ns7.rs: New test.
+ 
+ 2026-06-25  Yap Zhi Heng  <yapzhhg@gmail.com>
+ 
+ 	* rust/compile/extern_crate_self.rs: New file.
+ 
+ 2026-06-25  Enes Cevik  <enes@nsvke.com>
+ 
+ 	* rust/compile/exchange_malloc.rs: New test.
+ 
+ 2026-06-25  Owen Avery  <powerboat9.gamer@gmail.com>
+ 
+ 	* rust/compile/name_resolution27.rs: New test.
+ 
+ 2026-06-25  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125922
+ 	* g++.dg/reflect/error14.C: New test.
+ 
+ 2026-06-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125832
+ 	* g++.dg/cpp29/lambda-order1.C: New test.
+ 	* g++.dg/cpp29/lambda-order2.C: New test.
+ 
+ 2026-06-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	PR c++/125824
+ 	* lib/target-supports.exp
+ 	(check_effective_target_flt_dbl_ldbl_inf_nan): New.
+ 	* g++.dg/cpp29/ext-floating1.C: New test.
+ 	* g++.dg/cpp29/std-floating1.C: New test.
+ 
+ 2026-06-25  Manjunath Matti  <mmatti@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/ecc-builtin-1.c: New test for ECC builtins.
+ 
+ 2026-06-25  Milan Tripkovic  <Milan.Tripkovic@rt-rk.com>
+ 	    Jeff Law   <jeffrey.law@oss.qualcomm.com>
+ 
+ 	PR target/123884
+ 	PR target/106585
+ 	* gcc.target/riscv/pr123884-a.c: New test.
+ 	* gcc.target/riscv/pr123884-b.c: New test.
+ 	* gcc.target/riscv/pr123884-c.c: New test.
+ 
+ 2026-06-25  Jeff Law  <jeffrey.law@oss.qualcomm.com>
+ 	     Daniel Barboza  <daniel.barboza@oss.qualcomm.com>
+ 
+ 	PR target/124019
+ 	* gcc.target/riscv/pr124019.c: New test.
+ 
+ 2026-06-25  Konstantinos Eleftheriou  <konstantinos.eleftheriou@vrull.eu>
+ 
+ 	PR tree-optimization/102793
+ 	* g++.dg/tree-ssa/pr117123.C: --param logical-op-non-short-circuit=0.
+ 	* gcc.dg/tree-ssa/pr102793-1.c: New test.
+ 	* gcc.dg/tree-ssa/pr102793-2.c: New test.
+ 	* gcc.dg/uninit-pred-13.c: New test.
+ 
+ 2026-06-25  Christopher Bazley  <chris.bazley@arm.com>
+ 
+ 	* gcc.target/aarch64/popcnt-sve.c: Update test expectations
+ 	to allow both current and alternative valid mask
+ 	specifications.
+ 
+ 2026-06-25  Artemiy Volkov  <artemiy.volkov@arm.com>
+ 
+ 	PR target/125716
+ 	* gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json: New JSON
+ 	tuning file.
+ 	* gcc.target/aarch64/simd/pr125716.c: New test.
+ 
+ 2026-06-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* c-c++-common/gomp/atomic-builtins-1.c: Add int128 effective target.
+ 
+ 2026-06-25  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/125953
+ 	* gcc.dg/torture/pr125953.c: New testcase.
+ 
+ 2026-06-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.target/i386/pr125958.c (dg-options): Add -mno-stackrealign.
+ 
+ 2026-06-25  Martin Uecker  <uecker@tugraz.at>
+ 
+ 	* gcc.dg/builtin-call-info-1.c: New test.
+ 	* gcc.dg/builtin-call-info-2.c: New test.
+ 	* gcc.dg/builtin-call-info-3.c: New test.
+ 
+ 2026-06-25  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* cobol.dg/group1/simple-classes.cob:
+ 	* cobol.dg/group1/simple-if.cob:
+ 	* cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.cob: New test.
+ 	* cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.out: New test.
+ 	* cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.cob: New test.
+ 	* cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.out: New test.
+ 	* cobol.dg/group2/Rounding_from_BINARY_unsignable.cob: New test.
+ 	* cobol.dg/group2/Rounding_from_BINARY_unsignable.out: New test.
+ 
+ 2026-06-24  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* gcc.dg/autopar/runtime-auto.c: Adjust.
+ 
+ 2026-06-24  Oleg Tolmatcev  <oleg.tolmatcev@gmail.com>
+ 
+ 	* gcc.target/i386/prfchw-Wcast-qual-1.c: New test.
+ 
+ 2026-06-24  Andrew MacLeod  <amacleod@redhat.com>
+ 
+ 	PR tree-optimization/125910
+ 	* gcc.dg/pr125910.c: New.
+ 
+ 2026-06-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/125761
+ 	* gfortran.dg/select_type_53.f90: New test.
+ 
+ 2026-06-24  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125939
+ 	* g++.dg/reflect/type_trait15.C: New test.
+ 
+ 2026-06-24  Vineet Gupta  <vineet.gupta@linux.dev>
+ 
+ 	PR debug/125421
+ 	* gcc.dg/debug/dwarf2/pr125421.c: New Test.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* c-c++-common/gomp/atomic-builtins-1.c: New test.
+ 	* c-c++-common/gomp/reduction-builtins-1.c: New test.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* g++.dg/gomp/barrier-1.C: Update scan dump.
+ 	* g++.dg/gomp/tpl-barrier-1.C: Likewise.
+ 	* gcc.dg/gomp/barrier-1.c: Likewise.
+ 	* c-c++-common/gomp/implicit-barrier-1.c: New test.
+ 	* gfortran.dg/gomp/lastprivate-allocatable-barrier-1.f90: New test.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* c-c++-common/gomp/for-8.c: New test.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* c-c++-common/gomp/masked-1.c: Add scan directives verifying that
+ 	GOMP_has_masked_thread_num is emitted and omp_get_thread_num is not.
+ 	* g++.dg/gomp/master-3.C: Update scan-tree-dump-times to look for
+ 	GOMP_has_masked_thread_num instead of omp_get_thread_num.
+ 	* gcc.dg/gomp/master-3.c: Likewise.
+ 	* gfortran.dg/gomp/masked-1.f90: Add scan directive for
+ 	GOMP_has_masked_thread_num.
+ 
+ 2026-06-24  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/110743
+ 	* gcc.dg/uninit-pr110743-2.c: New testcase.
+ 
+ 2026-06-24  Jeevitha Palanisamy  <jeevitha@linux.ibm.com>
+ 
+ 	* gcc.target/powerpc/vsx_arith_builtin-1.c: New test.
+ 	* gcc.target/powerpc/vsx_arith_builtin-2.c: Likewise.
+ 	* gcc.target/powerpc/vsx_arith_builtin-3.c: Likewise.
+ 	* gcc.target/powerpc/vsx_arith_builtin-4.c: Likewise.
+ 	* gcc.target/powerpc/vsx_arith_vect_1.c: Likewise.
+ 	* gcc.target/powerpc/vsx_arith_vect_2.c: Likewise.
+ 
+ 2026-06-24  Christopher Bazley  <chris.bazley@arm.com>
+ 
+ 	* gcc.target/aarch64/sve/slp_stack.c: New test.
+ 
+ 2026-06-24  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125958
+ 	* gcc.target/i386/pr125958.c: New test.
+ 
+ 2026-06-24  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+ 
+ 	* gcc.dg/vect/pr125567.c: Require vect_hw_misalign.
+ 
+ 2026-06-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125334
+ 	* g++.dg/modules/adl-12_b.C: Check for lazy loading.
+ 
+ 2026-06-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125768
+ 	* g++.dg/modules/alias-3_a.C: New test.
+ 	* g++.dg/modules/alias-3_b.C: New test.
+ 	* g++.dg/modules/alias-3_c.C: New test.
+ 
+ 2026-06-23  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* gfortran.dg/class_array_15.f03: Adjust expected free count.
+ 	* gfortran.dg/derived_constructor_comps_6.f90: Adjust expected free count.
+ 	* gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90: New test.
+ 
+ 2026-06-23  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/125902
+ 	* gfortran.dg/c-prototypes_1.F90: New test.
+ 
+ 2026-06-23  Robin Dapp  <robin.dapp@oss.qualcomm.com>
+ 
+ 	* gcc.target/riscv/rvv/base/pr112431-4.c: Un-xfail.
+ 	* gcc.target/riscv/rvv/base/pr112431-5.c: Ditto.
+ 	* gcc.target/riscv/rvv/base/pr112431-6.c: Ditto.
+ 
+ 2026-06-23  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125745
+ 	* g++.dg/ubsan/vptr-19.C: New test.
+ 
+ 2026-06-23  Zhongyao Chen  <chen.zhongyao@zte.com.cn>
+ 	    Yuke Tang  <tang.yuke@zte.com.cn>
+ 
+ 	* gcc.target/riscv/rvv/autovec/zvabd-1.c: New tests for Zvabd.
+ 
+ 2026-06-23  Alex Coplan  <alex.coplan@arm.com>
+ 
+ 	PR target/125818
+ 	* gcc.target/aarch64/torture/pr125818.c: New test.
+ 
+ 2026-06-23  Sarvesh Chandra  <Sarvesh.Chandra@amd.com>
+ 	    Ashwin Godbole  <Ashwin.Godbole@amd.com>
+ 
+ 	PR target/107057
+ 	* gcc.target/i386/avx512-movedup.c: New test.
+ 
+ 2026-06-23  Paul Thomas  <pault@gcc.gnu.org>
+ 
+ 	PR fortran/121972
+ 	* gfortran.dg/pdt_77.f03: Add 'finalalize_navier_stokes', which
+ 	tests that the 'navier_stokes' component 'p' is pointed to the
+ 	correct vtable in both tests. Check that VIEW_CONVERT_EXPR does
+ 	not appear in the tree dump.
+ 
+ 2026-06-23  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125893
+ 	* gcc.target/i386/pr125893-1.c: New test.
+ 	* gcc.target/i386/pr125893-2.c: Likewise.
+ 	* gcc.target/i386/pr125893-3.c: Likewise.
+ 	* gcc.target/i386/pr125893-4.c: Likewise.
+ 	* gcc.target/i386/pr125893-5.c: Likewise.
+ 	* gcc.target/i386/pr125893-6.c: Likewise.
+ 	* gcc.target/i386/pr125893-7.c: Likewise.
+ 	* gcc.target/i386/pr125893-8.c: Likewise.
+ 	* gcc.target/i386/pr125893-9.c: Likewise.
+ 	* gcc.target/i386/pr125893-10.c: Likewise.
+ 	* gcc.target/i386/pr125893-11.c: Likewise.
+ 
+ 2026-06-23  Richard Biener  <rguenther@suse.de>
+ 
+ 	PR tree-optimization/110743
+ 	* gcc.dg/uninit-pr110743.c: New testcase.
+ 
+ 2026-06-23  Hu, Lin1  <lin1.hu@intel.com>
+ 
+ 	* gcc.target/i386/vect-cbranch-cond-any-128.c: New test.
+ 	* gcc.target/i386/vect-cbranch-cond-any-256.c: Ditto.
+ 	* gcc.target/i386/vect-cbranch-cond-any-run.c: Ditto.
+ 	* gcc.target/i386/vect-cbranch-cond-all-128.c: Ditto.
+ 	* gcc.target/i386/vect-cbranch-cond-all-256.c: Ditto.
+ 	* gcc.target/i386/vect-cbranch-cond-all-run.c: Ditto.
+ 
+ 2026-06-23  Xin Liu  <liulxx@hygon.cn>
+ 
+ 	* g++.target/i386/mv33.C: Add c86-4g-m8 target clone test.
+ 	* gcc.target/i386/funcspec-56.inc: Add c86-4g-m8 arch and tune
+ 	target attribute tests.
+ 
+ 2026-06-22  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125697
+ 	* g++.dg/warn/Wrange-loop-construct4.C: New test.
+ 
+ 2026-06-22  Marek Polacek  <polacek@redhat.com>
+ 
+ 	PR c++/125889
+ 	* g++.dg/reflect/members_of16.C: New test.
+ 
+ 2026-06-22  Andrew Pinski  <andrew.pinski@oss.qualcomm.com>
+ 
+ 	PR tree-optimization/125923
+ 	* gcc.dg/torture/pr125923-1.c: New test.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* c-c++-common/gomp/declare-mapper-2.c: New test.
+ 	* gfortran.dg/gomp/declare-mapper-8.f90: New test.
+ 
+ 2026-06-22  Zhongjie Guo  <guozhongjie@hygon.cn>
+ 	    Richard Biener  <rguenther@suse.de>
+ 
+ 	* gcc.target/i386/vect-compare-cost.c: New test.
+ 
+ 2026-06-22  Avinash Jayakar  <avinashd@ibm.com>
+ 
+ 	* gcc.dg/spaceship_mixed_variants.c: Split long long arg tests
+ 	in a different file.
+ 	* gcc.dg/spaceship_mixed_variants_ll.c: New test.
+ 
+ 2026-06-22  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125895
+ 	* gcc.target/i386/pr125895.c: New test.
+ 
+ 2026-06-22  Thomas Koenig  <tkoenig@gcc.gnu.org>
+ 
+ 	PR fortran/125914
+ 	* gfortran.dg/power_6.f90: Remove scans for powi.
+ 	* gfortran.dg/power_10.f90: New test.
+ 
+ 2026-06-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/118774
+ 	* gfortran.dg/fmt_t_10.f90: Adjust the test case results
+ 	check.
+ 
+ 2026-06-22  Pan Li  <pan2.li@intel.com>
+ 
+ 	* gcc.target/riscv/sat/sat_arith.h: Add test helper macros
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u64.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u64-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u128.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c: New test.
+ 	* gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c: New test.
+ 
+ 2026-06-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/114618
+ 	* gfortran.dg/pr114618.f90: Move to...
+ 	* gfortran.dg/fmt_t_10.f90: ...here.
+ 	* gfortran.dg/fmt_t_11.f90: New test.
+ 
+ 2026-06-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125408
+ 	* g++.dg/cpp2a/lambda-targ34.C: New test.
+ 
+ 2026-06-21  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/125408
+ 	* g++.dg/cpp2a/lambda-targ33.C: New test.
+ 
+ 2026-06-21  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* lib/target-supports.exp: Add a check for Mach-O object file
+ 	format.
+ 
+ 2026-06-21  H.J. Lu  <hjl.tools@gmail.com>
+ 
+ 	PR target/125883
+ 	* gcc.target/i386/pr125883.c: New test.
+ 
+ 2026-06-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/82086
+ 	* gfortran.dg/namelist_103.f90: New test.
+ 
  2026-06-20  Iain Sandoe  <iain@sandoe.co.uk>
  
  	* gcc.dg/debug/dwarf2/dwarf2-macro.c: Skip for Darwin23+.
diff -Nrcpad gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c
*** gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/atomic-builtins-1.c	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-additional-options "-fdump-tree-ompexp" } */
+ 
+ /* Check that an GIMPLE_OMP_ATOMIC statement expands to GOMP_atomic_start/end
+    when atomic operations cannot be used and a mutex is required.  */
+ 
+ void bar (__int128 a, __int128 b) {
+   #pragma omp atomic capture
+     b = a++;
+ }
+ 
+ /* { dg-final { scan-tree-dump "GOMP_atomic_start" "ompexp" } } */
+ /* { dg-final { scan-tree-dump "GOMP_atomic_end" "ompexp" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/declare-mapper-2.c gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/declare-mapper-2.c
*** gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/declare-mapper-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/declare-mapper-2.c	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,25 ----
+ /* Eventually: Check that strided use of 'declare mapper' is rejected for
+    'target enter data' but accepted for 'target update'
+ 
+    However, it currently fails already for parsing. */
+ 
+ struct t
+ {
+   int n;
+   int *p;
+ };
+ 
+ #pragma omp declare mapper(my : struct t s) map(to: s, s.p[0:s.n:2])
+ // { dg-error "65: expected '\\\]' before ':' token" "" { target c } .-1 }
+ // { dg-error "65: expected '\\]' before ':' token" "" { target c++ } .-2 }
+ // { dg-error "65: expected '\\)' before ':' token" "" { target c++ } .-3 }
+ 
+ // FIXME: ensure that [:s.n:2] also parses in C++26 despite [: ... :] syntax.
+ // FIXME: remove ifndef:
+ #ifndef __cplusplus  // Silence some more errors until strided is implemented
+ void f() {
+   struct t v;
+   #pragma omp target enter data map(mapper(my), to: v)
+   #pragma omp target update to(mapper(my): v)
+ }
+ #endif
diff -Nrcpad gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/for-8.c gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/for-8.c
*** gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/for-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/for-8.c	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,67 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-ompexp" } */
+ 
+ /* Check that the static loop and distribute expanders fetch the thread/team
+    id and count through a single GOMP_loop_static_worksharing /
+    GOMP_distribute_static_worksharing call rather than separate
+    omp_get_thread_num/omp_get_num_threads or omp_get_team_num/omp_get_num_teams
+    calls.  */
+ 
+ void bar (int);
+ 
+ /* Static schedule without a chunk size goes through
+    expand_omp_for_static_nochunk.  */
+ 
+ void
+ f1 (int n)
+ {
+   int i;
+   #pragma omp for schedule(static)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Static schedule with a chunk size goes through
+    expand_omp_for_static_chunk.  */
+ 
+ void
+ f2 (int n)
+ {
+   int i;
+   #pragma omp for schedule(static, 4)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Distribute without a chunk size goes through
+    expand_omp_for_static_nochunk.  */
+ 
+ void
+ f3 (int n)
+ {
+   int i;
+ #pragma omp teams
+ #pragma omp distribute
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* Distribute with a chunk size goes through
+    expand_omp_for_static_chunk.  */
+ 
+ void
+ f4 (int n)
+ {
+   int i;
+ #pragma omp teams
+ #pragma omp distribute dist_schedule(static, 4)
+   for (i = 0; i < n; ++i)
+     bar (i);
+ }
+ 
+ /* { dg-final { scan-tree-dump "GOMP_loop_static_worksharing" "ompexp" } } */
+ /* { dg-final { scan-tree-dump "GOMP_distribute_static_worksharing" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_threads" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_num_teams" "ompexp" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_team_num" "ompexp" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/implicit-barrier-1.c gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/implicit-barrier-1.c
*** gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/implicit-barrier-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/implicit-barrier-1.c	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,102 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-ompexp" } */
+ 
+ /* Check that implicit barriers are emitted with the correct kind.  */
+ 
+ void body (void);
+ void bar (int);
+ void foo (int);
+ 
+ /* OMP for construct with static schedule (with and without chunk) -> workshare
+    barrier.  */
+ void wfor (int n) {
+   int i;
+   #pragma omp for schedule(static)
+   for (i = 0; i < n; i++) bar (i);
+   #pragma omp for schedule(static, 4)
+   for (i = 0; i < n; i++) bar (i);
+ }
+ 
+ /* OMP for construct with inscan reduction -> workshare barrier.  */
+ int r;
+ void wfor_scan (int n)
+ {
+   int i;
+   #pragma omp for reduction(inscan, + : r) private(i)
+   for (i = 0; i < n; i = i + 1)
+     {
+       {
+ 	bar (r);
+       }
+       #pragma omp scan inclusive(r)
+       {
+ 	foo (r);
+       }
+     }
+ }
+ 
+ /* OMP sections construct with firstprivate and lastprivate clauses -> workshare
+    barrier.  */
+ int a;
+ int wsections (void) {
+   #pragma omp sections firstprivate(a) lastprivate(a)
+   { foo (a); }
+   return a;
+ }
+ 
+ /* parallel with a copyin variable passed by reference (an aggregate, so
+    use_pointer_for_field is true) -> copyin_by_ref -> parallel barrier.  */
+ int tp[64];
+ #pragma omp threadprivate (tp)
+ void pcopyin (void) {
+   #pragma omp parallel copyin(tp)
+   body ();
+ }
+ 
+ /* UDR whose initializer references omp_orig, used on a (non-task) parallel
+    construct -> reduction_omp_orig_ref -> parallel barrier.  */
+ struct S { int s; };
+ void combine (struct S *out, struct S *in);
+ struct S init_from_orig (struct S *orig);
+ void use (struct S *);
+ 
+ #pragma omp declare reduction (+: struct S: combine (&omp_out, &omp_in)) \
+ 	initializer (omp_priv = init_from_orig (&omp_orig))
+ 
+ void preduction_orig (struct S s) {
+   #pragma omp parallel reduction (+: s)
+   use (&s);
+ }
+ 
+ /* Same omp_orig UDR on a teams construct -> parallel barrier.  */
+ void treduction_orig (struct S s) {
+   #pragma omp teams reduction (+: s)
+   use (&s);
+ }
+ 
+ /* Same omp_orig UDR on a scope construct -> workshare barrier.  */
+ struct S gs;
+ void sreduction_orig (void) {
+   #pragma omp parallel
+   #pragma omp scope reduction (+: gs)
+   use (&gs);
+ }
+ 
+ /* OMP single construct (without nowait) -> workshare barrier.  */
+ void wsingle (void) {
+   #pragma omp single
+   body ();
+ }
+ 
+ /* OMP scope construct (without nowait) -> workshare barrier.  */
+ void wscope (void) {
+   #pragma omp scope
+   body ();
+ }
+ 
+ /* GOMP_BARRIER_IMPLICIT_PARALLEL (0): pcopyin, preduction_orig,
+    treduction_orig.  */
+ /* { dg-final { scan-tree-dump-times "GOMP_barrier_ext \\(0\\)" 3 "ompexp" } } */
+ /* GOMP_BARRIER_IMPLICIT_WORKSHARE (1): wfor (x2), wfor_scan (x2), wsections,
+    sreduction_orig, wsingle, wscope.  */
+ /* { dg-final { scan-tree-dump-times "GOMP_barrier_ext \\(1\\)" 8 "ompexp" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/masked-1.c gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/masked-1.c
*** gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/masked-1.c	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/masked-1.c	Sun Jun 28 22:32:11 2026
***************
*** 1,3 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-omplower" } */
+ 
  void bar (void);
  
  void
*************** foo (int x, int *a)
*** 21,23 ****
--- 24,29 ----
    #pragma omp masked filter (x)
    ;
  }
+ 
+ /* { dg-final { scan-tree-dump "GOMP_has_masked_thread_num" "omplower" } } */
+ /* { dg-final { scan-tree-dump-not "omp_get_thread_num" "omplower" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/reduction-builtins-1.c gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/reduction-builtins-1.c
*** gcc-17-20260621/gcc/testsuite/c-c++-common/gomp/reduction-builtins-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/c-c++-common/gomp/reduction-builtins-1.c	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fdump-tree-omplower" } */
+ 
+ /* Check that, for reductions, critical sections are bracketed with
+    GOMP_reduction_start/end rather than GOMP_atomic_start/end. Two scalar
+    reductions force the critical-section path (a single scalar reduction would
+    use an atomic update instead).  */
+ 
+ void foo (int);
+ 
+ void r_for (int n) {
+   int a = 0, b = 0, i;
+   #pragma omp parallel
+   #pragma omp for reduction(+: a, b)
+   for (i = 0; i < n; i++) { a += i; b += i; }
+ }
+ 
+ void r_sections (void) {
+   int a = 0, b = 0;
+   #pragma omp parallel
+   #pragma omp sections reduction(+: a, b)
+   { foo (a + b); }
+ }
+ 
+ void r_scope (void) {
+   int a = 0, b = 0;
+   #pragma omp parallel
+   #pragma omp scope reduction(+: a, b)
+   foo (a + b);
+ }
+ 
+ void r_teams (void) {
+   int a = 0, b = 0;
+   #pragma omp teams reduction(+: a, b)
+   foo (a + b);
+ }
+ 
+ void r_parallel (void) {
+   int a = 0, b = 0;
+   #pragma omp parallel reduction(+: a, b)
+   foo (a + b);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "GOMP_reduction_start \\(" 5 "omplower" } } */
+ /* { dg-final { scan-tree-dump-times "GOMP_reduction_end \\(" 5 "omplower" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_atomic_start" "omplower" } } */
+ /* { dg-final { scan-tree-dump-not "GOMP_atomic_end" "omplower" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group1/simple-classes.cob gcc-17-20260628/gcc/testsuite/cobol.dg/group1/simple-classes.cob
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group1/simple-classes.cob	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group1/simple-classes.cob	Sun Jun 28 22:32:11 2026
***************
*** 12,18 ****
  *> { dg-output {Fred            is alphabetic(\n|\r\n|\r)} }
  *> { dg-output { } }
  IDENTIFICATION DIVISION.
! PROGRAM-ID. test.
  AUTHOR. Michael Coughlan.
  *> This routine is based on Listing-5-1
  ENVIRONMENT DIVISION.
--- 12,18 ----
  *> { dg-output {Fred            is alphabetic(\n|\r\n|\r)} }
  *> { dg-output { } }
  IDENTIFICATION DIVISION.
! PROGRAM-ID. prog.
  AUTHOR. Michael Coughlan.
  *> This routine is based on Listing-5-1
  ENVIRONMENT DIVISION.
*************** TestAlphabetic.
*** 65,68 ****
      ELSE
        DISPLAY NameIn " is not alphabetic"
     END-IF.
!   END PROGRAM test.
--- 65,68 ----
      ELSE
        DISPLAY NameIn " is not alphabetic"
     END-IF.
!   END PROGRAM prog.
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group1/simple-if.cob gcc-17-20260628/gcc/testsuite/cobol.dg/group1/simple-if.cob
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group1/simple-if.cob	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group1/simple-if.cob	Sun Jun 28 22:32:11 2026
***************
*** 21,27 ****
  *> { dg-output { } }
          >>SOURCE FREE
          IDENTIFICATION DIVISION.
!         PROGRAM-ID. test.
          DATA DIVISION.
          WORKING-STORAGE SECTION.
          01 A_4 PIC 9999 VALUE 5.
--- 21,27 ----
  *> { dg-output { } }
          >>SOURCE FREE
          IDENTIFICATION DIVISION.
!         PROGRAM-ID. prog.
          DATA DIVISION.
          WORKING-STORAGE SECTION.
          01 A_4 PIC 9999 VALUE 5.
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.cob gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.cob
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.cob	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,62 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Rounding_from_BINARY_signable_and_negative.out" }
+         identification              division.
+         program-id.                 prog.
+         data                        division.
+         working-storage             section.
+         77 v0 pic s9999v9 binary value -1234.0 .
+         77 v1 pic s9999v9 binary value -1234.1 .
+         77 v5 pic s9999v9 binary value -1234.5 .
+         77 v9 pic s9999v9 binary value -1234.9 .
+         77 d0   pic s9999   display             .
+         77 d1   pic s9999   display             .
+         77 d5   pic s9999   display             .
+         77 d9   pic s9999   display             .
+ 
+         procedure                   division.
+             display "-1234.0 -1234.1 -1234.5 -1234.9"
+             compute d0                     = v0
+             compute d1                     = v1
+             compute d5                     = v5
+             compute d9                     = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "truncated"
+ 
+             compute d0 ROUNDED MODE AWAY-FROM-ZERO = v0
+             compute d1 ROUNDED MODE AWAY-FROM-ZERO = v1
+             compute d5 ROUNDED MODE AWAY-FROM-ZERO = v5
+             compute d9 ROUNDED MODE AWAY-FROM-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "away-from-zero"
+ 
+             compute d0 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v0
+             compute d1 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v1
+             compute d5 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v5
+             compute d9 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-away-from-zero"
+ 
+             compute d0 ROUNDED MODE NEAREST-EVEN = v0
+             compute d1 ROUNDED MODE NEAREST-EVEN = v1
+             compute d5 ROUNDED MODE NEAREST-EVEN = v5
+             compute d9 ROUNDED MODE NEAREST-EVEN = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-even"
+ 
+             compute d0 ROUNDED MODE NEAREST-TOWARD-ZERO = v0
+             compute d1 ROUNDED MODE NEAREST-TOWARD-ZERO = v1
+             compute d5 ROUNDED MODE NEAREST-TOWARD-ZERO = v5
+             compute d9 ROUNDED MODE NEAREST-TOWARD-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-toward-zero"
+ 
+             compute d0 ROUNDED MODE TOWARD-GREATER = v0
+             compute d1 ROUNDED MODE TOWARD-GREATER = v1
+             compute d5 ROUNDED MODE TOWARD-GREATER = v5
+             compute d9 ROUNDED MODE TOWARD-GREATER = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "toward-greater"
+ 
+             compute d0 ROUNDED MODE TOWARD-LESSER = v0
+             compute d1 ROUNDED MODE TOWARD-LESSER = v1
+             compute d5 ROUNDED MODE TOWARD-LESSER = v5
+             compute d9 ROUNDED MODE TOWARD-LESSER = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "toward-lesser"
+ 
+             goback.
+         end program                 prog.
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.out gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.out
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_negative.out	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,9 ----
+ -1234.0 -1234.1 -1234.5 -1234.9
+ -1234   -1234   -1234   -1234   truncated
+ -1234   -1235   -1235   -1235   away-from-zero
+ -1234   -1234   -1235   -1235   nearest-away-from-zero
+ -1234   -1234   -1234   -1235   nearest-even
+ -1234   -1234   -1234   -1235   nearest-toward-zero
+ -1234   -1234   -1234   -1234   toward-greater
+ -1234   -1235   -1235   -1235   toward-lesser
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.cob gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.cob
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.cob	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,62 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Rounding_from_BINARY_signable_and_positive.out" }
+         identification              division.
+         program-id.                 prog.
+         data                        division.
+         working-storage             section.
+         77 v0 pic s9999v9 binary value 1234.0 .
+         77 v1 pic s9999v9 binary value 1234.1 .
+         77 v5 pic s9999v9 binary value 1234.5 .
+         77 v9 pic s9999v9 binary value 1234.9 .
+         77 d0   pic s9999   display             .
+         77 d1   pic s9999   display             .
+         77 d5   pic s9999   display             .
+         77 d9   pic s9999   display             .
+ 
+         procedure                   division.
+             display "+1234.0 +1234.1 +1234.5 +1234.9"
+             compute d0                     = v0
+             compute d1                     = v1
+             compute d5                     = v5
+             compute d9                     = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "truncated"
+ 
+             compute d0 ROUNDED MODE AWAY-FROM-ZERO = v0
+             compute d1 ROUNDED MODE AWAY-FROM-ZERO = v1
+             compute d5 ROUNDED MODE AWAY-FROM-ZERO = v5
+             compute d9 ROUNDED MODE AWAY-FROM-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "away-from-zero"
+ 
+             compute d0 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v0
+             compute d1 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v1
+             compute d5 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v5
+             compute d9 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-away-from-zero"
+ 
+             compute d0 ROUNDED MODE NEAREST-EVEN = v0
+             compute d1 ROUNDED MODE NEAREST-EVEN = v1
+             compute d5 ROUNDED MODE NEAREST-EVEN = v5
+             compute d9 ROUNDED MODE NEAREST-EVEN = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-even"
+ 
+             compute d0 ROUNDED MODE NEAREST-TOWARD-ZERO = v0
+             compute d1 ROUNDED MODE NEAREST-TOWARD-ZERO = v1
+             compute d5 ROUNDED MODE NEAREST-TOWARD-ZERO = v5
+             compute d9 ROUNDED MODE NEAREST-TOWARD-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-toward-zero"
+ 
+             compute d0 ROUNDED MODE TOWARD-GREATER = v0
+             compute d1 ROUNDED MODE TOWARD-GREATER = v1
+             compute d5 ROUNDED MODE TOWARD-GREATER = v5
+             compute d9 ROUNDED MODE TOWARD-GREATER = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "toward-greater"
+ 
+             compute d0 ROUNDED MODE TOWARD-LESSER = v0
+             compute d1 ROUNDED MODE TOWARD-LESSER = v1
+             compute d5 ROUNDED MODE TOWARD-LESSER = v5
+             compute d9 ROUNDED MODE TOWARD-LESSER = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "toward-lesser"
+ 
+             goback.
+         end program                 prog.
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.out gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.out
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_signable_and_positive.out	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,9 ----
+ +1234.0 +1234.1 +1234.5 +1234.9
+ +1234   +1234   +1234   +1234   truncated
+ +1234   +1235   +1235   +1235   away-from-zero
+ +1234   +1234   +1235   +1235   nearest-away-from-zero
+ +1234   +1234   +1234   +1235   nearest-even
+ +1234   +1234   +1234   +1235   nearest-toward-zero
+ +1234   +1235   +1235   +1235   toward-greater
+ +1234   +1234   +1234   +1234   toward-lesser
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.cob gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.cob
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.cob	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.cob	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,62 ----
+        *> { dg-do run }
+        *> { dg-output-file "group2/Rounding_from_BINARY_unsignable.out" }
+         identification              division.
+         program-id.                 prog.
+         data                        division.
+         working-storage             section.
+         77 v0 pic 9999v9 binary value 1234.0 .
+         77 v1 pic 9999v9 binary value 1234.1 .
+         77 v5 pic 9999v9 binary value 1234.5 .
+         77 v9 pic 9999v9 binary value 1234.9 .
+         77 d0   pic s9999   display             .
+         77 d1   pic s9999   display             .
+         77 d5   pic s9999   display             .
+         77 d9   pic s9999   display             .
+ 
+         procedure                   division.
+             display " 1234.0  1234.1  1234.5  1234.9"
+             compute d0                     = v0
+             compute d1                     = v1
+             compute d5                     = v5
+             compute d9                     = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "truncated"
+ 
+             compute d0 ROUNDED MODE AWAY-FROM-ZERO = v0
+             compute d1 ROUNDED MODE AWAY-FROM-ZERO = v1
+             compute d5 ROUNDED MODE AWAY-FROM-ZERO = v5
+             compute d9 ROUNDED MODE AWAY-FROM-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "away-from-zero"
+ 
+             compute d0 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v0
+             compute d1 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v1
+             compute d5 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v5
+             compute d9 ROUNDED MODE NEAREST-AWAY-FROM-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-away-from-zero"
+ 
+             compute d0 ROUNDED MODE NEAREST-EVEN = v0
+             compute d1 ROUNDED MODE NEAREST-EVEN = v1
+             compute d5 ROUNDED MODE NEAREST-EVEN = v5
+             compute d9 ROUNDED MODE NEAREST-EVEN = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-even"
+ 
+             compute d0 ROUNDED MODE NEAREST-TOWARD-ZERO = v0
+             compute d1 ROUNDED MODE NEAREST-TOWARD-ZERO = v1
+             compute d5 ROUNDED MODE NEAREST-TOWARD-ZERO = v5
+             compute d9 ROUNDED MODE NEAREST-TOWARD-ZERO = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "nearest-toward-zero"
+ 
+             compute d0 ROUNDED MODE TOWARD-GREATER = v0
+             compute d1 ROUNDED MODE TOWARD-GREATER = v1
+             compute d5 ROUNDED MODE TOWARD-GREATER = v5
+             compute d9 ROUNDED MODE TOWARD-GREATER = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "toward-greater"
+ 
+             compute d0 ROUNDED MODE TOWARD-LESSER = v0
+             compute d1 ROUNDED MODE TOWARD-LESSER = v1
+             compute d5 ROUNDED MODE TOWARD-LESSER = v5
+             compute d9 ROUNDED MODE TOWARD-LESSER = v9
+             display d0 "   " d1 "   " d5 "   " d9 "   " "toward-lesser"
+ 
+             goback.
+         end program                 prog.
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.out gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.out
*** gcc-17-20260621/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.out	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/cobol.dg/group2/Rounding_from_BINARY_unsignable.out	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,9 ----
+  1234.0  1234.1  1234.5  1234.9
+ +1234   +1234   +1234   +1234   truncated
+ +1234   +1235   +1235   +1235   away-from-zero
+ +1234   +1234   +1235   +1235   nearest-away-from-zero
+ +1234   +1234   +1234   +1235   nearest-even
+ +1234   +1234   +1234   +1235   nearest-toward-zero
+ +1234   +1235   +1235   +1235   toward-greater
+ +1234   +1234   +1234   +1234   toward-lesser
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/ext-floating1.C gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/ext-floating1.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/ext-floating1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/ext-floating1.C	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,122 ----
+ // P3899R3 - Clarify the behavior of floating-point overflow
+ // { dg-do compile { target c++23 } }
+ // { dg-options "-fexcess-precision=16" }
+ // { dg-add-options float16 }
+ // { dg-add-options float32 }
+ // { dg-add-options float64 }
+ // { dg-add-options float128 }
+ // { dg-add-options bfloat16 }
+ 
+ #include <stdfloat>
+ #include <limits>
+ 
+ #ifdef __STDCPP_FLOAT16_T__
+ constexpr std::float16_t min16 = std::numeric_limits<std::float16_t>::min ();
+ constexpr std::float16_t max16 = std::numeric_limits<std::float16_t>::max ();
+ constexpr std::float16_t inf16 = std::numeric_limits<std::float16_t>::infinity ();
+ constexpr std::float16_t nan16 = std::numeric_limits<std::float16_t>::quiet_NaN ();
+ constexpr std::float16_t snan16 = std::numeric_limits<std::float16_t>::signaling_NaN ();
+ 
+ // Furthermore, if arithmetic expressions with operands of type std::float16_t
+ // behave as specified in ISO/IEC 60559 for binary16:
+ constexpr std::float16_t inf216 = inf16 * 2.0f16; // OK, also positive infinity
+ constexpr std::float16_t zero16 = min16 / max16; // OK, result cannot be represented, and is rounded to zero
+ constexpr std::float16_t oflo16 = max16 * 2.0f16; // { dg-error "is not a constant expression" "" { target float16 } }
+ constexpr std::float16_t nan216 = nan16 * 2.0f16; // OK, propagating a NaN
+ constexpr std::float16_t udef16 = inf16 * 0.0f16; // { dg-error "is not a constant expression" "" { target float16 } }
+ constexpr std::float16_t div016 = max16 / 0.0f16; // { dg-error "is not a constant expression" "" { target float16 } }
+ constexpr std::float16_t zero216 = min16 * min16;
+ constexpr bool nancmp16 = nan16 < 0.0f16;
+ constexpr std::float16_t snan216 = snan16 * 2.0f16;
+ constexpr std::float16_t div0216 = 1.0f16 / 0.0f16; // { dg-error "is not a constant expression" "" { target float16 } }
+ constexpr std::float16_t div0316 = 0.0f16 / 0.0f16; // { dg-error "is not a constant expression" "" { target float16 } }
+ #endif
+ 
+ #ifdef __STDCPP_FLOAT32_T__
+ constexpr std::float32_t min32 = std::numeric_limits<std::float32_t>::min ();
+ constexpr std::float32_t max32 = std::numeric_limits<std::float32_t>::max ();
+ constexpr std::float32_t inf32 = std::numeric_limits<std::float32_t>::infinity ();
+ constexpr std::float32_t nan32 = std::numeric_limits<std::float32_t>::quiet_NaN ();
+ constexpr std::float32_t snan32 = std::numeric_limits<std::float32_t>::signaling_NaN ();
+ 
+ // Furthermore, if arithmetic expressions with operands of type std::float32_t
+ // behave as specified in ISO/IEC 60559 for binary32:
+ constexpr std::float32_t inf232 = inf32 * 2.0f32; // OK, also positive infinity
+ constexpr std::float32_t zero32 = min32 / max32; // OK, result cannot be represented, and is rounded to zero
+ constexpr std::float32_t oflo32 = max32 * 2.0f32; // { dg-error "is not a constant expression" "" { target float32 } }
+ constexpr std::float32_t nan232 = nan32 * 2.0f32; // OK, propagating a NaN
+ constexpr std::float32_t udef32 = inf32 * 0.0f32; // { dg-error "is not a constant expression" "" { target float32 } }
+ constexpr std::float32_t div032 = max32 / 0.0f32; // { dg-error "is not a constant expression" "" { target float32 } }
+ constexpr std::float32_t zero232 = min32 * min32;
+ constexpr bool nancmp32 = nan32 < 0.0f32;
+ constexpr std::float32_t snan232 = snan32 * 2.0f32;
+ constexpr std::float32_t div0232 = 1.0f32 / 0.0f32; // { dg-error "is not a constant expression" "" { target float32 } }
+ constexpr std::float32_t div0332 = 0.0f32 / 0.0f32; // { dg-error "is not a constant expression" "" { target float32 } }
+ #endif
+ 
+ #ifdef __STDCPP_FLOAT64_T__
+ constexpr std::float64_t min64 = std::numeric_limits<std::float64_t>::min ();
+ constexpr std::float64_t max64 = std::numeric_limits<std::float64_t>::max ();
+ constexpr std::float64_t inf64 = std::numeric_limits<std::float64_t>::infinity ();
+ constexpr std::float64_t nan64 = std::numeric_limits<std::float64_t>::quiet_NaN ();
+ constexpr std::float64_t snan64 = std::numeric_limits<std::float64_t>::signaling_NaN ();
+ 
+ // Furthermore, if arithmetic expressions with operands of type std::float64_t
+ // behave as specified in ISO/IEC 60559 for binary64:
+ constexpr std::float64_t inf264 = inf64 * 2.0f64; // OK, also positive infinity
+ constexpr std::float64_t zero64 = min64 / max64; // OK, result cannot be represented, and is rounded to zero
+ constexpr std::float64_t oflo64 = max64 * 2.0f64; // { dg-error "is not a constant expression" "" { target float64 } }
+ constexpr std::float64_t nan264 = nan64 * 2.0f64; // OK, propagating a NaN
+ constexpr std::float64_t udef64 = inf64 * 0.0f64; // { dg-error "is not a constant expression" "" { target float64 } }
+ constexpr std::float64_t div064 = max64 / 0.0f64; // { dg-error "is not a constant expression" "" { target float64 } }
+ constexpr std::float64_t zero264 = min64 * min64;
+ constexpr bool nancmp64 = nan64 < 0.0f64;
+ constexpr std::float64_t snan264 = snan64 * 2.0f64;
+ constexpr std::float64_t div0264 = 1.0f64 / 0.0f64; // { dg-error "is not a constant expression" "" { target float64 } }
+ constexpr std::float64_t div0364 = 0.0f64 / 0.0f64; // { dg-error "is not a constant expression" "" { target float64 } }
+ #endif
+ 
+ #ifdef __STDCPP_FLOAT128_T__
+ constexpr std::float128_t min128 = std::numeric_limits<std::float128_t>::min ();
+ constexpr std::float128_t max128 = std::numeric_limits<std::float128_t>::max ();
+ constexpr std::float128_t inf128 = std::numeric_limits<std::float128_t>::infinity ();
+ constexpr std::float128_t nan128 = std::numeric_limits<std::float128_t>::quiet_NaN ();
+ constexpr std::float128_t snan128 = std::numeric_limits<std::float128_t>::signaling_NaN ();
+ 
+ // Furthermore, if arithmetic expressions with operands of type std::float128_t
+ // behave as specified in ISO/IEC 60559 for binary128:
+ constexpr std::float128_t inf2128 = inf128 * 2.0f128; // OK, also positive infinity
+ constexpr std::float128_t zero128 = min128 / max128; // OK, result cannot be represented, and is rounded to zero
+ constexpr std::float128_t oflo128 = max128 * 2.0f128; // { dg-error "is not a constant expression" "" { target float128 } }
+ constexpr std::float128_t nan2128 = nan128 * 2.0f128; // OK, propagating a NaN
+ constexpr std::float128_t udef128 = inf128 * 0.0f128; // { dg-error "is not a constant expression" "" { target float128 } }
+ constexpr std::float128_t div0128 = max128 / 0.0f128; // { dg-error "is not a constant expression" "" { target float128 } }
+ constexpr std::float128_t zero2128 = min128 * min128;
+ constexpr bool nancmp128 = nan128 < 0.0f128;
+ constexpr std::float128_t snan2128 = snan128 * 2.0f128;
+ constexpr std::float128_t div02128 = 1.0f128 / 0.0f128; // { dg-error "is not a constant expression" "" { target float128 } }
+ constexpr std::float128_t div03128 = 0.0f128 / 0.0f128; // { dg-error "is not a constant expression" "" { target float128 } }
+ #endif
+ 
+ #ifdef __STDCPP_BFLOAT16_T__
+ constexpr std::bfloat16_t minb16 = std::numeric_limits<std::bfloat16_t>::min ();
+ constexpr std::bfloat16_t maxb16 = std::numeric_limits<std::bfloat16_t>::max ();
+ constexpr std::bfloat16_t infb16 = std::numeric_limits<std::bfloat16_t>::infinity ();
+ constexpr std::bfloat16_t nanb16 = std::numeric_limits<std::bfloat16_t>::quiet_NaN ();
+ constexpr std::bfloat16_t snanb16 = std::numeric_limits<std::bfloat16_t>::signaling_NaN ();
+ 
+ constexpr std::bfloat16_t inf2b16 = infb16 * 2.0bf16; // OK, also positive infinity
+ constexpr std::bfloat16_t zerob16 = minb16 / maxb16; // OK, result cannot be represented, and is rounded to zero
+ constexpr std::bfloat16_t oflob16 = maxb16 * 2.0bf16; // { dg-error "is not a constant expression" "" { target bfloat16 } }
+ constexpr std::bfloat16_t nan2b16 = nanb16 * 2.0bf16; // OK, propagating a NaN
+ constexpr std::bfloat16_t udefb16 = infb16 * 0.0bf16; // { dg-error "is not a constant expression" "" { target bfloat16 } }
+ constexpr std::bfloat16_t div0b16 = maxb16 / 0.0bf16; // { dg-error "is not a constant expression" "" { target bfloat16 } }
+ constexpr std::bfloat16_t zero2b16 = minb16 * minb16;
+ constexpr bool nancmpb16 = nanb16 < 0.0bf16;
+ constexpr std::bfloat16_t snan2b16 = snanb16 * 2.0bf16;
+ constexpr std::bfloat16_t div02b16 = 1.0bf16 / 0.0bf16; // { dg-error "is not a constant expression" "" { target bfloat16 } }
+ constexpr std::bfloat16_t div03b16 = 0.0bf16 / 0.0bf16; // { dg-error "is not a constant expression" "" { target bfloat16 } }
+ #endif
+ 
+ constexpr int div0 = 0 / 0; // { dg-error "division by zero is not a constant expression" }
+ // { dg-warning "division by zero" "" { target *-*-* } .-1 }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/lambda-order1.C gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/lambda-order1.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/lambda-order1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/lambda-order1.C	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,80 ----
+ // P3847R1 - Lexical order for lambdas
+ // { dg-do run { target c++14 } }
+ 
+ int e;
+ 
+ int
+ foo (int x)
+ {
+   if (x != e)
+     __builtin_abort ();
+   ++e;
+   return x;
+ }
+ 
+ int &
+ bar (int x)
+ {
+   if (x != e)
+     __builtin_abort ();
+   ++e;
+   return e;
+ }
+ 
+ int
+ main ()
+ {
+   int a = 1;
+   long b = 2;
+   double c = 3;
+   short d = 4;
+   foo (0);
+   auto f = [&, a0 = foo (1), a, a1 = foo (2),
+ 	    b0 = foo (3), b, b1 = foo (4),
+ 	    c0 = foo (5), c, c1 = foo (6)] () {
+     if (&a0 >= &a
+ 	|| &a >= &a1
+ 	|| (const void *) &a1 >= (const void *) &b0
+ 	|| (const void *) &b0 >= (const void *) &b
+ 	/* d is captured implicitly, the ordering for
+ 	   the d member vs. the explicitly captured
+ 	   ones is still unspecified by C++, but part
+ 	   of the Itanium ABI.  Just test that it doesn't
+ 	   change the order of the explicit captures.  */
+ 	|| d != 4
+ 	|| (const void *) &b >= (const void *) &b1
+ 	|| (const void *) &b1 >= (const void *) &c0
+ 	|| (const void *) &c0 >= (const void *) &c
+ 	|| (const void *) &c >= (const void *) &c1)
+       __builtin_abort ();
+   };
+   foo (7);
+   f ();
+   foo (8);
+   f ();
+   foo (9);
+   auto g = [=, &a0 = bar (10), &a, &a1 = bar (11),
+ 	    &b0 = bar (12), &b, &b1 = bar (13),
+ 	    &c0 = bar (14), &c, &c1 = bar (15)] () {
+     return a0 + a + a1 + b0 + b + b1 + c0 + c + c1;
+   };
+   foo (16);
+   g ();
+   foo (17);
+   auto h = [&, a0 = foo (18), a, a1 = foo (19),
+ 	    b0 = foo (20), b, b1 = foo (21),
+ 	    c0 = foo (22), c, c1 = foo (23)] () {
+     if (&a0 >= &a
+ 	|| &a >= &a1
+ 	|| (const void *) &a1 >= (const void *) &b0
+ 	|| (const void *) &b0 >= (const void *) &b
+ 	|| (const void *) &b >= (const void *) &b1
+ 	|| (const void *) &b1 >= (const void *) &c0
+ 	|| (const void *) &c0 >= (const void *) &c
+ 	|| (const void *) &c >= (const void *) &c1)
+       __builtin_abort ();
+   };
+   foo (24);
+   h ();
+   foo (25);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/lambda-order2.C gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/lambda-order2.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/lambda-order2.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/lambda-order2.C	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,24 ----
+ // P3847R1 - Lexical order for lambdas
+ // { dg-do run { target c++11 } }
+ 
+ int
+ main ()
+ {
+   int a = 1;
+   long b = 2;
+   double c = 3;
+   short d = 4;
+   auto f = [&, a, b, c] () {
+     if ((const void *) &a >= (const void *) &b
+ 	/* d is captured implicitly, the ordering for
+ 	   the d member vs. the explicitly captured
+ 	   ones is still unspecified by C++, but part
+ 	   of the Itanium ABI.  Just test that it doesn't
+ 	   change the order of the explicit captures.  */
+ 	|| d != 4
+ 	|| (const void *) &b >= (const void *) &c)
+       __builtin_abort ();
+   };
+   f ();
+   f ();
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/std-floating1.C gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/std-floating1.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/cpp29/std-floating1.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/cpp29/std-floating1.C	Sun Jun 28 22:32:11 2026
***************
*** 0 ****
--- 1,57 ----
+ // P3899R3 - Clarify the behavior of floating-point overflow
+ // { dg-do compile { target { c++11 && flt_dbl_ldbl_inf_nan } } }
+ // { dg-options "" }
+ 
+ constexpr float minf = __FLT_MIN__;
+ constexpr float maxf = __FLT_MAX__;
+ constexpr float inff = __builtin_inff ();
+ constexpr float nanf = __builtin_nanf ("");
+ constexpr float snanf = __builtin_nansf ("");
+ 
+ constexpr float inf2f = inff * 2.0f; // OK, also positive infinity
+ constexpr float zerof = minf / maxf; // OK, result cannot be represented, and is rounded to zero
+ constexpr float oflof = maxf * 2.0f; // { dg-error "is not a constant expression" }
+ constexpr float nan2f = nanf * 2.0f; // OK, propagating a NaN
+ constexpr float udeff = inff * 0.0f; // { dg-error "is not a constant expression" }
+ constexpr float div0f = maxf / 0.0f; // { dg-error "is not a constant expression" }
+ constexpr float zero2f = minf * minf;
+ constexpr bool nancmpf = nanf < 0.0f;
+ constexpr float snan2f = snanf * 2.0f;
+ constexpr float div02f = 1.0f / 0.0f; // { dg-error "is not a constant expression" }
+ constexpr float div03f = 0.0f / 0.0f; // { dg-error "is not a constant expression" }
+ 
+ constexpr double mind = __DBL_MIN__;
+ constexpr double maxd = __DBL_MAX__;
+ constexpr double infd = __builtin_inf ();
+ constexpr double nand = __builtin_nan ("");
+ constexpr double snand = __builtin_nans ("");
+ 
+ constexpr double inf2d = infd * 2.0; // OK, also positive infinity
+ constexpr double zerod = mind / maxd; // OK, result cannot be represented, and is rounded to zero
+ constexpr double oflod = maxd * 2.0; // { dg-error "is not a constant expression" }
+ constexpr double nan2d = nand * 2.0; // OK, propagating a NaN
+ constexpr double udefd = infd * 0.0; // { dg-error "is not a constant expression" }
+ constexpr double div0d = maxd / 0.0; // { dg-error "is not a constant expression" }
+ constexpr double zero2d = mind * mind;
+ constexpr bool nancmpd = nand < 0.0;
+ constexpr double snan2d = snand * 2.0;
+ constexpr double div02d = 1.0 / 0.0; // { dg-error "is not a constant expression" }
+ constexpr double div03d = 0.0 / 0.0; // { dg-error "is not a constant expression" }
+ 
+ constexpr long double minld = __LDBL_MIN__;
+ constexpr long double maxld = __LDBL_MAX__;
+ constexpr long double infld = __builtin_infl ();
+ constexpr long double nanld = __builtin_nanl ("");
+ constexpr long double snanld = __builtin_nansl ("");
+ 
+ constexpr long double inf2ld = infld * 2.0L; // OK, also positive infinity
+ constexpr long double zerold = minld / maxld; // OK, result cannot be represented, and is rounded to zero
+ constexpr long double oflold = maxld * 2.0L; // { dg-error "is not a constant expression" }
+ constexpr long double nan2ld = nanld * 2.0L; // OK, propagating a NaN
+ constexpr long double udefld = infld * 0.0L; // { dg-error "is not a constant expression" }
+ constexpr long double div0ld = maxld / 0.0L; // { dg-error "is not a constant expression" }
+ constexpr long double zero2ld = minld * minld;
+ constexpr bool nancmpld = nanld < 0.0L;
+ constexpr long double snan2ld = snanld * 2.0L;
+ constexpr long double div02ld = 1.0L / 0.0L; // { dg-error "is not a constant expression" }
+ constexpr long double div03ld = 0.0L / 0.0L; // { dg-error "is not a constant expression" }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/gomp/barrier-1.C gcc-17-20260628/gcc/testsuite/g++.dg/gomp/barrier-1.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/gomp/barrier-1.C	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/g++.dg/gomp/barrier-1.C	Sun Jun 28 22:32:12 2026
*************** void f2(bool p)
*** 14,17 ****
      }
  }
  
! /* { dg-final { scan-tree-dump-times "GOMP_barrier" 2 "gimple" } } */
--- 14,17 ----
      }
  }
  
! /* { dg-final { scan-tree-dump-times "GOMP_barrier_ext \\(2\\)" 2 "gimple" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/gomp/master-3.C gcc-17-20260628/gcc/testsuite/g++.dg/gomp/master-3.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/gomp/master-3.C	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/g++.dg/gomp/master-3.C	Sun Jun 28 22:32:12 2026
*************** void foo (void)
*** 9,12 ****
      bar(0);
  }
  
! /* { dg-final { scan-tree-dump-times "omp_get_thread_num" 1 "omplower" } } */
--- 9,12 ----
      bar(0);
  }
  
! /* { dg-final { scan-tree-dump-times "GOMP_has_masked_thread_num" 1 "omplower" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/gomp/tpl-barrier-1.C gcc-17-20260628/gcc/testsuite/g++.dg/gomp/tpl-barrier-1.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/gomp/tpl-barrier-1.C	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/g++.dg/gomp/tpl-barrier-1.C	Sun Jun 28 22:32:12 2026
*************** void f3 ()
*** 21,24 ****
    f2<0> (true);
  }
  
! // { dg-final { scan-tree-dump-times "GOMP_barrier" 2 "gimple" } }
--- 21,24 ----
    f2<0> (true);
  }
  
! // { dg-final { scan-tree-dump-times "GOMP_barrier_ext" 2 "gimple" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/modules/adl-12_b.C gcc-17-20260628/gcc/testsuite/g++.dg/modules/adl-12_b.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/modules/adl-12_b.C	Sun Jun 21 22:32:08 2026
--- gcc-17-20260628/gcc/testsuite/g++.dg/modules/adl-12_b.C	Sun Jun 28 22:32:12 2026
***************
*** 1,4 ****
! // { dg-additional-options "-fmodules" }
  // Example from [temp.dep.candidate]
  
  namespace Q {
--- 1,4 ----
! // { dg-additional-options "-fmodules -fdump-lang-module" }
  // Example from [temp.dep.candidate]
  
  namespace Q {
*************** import M;
*** 12,19 ****
--- 12,23 ----
  
  void test(Q::X x) {
    g(x);  // OK
+   // { dg-final { scan-lang-dump "Lazily binding '::Q::g_impl'" module } }
+   // { dg-final { scan-lang-dump "Lazily binding '::Q::operator-'" module } }
    Partial<Q::X>::f<int>();
+   // { dg-final { scan-lang-dump "Lazily binding '::Q::go_partial'" module } }
    Partial<Q::X>::o<int>();
+   // { dg-final { scan-lang-dump "Lazily binding '::Q::operator/'" module } }
    incomplete(0);  // OK
    needs_completion(0);  // { dg-bogus "required from here" "PR123235" { xfail *-*-* } }
    // { dg-prune-output "not declared in this scope" }
*************** void test(Q::X x) {
*** 22,26 ****
--- 26,32 ----
    rewrite_ops(0);  // OK
    rewrite_ops_error(0);  // { dg-message "required from here" "" { target c++20 } }
    // { dg-prune-output "no match for" }
+   // { dg-final { scan-lang-dump {Lazily binding '::ops1::operator<=>'} module { target c++20 } } }
+   // { dg-final { scan-lang-dump {Lazily binding '::ops1::operator=='} module { target c++20 } } }
  #endif
  }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/modules/alias-3_a.C gcc-17-20260628/gcc/testsuite/g++.dg/modules/alias-3_a.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/modules/alias-3_a.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/modules/alias-3_a.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/125768
+ // { dg-additional-options -fmodules }
+ 
+ export module api;
+ export struct S { };
+ export template <class T> struct A { };
+ export using a_s = A<S>;
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/modules/alias-3_b.C gcc-17-20260628/gcc/testsuite/g++.dg/modules/alias-3_b.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/modules/alias-3_b.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/modules/alias-3_b.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,9 ----
+ // PR c++/125768
+ // { dg-additional-options -fmodules }
+ 
+ export module outer;
+ import api;
+ struct Outer {
+   a_s sub;
+   Outer();
+ };
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/modules/alias-3_c.C gcc-17-20260628/gcc/testsuite/g++.dg/modules/alias-3_c.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/modules/alias-3_c.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/modules/alias-3_c.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/125768
+ // { dg-additional-options -fmodules }
+ 
+ module outer;
+ Outer::Outer() {}
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/pr125977.C gcc-17-20260628/gcc/testsuite/g++.dg/pr125977.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/pr125977.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/pr125977.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -std=gnu++17" } */
+ 
+ template <typename> class allocator;
+ char copy___s2[12];
+ void assign(char, char &);
+ template <typename> struct allocator_traits;
+ template <typename _Tp> struct allocator_traits<allocator<_Tp>> {
+   using pointer = _Tp *;
+ };
+ allocator_traits<allocator<char>>::pointer _M_p;
+ struct _Alloc_result {
+   allocator_traits<allocator<char>>::pointer __ptr;
+ };
+ unsigned _M_string_length;
+ enum { _S_local_capacity = 5 } _M_allocated_capacity;
+ bool _M_is_local() {
+   if (_M_p) {
+     if (_M_string_length > _S_local_capacity)
+       __builtin_unreachable();
+     return true;
+   }
+   return false;
+ }
+ int capacity() {
+   long __sz = _M_is_local() ? _S_local_capacity : _M_allocated_capacity;
+   return __sz;
+ }
+ struct Trans_NS___cxx11_basic_string {
+   void operator=(char) { _M_string_length = 0; }
+   void operator+=(char __c) {
+     _Alloc_result __trans_tmp_7;
+     if (_M_string_length + 1 > capacity()) {
+       char __s;
+       if (_M_string_length == 1)
+         assign(*__trans_tmp_7.__ptr, __s);
+       __builtin_memcpy(__trans_tmp_7.__ptr, &copy___s2, _M_string_length);
+       if (_M_string_length > _S_local_capacity)
+         __builtin_unreachable();
+     }
+     assign(_M_string_length, __c);
+   }
+ };
+ long build_attr_access_from_parms_specend;
+ void build_attr_access_from_parms() {
+   Trans_NS___cxx11_basic_string spec;
+   if (build_attr_access_from_parms_specend)
+     spec = '+';
+   spec += '[';
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/reflect/error14.C gcc-17-20260628/gcc/testsuite/g++.dg/reflect/error14.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/reflect/error14.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/reflect/error14.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,15 ----
+ // PR c++/125922
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ void
+ f ()
+ {
+   consteval {
+     (void) ^^struct { }; // { dg-error "types may not be defined" }
+     (void) ^^struct S { }; // { dg-error "types may not be defined" }
+     (void) ^^struct A { struct B { }; }; // { dg-error "types may not be defined" }
+     (void) ^^enum E { }; // { dg-error "types may not be defined" }
+     (void) ^^union U { }; // { dg-error "types may not be defined" }
+   }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/reflect/expr18.C gcc-17-20260628/gcc/testsuite/g++.dg/reflect/expr18.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/reflect/expr18.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/reflect/expr18.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,25 ----
+ // PR c++/125900
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ #include <print>
+ 
+ struct S {
+     float f;
+ };
+ 
+ int main() {
+     S s{.f = 1.5f};
+ 
+     constexpr auto member{^^S::f};
+     std::println("{}", s.[:member:]);
+     std::println("{}", static_cast<int>(s.[:member:]));
+ 
+     constexpr auto access_context{std::meta::access_context::current()};
+     template for (constexpr auto member :
+                   std::define_static_array(nonstatic_data_members_of(^^S, access_context))) {
+         std::println("{}", s.[:member:]);
+         std::println("{}", static_cast<int>(s.[:member:]));
+     }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/reflect/members_of16.C gcc-17-20260628/gcc/testsuite/g++.dg/reflect/members_of16.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/reflect/members_of16.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/reflect/members_of16.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,14 ----
+ // PR c++/125889
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ using L = decltype([]{});
+ /* There should be at least operator().  */
+ static_assert(members_of(^^L, std::meta::access_context::unchecked()).size() > 0);
+ /* This is lazy; there can be more members than the call operator:
+    "It is implementation-defined whether declarations of other members of
+    a closure type Q are Q-members-of-eligible."  At least we'll know when
+    something changes, though.  */
+ static_assert(is_operator_function(members_of(^^L, std::meta::access_context::unchecked())[0]));
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/reflect/type_trait15.C gcc-17-20260628/gcc/testsuite/g++.dg/reflect/type_trait15.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/reflect/type_trait15.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/reflect/type_trait15.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,133 ----
+ // PR c++/125939
+ // { dg-do compile { target c++26 } }
+ // { dg-additional-options "-freflection" }
+ 
+ #include <meta>
+ 
+ template<typename T>
+ constexpr bool cct = std::meta::is_copy_constructible_type(^^T);
+ 
+ int main() {
+     using T = int&;
+     static_assert(std::meta::is_copy_constructible_type(^^T));
+     static_assert(cct<int&>);
+ }
+ 
+ static_assert (is_copy_constructible_type (^^int));
+ static_assert (std::is_copy_constructible_v<int>);
+ static_assert (is_copy_constructible_type (^^const int));
+ static_assert (std::is_copy_constructible_v<const int>);
+ static_assert (is_copy_constructible_type (^^int &));
+ static_assert (std::is_copy_constructible_v<int &>);
+ static_assert (is_copy_constructible_type (^^const int &));
+ static_assert (std::is_copy_constructible_v<const int &>);
+ static_assert (!is_copy_constructible_type (^^int &&));
+ static_assert (!std::is_copy_constructible_v<int &&>);
+ static_assert (!is_copy_constructible_type (^^const int &&));
+ static_assert (!std::is_copy_constructible_v<const int &&>);
+ static_assert (!is_copy_constructible_type (^^void));
+ static_assert (!std::is_copy_constructible_v<void>);
+ static_assert (!is_copy_constructible_type (^^int() const &));
+ static_assert (!std::is_copy_constructible_v<int() const &>);
+ 
+ static_assert (is_trivially_copy_constructible_type (^^int));
+ static_assert (std::is_trivially_copy_constructible_v<int>);
+ static_assert (is_trivially_copy_constructible_type (^^const int));
+ static_assert (std::is_trivially_copy_constructible_v<const int>);
+ static_assert (is_trivially_copy_constructible_type (^^int &));
+ static_assert (std::is_trivially_copy_constructible_v<int &>);
+ static_assert (is_trivially_copy_constructible_type (^^const int &));
+ static_assert (std::is_trivially_copy_constructible_v<const int &>);
+ static_assert (!is_trivially_copy_constructible_type (^^int &&));
+ static_assert (!std::is_trivially_copy_constructible_v<int &&>);
+ static_assert (!is_trivially_copy_constructible_type (^^const int &&));
+ static_assert (!std::is_trivially_copy_constructible_v<const int &&>);
+ static_assert (!is_trivially_copy_constructible_type (^^void));
+ static_assert (!std::is_trivially_copy_constructible_v<void>);
+ static_assert (!is_trivially_copy_constructible_type (^^int() const &));
+ static_assert (!std::is_trivially_copy_constructible_v<int() const &>);
+ 
+ static_assert (is_nothrow_copy_constructible_type (^^int));
+ static_assert (std::is_nothrow_copy_constructible_v<int>);
+ static_assert (is_nothrow_copy_constructible_type (^^const int));
+ static_assert (std::is_nothrow_copy_constructible_v<const int>);
+ static_assert (is_nothrow_copy_constructible_type (^^int &));
+ static_assert (std::is_nothrow_copy_constructible_v<int &>);
+ static_assert (is_nothrow_copy_constructible_type (^^const int &));
+ static_assert (std::is_nothrow_copy_constructible_v<const int &>);
+ static_assert (!is_nothrow_copy_constructible_type (^^int &&));
+ static_assert (!std::is_nothrow_copy_constructible_v<int &&>);
+ static_assert (!is_nothrow_copy_constructible_type (^^const int &&));
+ static_assert (!std::is_nothrow_copy_constructible_v<const int &&>);
+ static_assert (!is_nothrow_copy_constructible_type (^^void));
+ static_assert (!std::is_nothrow_copy_constructible_v<void>);
+ static_assert (!is_nothrow_copy_constructible_type (^^int() const &));
+ static_assert (!std::is_nothrow_copy_constructible_v<int() const &>);
+ 
+ static_assert (!is_assignable_type (^^int, ^^int));
+ static_assert (!std::is_assignable_v<int, int>);
+ static_assert (!is_assignable_type (^^const int, ^^int));
+ static_assert (!std::is_assignable_v<const int, int>);
+ static_assert (is_assignable_type (^^int &, ^^int));
+ static_assert (std::is_assignable_v<int &, int>);
+ static_assert (!is_assignable_type (^^const int &, ^^int));
+ static_assert (!std::is_assignable_v<const int &, int>);
+ static_assert (!is_assignable_type (^^int &&, ^^int));
+ static_assert (!std::is_assignable_v<int &&, int>);
+ static_assert (!is_assignable_type (^^const int &&, ^^int));
+ static_assert (!std::is_assignable_v<const int &&, int>);
+ static_assert (!is_assignable_type (^^void, ^^int));
+ static_assert (!std::is_assignable_v<void, int>);
+ static_assert (!is_assignable_type (^^int() const &, ^^int));
+ static_assert (!std::is_assignable_v<int() const &, int>);
+ 
+ static_assert (is_copy_assignable_type (^^int));
+ static_assert (std::is_copy_assignable_v<int>);
+ static_assert (!is_copy_assignable_type (^^const int));
+ static_assert (!std::is_copy_assignable_v<const int>);
+ static_assert (is_copy_assignable_type (^^int &));
+ static_assert (std::is_copy_assignable_v<int &>);
+ static_assert (!is_copy_assignable_type (^^const int &));
+ static_assert (!std::is_copy_assignable_v<const int &>);
+ static_assert (is_copy_assignable_type (^^int &&));
+ static_assert (std::is_copy_assignable_v<int &&>);
+ static_assert (!is_copy_assignable_type (^^const int &&));
+ static_assert (!std::is_copy_assignable_v<const int &&>);
+ static_assert (!is_copy_assignable_type (^^void));
+ static_assert (!std::is_copy_assignable_v<void>);
+ static_assert (!is_copy_assignable_type (^^int() const &));
+ static_assert (!std::is_copy_assignable_v<int() const &>);
+ 
+ static_assert (is_trivially_copy_assignable_type (^^int));
+ static_assert (std::is_trivially_copy_assignable_v<int>);
+ static_assert (!is_trivially_copy_assignable_type (^^const int));
+ static_assert (!std::is_trivially_copy_assignable_v<const int>);
+ static_assert (is_trivially_copy_assignable_type (^^int &));
+ static_assert (std::is_trivially_copy_assignable_v<int &>);
+ static_assert (!is_trivially_copy_assignable_type (^^const int &));
+ static_assert (!std::is_trivially_copy_assignable_v<const int &>);
+ static_assert (is_trivially_copy_assignable_type (^^int &&));
+ static_assert (std::is_trivially_copy_assignable_v<int &&>);
+ static_assert (!is_trivially_copy_assignable_type (^^const int &&));
+ static_assert (!std::is_trivially_copy_assignable_v<const int &&>);
+ static_assert (!is_trivially_copy_assignable_type (^^void));
+ static_assert (!std::is_trivially_copy_assignable_v<void>);
+ static_assert (!is_trivially_copy_assignable_type (^^int() const &));
+ static_assert (!std::is_trivially_copy_assignable_v<int() const &>);
+ 
+ static_assert (is_nothrow_copy_assignable_type (^^int));
+ static_assert (std::is_nothrow_copy_assignable_v<int>);
+ static_assert (!is_nothrow_copy_assignable_type (^^const int));
+ static_assert (!std::is_nothrow_copy_assignable_v<const int>);
+ static_assert (is_nothrow_copy_assignable_type (^^int &));
+ static_assert (std::is_nothrow_copy_assignable_v<int &>);
+ static_assert (!is_nothrow_copy_assignable_type (^^const int &));
+ static_assert (!std::is_nothrow_copy_assignable_v<const int &>);
+ static_assert (is_nothrow_copy_assignable_type (^^int &&));
+ static_assert (std::is_nothrow_copy_assignable_v<int &&>);
+ static_assert (!is_nothrow_copy_assignable_type (^^const int &&));
+ static_assert (!std::is_nothrow_copy_assignable_v<const int &&>);
+ static_assert (!is_nothrow_copy_assignable_type (^^void));
+ static_assert (!std::is_nothrow_copy_assignable_v<void>);
+ static_assert (!is_nothrow_copy_assignable_type (^^int() const &));
+ static_assert (!std::is_nothrow_copy_assignable_v<int() const &>);
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/tree-ssa/pr117123.C gcc-17-20260628/gcc/testsuite/g++.dg/tree-ssa/pr117123.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/tree-ssa/pr117123.C	Sun Jun 21 22:32:09 2026
--- gcc-17-20260628/gcc/testsuite/g++.dg/tree-ssa/pr117123.C	Sun Jun 28 22:32:12 2026
***************
*** 1,5 ****
  // { dg-do compile }
! // { dg-options "-Os -fdump-tree-optimized" }
  
  struct Potato {
    int size;
--- 1,5 ----
  // { dg-do compile }
! // { dg-options "-Os -fdump-tree-optimized --param logical-op-non-short-circuit=0" }
  
  struct Potato {
    int size;
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/ubsan/vptr-19.C gcc-17-20260628/gcc/testsuite/g++.dg/ubsan/vptr-19.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/ubsan/vptr-19.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/ubsan/vptr-19.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/125745
+ // { dg-do compile { target c++11 } }
+ // { dg-additional-options -fsanitize=undefined }
+ 
+ struct A { virtual void foo (); };
+ struct B : A { constexpr int foo () const { return 42; } };
+ constexpr B x;
+ struct C { int i; C () : i (x.foo ()) {} };
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.dg/warn/Wrange-loop-construct4.C gcc-17-20260628/gcc/testsuite/g++.dg/warn/Wrange-loop-construct4.C
*** gcc-17-20260621/gcc/testsuite/g++.dg/warn/Wrange-loop-construct4.C	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/g++.dg/warn/Wrange-loop-construct4.C	Sun Jun 28 22:32:12 2026
***************
*** 0 ****
--- 1,47 ----
+ // PR c++/125697
+ // { dg-do compile { target c++11 } }
+ // { dg-options "-Wrange-loop-construct" }
+ 
+ template <typename> struct pair {
+   int first;
+   int second;
+   template <typename _U1> pair(const pair<_U1> &&);
+ };
+ void
+ foo (const pair<int> (&arr)[1])
+ {
+   for (const auto x : arr)  // { dg-bogus "creates a copy" }
+     (void) x;
+ }
+ static_assert(__is_trivially_copyable(pair<int>));
+ static_assert(!__is_trivially_constructible(pair<int>));
+ 
+ template <typename> struct pairbig {
+   int first;
+   int second;
+   char arr[64];
+   template <typename _U1> pairbig(const pairbig<_U1> &&);
+ };
+ void
+ bar (const pairbig<int> (&arr)[1])
+ {
+   for (const auto x : arr)  // { dg-warning "creates a copy" }
+     (void) x;
+ }
+ static_assert(__is_trivially_copyable(pairbig<int>));
+ static_assert(!__is_trivially_constructible(pairbig<int>));
+ 
+ template <typename> struct pairnontriv {
+   int first;
+   int second;
+   pairnontriv(const pairnontriv &);
+   template <typename _U1> pairnontriv(const pairnontriv<_U1> &&);
+ };
+ void
+ baz (const pairnontriv<int> (&arr)[1])
+ {
+   for (const auto x : arr)  // { dg-warning "creates a copy" }
+     (void) x;
+ }
+ static_assert(!__is_trivially_copyable(pairnontriv<int>));
+ static_assert(!__is_trivially_constructible(pairnontriv<int>));
diff -Nrcpad gcc-17-20260621/gcc/testsuite/g++.target/i386/mv33.C gcc-17-20260628/gcc/testsuite/g++.target/i386/mv33.C
*** gcc-17-20260621/gcc/testsuite/g++.target/i386/mv33.C	Sun Jun 21 22:32:09 2026
--- gcc-17-20260628/gcc/testsuite/g++.target/i386/mv33.C	Sun Jun 28 22:32:12 2026
*************** int __attribute__ ((target("arch=c86-4g-
*** 25,30 ****
--- 25,34 ----
    return 3;
  }
  
+ int __attribute__ ((target("arch=c86-4g-m8"))) foo () {
+   return 4;
+ }
+ 
  int main ()
  {
    int val = foo ();
*************** int main ()
*** 35,40 ****
--- 39,46 ----
      assert (val == 2);
    else if (__builtin_cpu_is ("c86-4g-m7"))
      assert (val == 3);
+   else if (__builtin_cpu_is ("c86-4g-m8"))
+     assert (val == 4);
    else
      assert (val == 0);
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/autopar/runtime-auto.c gcc-17-20260628/gcc/testsuite/gcc.dg/autopar/runtime-auto.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/autopar/runtime-auto.c	Sun Jun 21 22:32:09 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/autopar/runtime-auto.c	Sun Jun 28 22:32:13 2026
*************** main (void)
*** 47,53 ****
  /* { dg-final { scan-tree-dump "pragma omp parallel" "parloops2" } } */
  
  /* Check that instead of generating a num_threads(x) clause, the compiler calls
!    "__builtin_omp_get_num_threads" that will set the number of threads at
     program execution time.  */
! /* { dg-final { scan-tree-dump "__builtin_omp_get_num_threads" "parloops2" } } */
  
--- 47,53 ----
  /* { dg-final { scan-tree-dump "pragma omp parallel" "parloops2" } } */
  
  /* Check that instead of generating a num_threads(x) clause, the compiler calls
!    "GOMP_loop_static_worksharing" that will set the number of threads at
     program execution time.  */
! /* { dg-final { scan-tree-dump "GOMP_loop_static_worksharing" "parloops2" } } */
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-call-info-1.c gcc-17-20260628/gcc/testsuite/gcc.dg/builtin-call-info-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-call-info-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/builtin-call-info-1.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do run } */
+ /* { dg-options "-Wtrampolines" } */
+ 
+ typedef struct {
+ 	int (*code)(int);
+ 	void *chain;
+ } call_info_t;
+ 
+ int apply(call_info_t c, int value)
+ {
+ 	return __builtin_call_with_static_chain(c.code(value), c.chain);
+ }
+ 
+ int foo(int x)
+ {
+ 	int add(int y)
+ 	{
+ 		return x + y;
+ 	}
+ 
+ 	call_info_t info = {
+ 		__builtin_call_code_address(add),
+ 		__builtin_call_static_chain(add)
+ 	};
+ 
+ 	return apply(info, x);
+ }
+ 
+ int main()
+ {
+ 	if (4 != foo(2))
+ 		__builtin_abort();
+ }
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-call-info-2.c gcc-17-20260628/gcc/testsuite/gcc.dg/builtin-call-info-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-call-info-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/builtin-call-info-2.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,47 ----
+ /* { dg-do run } */
+ /* { dg-options "-Wtrampolines" } */
+ 
+ /* Check that we get the expected pointers in
+    different context.  */
+ 
+ int f(int x)
+ {
+ 
+ 	if (f != __builtin_call_code_address(f))
+ 		__builtin_abort();
+ 
+ 	if ((void*)0 != __builtin_call_static_chain(f))
+ 		__builtin_abort();
+ 
+ 	static int (*code)(int);
+ 	static void *chain;
+ 
+ 	int g(int y)
+ 	{
+ 		if (code != __builtin_call_code_address(g))
+ 			__builtin_abort();
+ 		
+ 		if (chain != __builtin_call_static_chain(g))
+ 			__builtin_abort();
+ 	
+ 		return x + y; 
+ 	}
+ 
+ 	code = __builtin_call_code_address(g);
+ 	chain = __builtin_call_static_chain(g);
+ 
+ 	return g(x);
+ }
+ 
+ int main()
+ {
+ 	if (f != __builtin_call_code_address(f))
+ 		__builtin_abort();
+ 
+ 	if ((void*)0 != __builtin_call_static_chain(f))
+ 		__builtin_abort();
+ 
+ 	if (6 != f(3))
+ 		__builtin_abort();
+ }
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-call-info-3.c gcc-17-20260628/gcc/testsuite/gcc.dg/builtin-call-info-3.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/builtin-call-info-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/builtin-call-info-3.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wtrampolines -Wreturn-local-addr" } */
+ 
+ 
+ void * foo(int n)
+ {
+ 	int g(int x)
+ 	{
+ 		return n + x;
+ 	}
+ 
+ 	return __builtin_call_code_address(g);	// ok
+ }
+ 
+ void * bar(int n)
+ {
+ 	int g(int x)
+ 	{
+ 		return n + x;
+ 	}
+ 
+ 	return __builtin_call_static_chain(g);	/* { dg-warning "returns address of local variable" } */
+ }
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/debug/dwarf2/pr125421.c gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125421.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/debug/dwarf2/pr125421.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/debug/dwarf2/pr125421.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,18 ----
+ /* Verify the typedef chains are preserved.
+    DW_TAG_const_type for "const u16" chains to u16 typedef and doesnot
+    skip to underlying __u16 typedef */
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-gdwarf -dA" } */
+ 
+ typedef short __u16;
+ typedef __u16 u16;
+ __attribute__((btf_type_tag(""))) u16 __softirq_pending;
+ const u16 perm;
+ 
+ /* The exact failing pattern is hard to encode with TCL regex machinery,
+    so resort to an indirect way: in the buggy output, const_type points
+    directly to __u16, and only one u16 typedef DIE is emitted (for the
+    btf_type_tag use). In the fixed output, const_type points to a u16
+    typedef, creating a second u16 typedef DIE.
+ /* { dg-final { scan-assembler-times "(DW_AT_name: \"u16\"|\"u16..\"\[^\\r\\n\]*DW_AT_name)" 2 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/gomp/barrier-1.c gcc-17-20260628/gcc/testsuite/gcc.dg/gomp/barrier-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/gomp/barrier-1.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/gomp/barrier-1.c	Sun Jun 28 22:32:13 2026
*************** void f2(_Bool p)
*** 14,17 ****
      }
  }
  
! /* { dg-final { scan-tree-dump-times "GOMP_barrier" 2 "gimple" } } */
--- 14,17 ----
      }
  }
  
! /* { dg-final { scan-tree-dump-times "GOMP_barrier_ext \\(2\\)" 2 "gimple" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/gomp/master-3.c gcc-17-20260628/gcc/testsuite/gcc.dg/gomp/master-3.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/gomp/master-3.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/gomp/master-3.c	Sun Jun 28 22:32:13 2026
*************** void foo (void)
*** 9,12 ****
      bar(0);
  }
  
! /* { dg-final { scan-tree-dump-times "omp_get_thread_num" 1 "ompexp" } } */
--- 9,12 ----
      bar(0);
  }
  
! /* { dg-final { scan-tree-dump-times "GOMP_has_masked_thread_num" 1 "ompexp" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-1_0.c	Sun Jun 28 22:32:13 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-lto-do link } */
  /* { dg-lto-options {{-O2 -flto -flto-partition=1to1 -no-pie} } } */
  /* { dg-skip-if "SPARC relocation overflow" { sparc*-*-solaris2* && lp64 } } */
+ /* { dg-skip-if "no-pie unsupported" { *-*-darwin* } "" "" } */
  
  void asm_fn();
  void asm_fn_used();
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_0.c	Sun Jun 28 22:32:13 2026
*************** extern int use_statics ();
*** 6,12 ****
--- 6,20 ----
  extern int asm_var;
  
  static int a;
+ #if __APPLE__
+ #if __LP64__
+ asm ("%cc0: .quad 0" :: ":"(&a));
+ #else
+ asm ("%cc0: .long 0" :: ":"(&a));
+ #endif
+ #else
  asm (".local %cc0\n %cc0: .long 0" :: ":"(&a));
+ #endif
  
  int main() {
    return a + use_statics ();
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-extended-asm-2_1.c	Sun Jun 28 22:32:13 2026
*************** extern int asm_var;
*** 7,13 ****
--- 7,21 ----
  asm("%cc0:" :: ":" (&asm_var));
  
  static int a;
+ #if __APPLE__
+ #if __LP64__
+ asm ("%cc0: .quad 0" :: ":"(&a));
+ #else
+ asm ("%cc0: .long 0" :: ":"(&a));
+ #endif
+ #else
  asm (".local %cc0\n %cc0: .long 0" :: ":"(&a));
+ #endif
  
  int use_statics () {
    static_asm_fn ();
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-1_0.c	Sun Jun 28 22:32:13 2026
***************
*** 1,6 ****
--- 1,7 ----
  /* { dg-lto-do link } */
  /* { dg-lto-options { {-O2 -flto -flto-toplevel-asm-heuristics -flto-partition=1to1 -no-pie} {-O2 -flto -flto-toplevel-asm-heuristics -flto-partition=max -no-pie} {-O2 -flto -flto-toplevel-asm-heuristics -flto-partition=cache -no-pie}} } */
  /* { dg-skip-if "SPARC relocation overflow" { sparc*-*-solaris2* && lp64 } } */
+ /* { dg-skip-if "no-pie unsupported" { *-*-darwin* } "" "" } */
  
  void asm_fn();
  void asm_fn_used();
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/lto/toplevel-simple-asm-2_1.c	Sun Jun 28 22:32:13 2026
***************
*** 1,10 ****
--- 1,19 ----
  extern void static_asm_fn ();
  extern int static_asm_var;
+ #if __APPLE__
+ asm("_static_asm_fn:");
+ asm("_static_asm_var:");
+ #else
  asm("static_asm_fn:");
  asm("static_asm_var:");
+ #endif
  
  extern int asm_var;
+ #if __APPLE__
+ asm(".globl _asm_var\n_asm_var:");
+ #else
  asm(".global asm_var\nasm_var:");
+ #endif
  
  int use_statics () {
    static_asm_fn ();
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/pr125749.c gcc-17-20260628/gcc/testsuite/gcc.dg/pr125749.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/pr125749.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/pr125749.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ _Bool
+ max_eq_zero (unsigned short a, unsigned short b) {
+   int aa = a;
+   int bb = b;
+   int t = aa > bb ? aa : bb;
+   return (t == 0) == ((a | b) == 0);
+ }
+ 
+ _Bool
+ max_ne_zero (unsigned short a, unsigned short b) {
+   int aa = a;
+   int bb = b;
+   int t = aa > bb ? aa : bb;
+   return (t != 0) == ((a | b) != 0);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "return 1;" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/pr125910.c gcc-17-20260628/gcc/testsuite/gcc.dg/pr125910.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/pr125910.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/pr125910.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fno-delete-null-pointer-checks" } */
+ 
+ void a();
+ extern int b;
+ int *c;
+ void d() {
+   int *e = c;
+   if (e)
+     a();
+   if (e == &b)
+     a();
+   if (e)
+     a();
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c gcc-17-20260628/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/spaceship_mixed_variants.c	Sun Jun 28 22:32:13 2026
***************
*** 1,7 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target spaceship } */
  /* { dg-options "-O2 -fdump-tree-optimized" } */
! /* { dg-final { scan-tree-dump-times {\.SPACESHIP \([^,]+, [^,]+, -1\)} 64 optimized } } */
  
  signed char sp1_1 (signed char a, signed char b)
  {
--- 1,7 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target spaceship } */
  /* { dg-options "-O2 -fdump-tree-optimized" } */
! /* { dg-final { scan-tree-dump-times {\.SPACESHIP \([^,]+, [^,]+, -1\)} 36 optimized } } */
  
  signed char sp1_1 (signed char a, signed char b)
  {
*************** signed char sp1_3 (signed char a, int b)
*** 18,28 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- signed char sp1_4 (signed char a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  signed char sp1_5 (short a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 18,23 ----
*************** signed char sp1_7 (short a, int b)
*** 38,48 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- signed char sp1_8 (short a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  signed char sp1_9 (int a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 33,38 ----
*************** signed char sp1_11 (int a, int b)
*** 58,88 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- signed char sp1_12 (int a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- signed char sp1_13 (long long a, signed char b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- signed char sp1_14 (long long a, short b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- signed char sp1_15 (long long a, int b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- signed char sp1_16 (long long a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  short sp2_1 (signed char a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 48,53 ----
*************** short sp2_3 (signed char a, int b)
*** 98,108 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- short sp2_4 (signed char a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  short sp2_5 (short a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 63,68 ----
*************** short sp2_7 (short a, int b)
*** 118,128 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- short sp2_8 (short a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  short sp2_9 (int a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 78,83 ----
*************** short sp2_11 (int a, int b)
*** 138,168 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- short sp2_12 (int a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- short sp2_13 (long long a, signed char b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- short sp2_14 (long long a, short b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- short sp2_15 (long long a, int b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- short sp2_16 (long long a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  int sp3_1 (signed char a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 93,98 ----
*************** int sp3_3 (signed char a, int b)
*** 178,188 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- int sp3_4 (signed char a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  int sp3_5 (short a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 108,113 ----
*************** int sp3_7 (short a, int b)
*** 198,208 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- int sp3_8 (short a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  int sp3_9 (int a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 123,128 ----
*************** int sp3_11 (int a, int b)
*** 218,248 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- int sp3_12 (int a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- int sp3_13 (long long a, signed char b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- int sp3_14 (long long a, short b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- int sp3_15 (long long a, int b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- int sp3_16 (long long a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  long long sp4_1 (signed char a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 138,143 ----
*************** long long sp4_3 (signed char a, int b)
*** 258,268 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- long long sp4_4 (signed char a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  long long sp4_5 (short a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 153,158 ----
*************** long long sp4_7 (short a, int b)
*** 278,288 ****
      return a < b ? -1 : a <= b ? 0 : 1;
  }
  
- long long sp4_8 (short a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
  long long sp4_9 (int a, signed char b)
  {
      return a < b ? -1 : a <= b ? 0 : 1;
--- 168,173 ----
*************** long long sp4_11 (int a, int b)
*** 297,324 ****
  {
      return a < b ? -1 : a <= b ? 0 : 1;
  }
- 
- long long sp4_12 (int a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- long long sp4_13 (long long a, signed char b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- long long sp4_14 (long long a, short b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- long long sp4_15 (long long a, int b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
- 
- long long sp4_16 (long long a, long long b)
- {
-     return a < b ? -1 : a <= b ? 0 : 1;
- }
--- 182,184 ----
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_mixed_variants_ll.c gcc-17-20260628/gcc/testsuite/gcc.dg/spaceship_mixed_variants_ll.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/spaceship_mixed_variants_ll.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/spaceship_mixed_variants_ll.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,145 ----
+ /* { dg-do compile } */
+ /* { dg-skip-if "DI mode spaceship optab not available" {  { ilp32 } || { int16 } } } */
+ /* { dg-require-effective-target spaceship } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ /* { dg-final { scan-tree-dump-times {\.SPACESHIP \([^,]+, [^,]+, -1\)} 28 optimized } } */
+ 
+ signed char sp1_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ signed char sp1_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ short sp2_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ int sp3_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_4 (signed char a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_8 (short a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_12 (int a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_13 (long long a, signed char b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_14 (long long a, short b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_15 (long long a, int b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
+ 
+ long long sp4_16 (long long a, long long b)
+ {
+     return a < b ? -1 : a <= b ? 0 : 1;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125875.c gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125875.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125875.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125875.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,29 ----
+ /* { dg-do compile } */
+ 
+ #include <stdint.h>
+ typedef int16_t v4i16 __attribute__((vector_size(8)));
+ v4i16 g7, g19;
+ int64_t g16;
+ _Bool f16_a0_c3, f16_a0_ob6;
+ void f16_a0()
+ {
+     int32_t ov10;
+     uint64_t __ov_tmp_g16 = __builtin_sub_overflow(0, 0, &__ov_tmp_g16);
+     g16 = __ov_tmp_g16;
+ lbl_b1:
+     __builtin_mul_overflow(g16, g16, &ov10);
+     switch (ov10)
+     case 33:
+         goto lbl_sw_def57;
+ lbl_sw_def15:
+     if (f16_a0_c3) goto lbl_b1;
+     g7 = __builtin_shufflevector(g7, g7, 4, 3, 4, 5);
+     f16_a0_ob6 = f16_a0;
+     g19 = g19 <= g19;
+ lbl_bf43:
+     g19 = ~g19;
+     g7 = __builtin_shufflevector(g7, g19, 6, 7, 0, 1);
+ lbl_sw_def57:
+     if (f16_a0_ob6) goto lbl_sw_def15;
+     goto lbl_bf43;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125923-1.c gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125923-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125923-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125923-1.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-fno-tree-dce" } */
+ /* PR tree-optimization/125923 */
+ 
+ int a, b, c, d;
+ void e() {
+   d = a && d;
+   if (b)
+     b = 0;
+   while (!a || b)
+     c ^= 1;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125953.c gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125953.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/torture/pr125953.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/torture/pr125953.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=armv8.3-a+sve2" { target aarch64-*-* } } */
+ 
+ unsigned char *begin(unsigned char *out)
+ {
+   int size_0_0_0;
+   unsigned char *kRow = begin(out);
+   unsigned char *currentRow = kRow;
+   for (int x = 0; x < size_0_0_0; ++x) {
+     char k = kRow ? kRow[x] : 5;
+     out[2] = currentRow[2] * k / 255;
+   }
+   return out;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/float-conv-1.c gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/float-conv-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/float-conv-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/float-conv-1.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,16 ----
+ /* PR tree-optimization/115571 */
+ /* { dg-do compile } */
+ /* { dg-options "-O1 -fdump-tree-optimized-raw" } */
+ 
+ float f(float a)
+ {
+   int t = a < 0.5;
+   return t;
+ }
+ 
+ float f0(float a)
+ {
+   return (short)(a < 0.5);
+ }
+ 
+ /* { dg-final { scan-tree-dump-times "gimple_cond |gimple_assign <cond_expr" 2 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr102793-1.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,49 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-pre --param logical-op-non-short-circuit=1" } */
+ 
+ typedef __UINT64_TYPE__ uint64_t;
+ 
+ int foo(void);
+ 
+ int ccmp(uint64_t* s1, uint64_t* s2)
+ {
+     uint64_t d1, d2, bar;
+     d1 = *s1++;
+     d2 = *s2++;
+     bar = (d1 ^ d2) & 0xabcd;
+     if (bar == 0 || d1 != d2)
+       return foo();
+     return 0;
+ }
+ 
+ int noccmp0(uint64_t* s1, uint64_t* s2)
+ {
+     uint64_t d1, d2, bar;
+ 
+     d1 = *s1++;
+     d2 = *s2++;
+     bar = (d1 ^ d2) & 0xabcd;
+     if (bar == 0)
+       return foo();
+     if (d1 != d2)
+       return foo();
+     return 0;
+ }
+ 
+ int noccmp1(uint64_t* s1, uint64_t* s2)
+ {
+     uint64_t d1, d2, d3, d4, bar;
+     d1 = *s1++;
+     d2 = *s2++;
+     d3 = *s1++;
+     d4 = *s2++;
+     bar = (d1 ^ d2) & 0xabcd;
+     if (bar == 0)
+       return foo();
+     if (d3 != d4)
+       return foo();
+     return 0;
+ }
+ 
+ /* Check for condition assignments for noccmp0 and noccmp1.  */
+ /* { dg-final { scan-tree-dump-times {_\d+ = d\d+_\d+ != d\d+_\d+;\n  _\d+ = bar_\d+ == 0;} 2 "pre" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr102793-2.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,50 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -fdump-tree-pre --param logical-op-non-short-circuit=1" } */
+ 
+ typedef __UINT64_TYPE__ uint64_t;
+ 
+ int foo(void);
+ 
+ uint64_t noccmp0(uint64_t* s1, uint64_t* s2)
+ {
+     uint64_t d1, d2, d3, d4, bar;
+     d1 = *s1++;
+     d2 = *s2++;
+     d3 = *s1++;
+     d4 = *s2++;
+     bar = (d1 ^ d2) & 0xabcd;
+     if (bar == 0)
+       return foo();
+     if (d3 != d4)
+       d3++;
+     else
+       return foo();
+     return d3;
+ }
+ 
+ uint64_t noccmp1(uint64_t* s1, uint64_t* s2)
+ {
+     uint64_t d1, d2, d3, d4, bar;
+     d1 = *s1++;
+     d2 = *s2++;
+     d3 = *s1++;
+     d4 = *s2++;
+     bar = (d1 ^ d2) & 0xabcd;
+     if (bar == 0)
+       d3++;
+     else
+       return foo();
+     if (d3 > d4)
+       d3++;
+     else if (d1 != d2)
+       return foo ();
+     d3 = d3 + d4 + 1;
+     return d3;
+ }
+ 
+ /* Check for condition assignments in the case that the transformation
+    is applied.
+    The transformation should not be applied on noccmp1, where the foo call is
+    on the false branch of the first condition.  */
+ /* { dg-final { scan-tree-dump-times {_\d+ = d\d+_\d+ != d\d+_\d+;\n  _\d+ = bar_\d+ != 0;} 1 "pre" } } */
+ /* { dg-final { scan-tree-dump-times {if \(bar_\d+ == 0\)} 1 "pre" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr125385.c gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr125385.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/tree-ssa/pr125385.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/tree-ssa/pr125385.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,82 ----
+ /* PR tree-optimization/125385 */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -fdump-tree-optimized" } */
+ 
+ int
+ f_lt (int a, int b)
+ {
+   a &= 0xff;
+   b &= 0xff;
+   return (float) a < (float) b;
+ }
+ 
+ int
+ f_le (int a, int b)
+ {
+   a &= 0xff;
+   b &= 0xff;
+   return (float) a <= (float) b;
+ }
+ 
+ int
+ f_eq (int a, int b)
+ {
+   a &= 0xff;
+   b &= 0xff;
+   return (float) a == (float) b;
+ }
+ 
+ int
+ f_ne (int a, int b)
+ {
+   a &= 0xff;
+   b &= 0xff;
+   return (float) a != (float) b;
+ }
+ 
+ int
+ f_ge (int a, int b)
+ {
+   a &= 0xff;
+   b &= 0xff;
+   return (float) a >= (float) b;
+ }
+ 
+ int
+ f_gt (int a, int b)
+ {
+   a &= 0xff;
+   b &= 0xff;
+   return (float) a > (float) b;
+ }
+ 
+ int
+ f_signed_range (int a, int b)
+ {
+   a = (a & 0xff) - 128;
+   b = (b & 0xff) - 128;
+   return (float) a < (float) b;
+ }
+ 
+ int
+ f_cst (int a)
+ {
+   a &= 0xff;
+   return (float) a < 42.0f;
+ }
+ 
+ int
+ f_cst_fractional (int a)
+ {
+   a &= 0xff;
+   return (float) a < 42.5f;
+ }
+ 
+ int
+ f_cst_outside_type (int a)
+ {
+   a &= 0xff;
+   return (float) a < 2147483648.0f;
+ }
+ 
+ /* { dg-final { scan-tree-dump-not "\\(float\\)" "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/uninit-pr110743-2.c gcc-17-20260628/gcc/testsuite/gcc.dg/uninit-pr110743-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/uninit-pr110743-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/uninit-pr110743-2.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,19 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ftrivial-auto-var-init=pattern -Wuninitialized" } */
+ /* { dg-additional-options "-mgeneral-regs-only" { target { aarch64-*-* x86_64-*-* i?86-*-* } } } */
+ 
+ struct layer_mask {
+     unsigned int x : 17;
+     unsigned int y : 1;
+ } __attribute__((__packed__)) __attribute__((__aligned__(sizeof (unsigned int))));
+ struct layer_masks {
+   struct layer_mask layers[16];
+ };
+ 
+ void bar (struct layer_masks *);
+ 
+ void foo ()
+ {
+   struct layer_masks layer_masks; /* { dg-bogus "uninitialized" } */
+   bar (&layer_masks);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/uninit-pr110743.c gcc-17-20260628/gcc/testsuite/gcc.dg/uninit-pr110743.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/uninit-pr110743.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/uninit-pr110743.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -Wall" } */
+ 
+ void foo (int *);
+ 
+ void bar()
+ {
+   int x, tem;
+   tem = x; /* { dg-bogus "used uninitialized" } */
+   tem = tem | 5;
+   x = tem;
+   foo (&x);
+ }
+ 
+ void baz()
+ {
+   int x, tem;
+   tem = x; /* { dg-bogus "used uninitialized" } */
+   tem = tem & 5;
+   x = tem;
+   foo (&x);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/uninit-pred-13.c gcc-17-20260628/gcc/testsuite/gcc.dg/uninit-pred-13.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/uninit-pred-13.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.dg/uninit-pred-13.c	Sun Jun 28 22:32:13 2026
***************
*** 0 ****
--- 1,60 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Wuninitialized -O2" } */
+ /* { dg-skip-if "tail-merge ifcombine fires on ccmp targets" { ! { aarch64*-*-* || apxf } } } */
+ 
+ /* Tail-merge runs ifcombine to combine the conditions guarding V's definition.
+    Check that uninit still proves the guarded uses safe and still warns when V
+    can be used uninitialized.  */
+ 
+ int g;
+ void bar (void);
+ void blah (int);
+ 
+ /* V is defined only under (n > 10) && l.  The second use is guarded by
+    l && n > 12, which implies the definition guard, so no warning must be
+    emitted even after the conditions are combined.  */
+ int
+ guarded (int n, int l, int m, int r)
+ {
+   int v;
+ 
+   if (n > 10)
+     if (l)
+       v = r;
+ 
+   if (m) g++; else bar ();
+ 
+   if ((n > 10) && l)
+     blah (v); /* { dg-bogus "uninitialized" } */
+ 
+   if (l)
+     if (n > 12)
+       blah (v); /* { dg-bogus "uninitialized" } */
+ 
+   return 0;
+ }
+ 
+ /* Same shape and the same tail-merge + ifcombine combination, but the second
+    use's guard l && n > 8 does not imply the definition guard (n > 10) && l:
+    V is uninitialized for n in { 9, 10 }, so it must still warn -- the
+    relaxation must not over-suppress.  */
+ int
+ unguarded (int n, int l, int m, int r)
+ {
+   int v;
+ 
+   if (n > 10)
+     if (l)
+       v = r;
+ 
+   if (m) g++; else bar ();
+ 
+   if ((n > 10) && l)
+     blah (v); /* { dg-bogus "uninitialized" } */
+ 
+   if (l)
+     if (n > 8)
+       blah (v); /* { dg-warning "uninitialized" } */
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.dg/vect/pr125567.c gcc-17-20260628/gcc/testsuite/gcc.dg/vect/pr125567.c
*** gcc-17-20260621/gcc/testsuite/gcc.dg/vect/pr125567.c	Sun Jun 21 22:32:10 2026
--- gcc-17-20260628/gcc/testsuite/gcc.dg/vect/pr125567.c	Sun Jun 28 22:32:13 2026
***************
*** 1,5 ****
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target vect_int } */
+ /* { dg-require-effective-target vect_hw_misalign } */
  /* { dg-additional-options "-O3 -ftree-vectorize -fdump-tree-slp1-details" } */
  
  typedef short i16;
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json
*** gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,7 ----
+ {
+   "tune_params": {
+     "regmove_cost": {
+       "GP2FP": 2
+     }
+   }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/dispatch_sched_1.c gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/dispatch_sched_1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/dispatch_sched_1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/dispatch_sched_1.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,13 ----
+ /* Check DFA lookahead is not reached when dispatch scheduling is enabled.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mcpu=neoverse-v2 -fdump-rtl-sched2-details -fsched-verbose=2" } */
+ 
+ void
+ foo (int *restrict a, int *restrict b, int *restrict c, int n)
+ {
+ #pragma GCC unroll 64
+   for (int i = 0; i < n; i++)
+     c[i] += a[i] * b[i];
+ }
+ 
+ /* { dg-final { scan-rtl-dump-not "max_issue among" "sched2" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/popcnt-sve.c gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/popcnt-sve.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/popcnt-sve.c	Sun Jun 21 22:32:11 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/popcnt-sve.c	Sun Jun 28 22:32:14 2026
***************
*** 4,10 ****
  
  /*
  ** f_v4hi:
! **	ptrue	(p[0-7]).b, vl8
  **	ldr	d([0-9]+), \[x0\]
  **	cnt	z\2.h, \1/m, z\2.h
  **	str	d\2, \[x1\]
--- 4,10 ----
  
  /*
  ** f_v4hi:
! **	ptrue	(p[0-7]).b, (?:vl8|all)
  **	ldr	d([0-9]+), \[x0\]
  **	cnt	z\2.h, \1/m, z\2.h
  **	str	d\2, \[x1\]
*************** f_v4hi (unsigned short *__restrict b, un
*** 21,27 ****
  
  /*
  ** f_v8hi:
! **	ptrue	(p[0-7]).b, vl16
  **	ldr	q([0-9]+), \[x0\]
  **	cnt	z\2.h, \1/m, z\2.h
  **	str	q\2, \[x1\]
--- 21,27 ----
  
  /*
  ** f_v8hi:
! **	ptrue	(p[0-7]).b, (?:vl16|all)
  **	ldr	q([0-9]+), \[x0\]
  **	cnt	z\2.h, \1/m, z\2.h
  **	str	q\2, \[x1\]
*************** f_v8hi (unsigned short *__restrict b, un
*** 42,48 ****
  
  /*
  ** f_v2si:
! **	ptrue	(p[0-7]).b, vl8
  **	ldr	d([0-9]+), \[x0\]
  **	cnt	z\2.s, \1/m, z\2.s
  **	str	d\2, \[x1\]
--- 42,48 ----
  
  /*
  ** f_v2si:
! **	ptrue	(p[0-7]).b, (?:vl8|all)
  **	ldr	d([0-9]+), \[x0\]
  **	cnt	z\2.s, \1/m, z\2.s
  **	str	d\2, \[x1\]
*************** f_v2si (unsigned int *__restrict b, unsi
*** 57,63 ****
  
  /*
  ** f_v4si:
! **	ptrue	(p[0-7]).b, vl16
  **	ldr	q([0-9]+), \[x0\]
  **	cnt	z\2.s, \1/m, z\2.s
  **	str	q\2, \[x1\]
--- 57,63 ----
  
  /*
  ** f_v4si:
! **	ptrue	(p[0-7]).b, (?:vl16|all)
  **	ldr	q([0-9]+), \[x0\]
  **	cnt	z\2.s, \1/m, z\2.s
  **	str	q\2, \[x1\]
*************** f_v4si (unsigned int *__restrict b, unsi
*** 74,80 ****
  
  /*
  ** f_v2di:
! **	ptrue	(p[0-7]).b, vl16
  **	ldr	q([0-9]+), \[x0\]
  **	cnt	z\2.d, \1/m, z\2.d
  **	str	q\2, \[x1\]
--- 74,80 ----
  
  /*
  ** f_v2di:
! **	ptrue	(p[0-7]).b, (?:vl16|all)
  **	ldr	q([0-9]+), \[x0\]
  **	cnt	z\2.d, \1/m, z\2.d
  **	str	q\2, \[x1\]
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/simd/pr125716.c gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/pr125716.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/simd/pr125716.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/simd/pr125716.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-do compile } */
+ /* { dg-options "-muser-provided-CPU=${srcdir}/gcc.target/aarch64/aarch64-json-tunings/gp2fp-2.json -O2 -fno-vect-cost-model -fweb" } */
+ /* { dg-warning "JSON tuning file does not contain version information" "" { target *-*-* } 0 } */
+ 
+ double d;
+ _Complex short cs;
+ void foo() { cs *= d; }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/sve/slp_stack.c gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/slp_stack.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/sve/slp_stack.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/sve/slp_stack.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -ftree-vectorize -mcpu=neoverse-n2 --param=aarch64-autovec-preference=sve-only -msve-vector-bits=scalable" } */
+ 
+ #include <stdint.h>
+ 
+ /* Without an efficient implementation of vec_init for partial SVE types, a
+    decision to vectorize a group in the basic block vectorizer can result in
+    code that repeatedly stores a whole vector on the stack, overwrites one
+    element, reloads the whole vector, stores it to another location,
+    overwrites another element, etc. This is a fairly minimal reproducer.  */
+ void
+ vec_slp_pathological_stack (uint8_t *src)
+ {
+   int lt = src[-33];
+   int l0 = src[-1];
+   int l1 = src[31];
+   int t0 = src[-32];
+   int t1 = src[-31];
+   int t2 = src[-30];
+   src[64] = (l1 + (2 * l0) + lt + 2) >> 2;
+   src[65] = (lt + t0 + 1) >> 1;
+   src[66] = (t0 + t1 + 1) >> 1;
+   src[67] = (t1 + t2 + 1) >> 1;
+ }
+ 
+ /* { dg-final { scan-assembler-not {sp} } }
+  */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/torture/pr125818.c gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/torture/pr125818.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/aarch64/torture/pr125818.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/aarch64/torture/pr125818.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=armv8.2-a+sve" } */
+ #include <arm_sve.h>
+ void f(svfloat32x2_t *tp, const svfloat32x2_t *tuple, const svfloat32_t *vp) {
+   *tp = svset2_f32(*tuple, 0, *vp);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/avx512-movedup.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/avx512-movedup.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/avx512-movedup.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/avx512-movedup.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavx512f" } */
+ /* { dg-final { scan-assembler "vunpcklpd\[ \\t\]+%zmm\[0-9\]+, %zmm\[0-9\]+" } } */
+ /* { dg-final { scan-assembler "vunpcklpd\[ \\t\]+%ymm\[0-9\]+, %ymm\[0-9\]+" } } */
+ /* { dg-final { scan-assembler "vmovddup\[ \\t\]+\\(" } } */
+ /* { dg-final { scan-assembler-not "vmovddup\[^\\n\]*\\(%\[er\]sp\\)" } } */
+ 
+ #include <immintrin.h>
+ 
+ __m512d dup512 (__m512d x) { return _mm512_movedup_pd (x); }
+ __m256d dup256 (__m256d x) { return _mm256_movedup_pd (x); }
+ __m512d interleave512 (__m512d x) { return _mm512_unpacklo_pd (x, x); }
+ __m256d interleave256 (__m256d x) { return _mm256_unpacklo_pd (x, x); }
+ __m512d load512 (double *p) { return _mm512_movedup_pd (_mm512_loadu_pd (p)); }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-1a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-1a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-1a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movdqu	\(%rsi\), %xmm0
+ **	movups	%xmm0, \(%rdi\)
+ **	movdqu	16\(%rsi\), %xmm0
+ **	movups	%xmm0, 16\(%rdi\)
+ **	movdqu	32\(%rsi\), %xmm0
+ **	movups	%xmm0, 32\(%rdi\)
+ **	movdqu	48\(%rsi\), %xmm0
+ **	movups	%xmm0, 48\(%rdi\)
+ **	movdqu	64\(%rsi\), %xmm0
+ **	movups	%xmm0, 64\(%rdi\)
+ **	movdqu	80\(%rsi\), %xmm0
+ **	movups	%xmm0, 80\(%rdi\)
+ **	movdqu	96\(%rsi\), %xmm0
+ **	movups	%xmm0, 96\(%rdi\)
+ **	movdqu	112\(%rsi\), %xmm0
+ **	movups	%xmm0, 112\(%rdi\)
+ **	movzbl	128\(%rsi\), %eax
+ **	movb	%al, 128\(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dest, const char *src)
+ {
+   __builtin_memcpy (dest, src, 129);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-1b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-1b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-1b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -mtune=znver3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movl	\(%rsi\), %eax
+ **	movq	%rdi, %rcx
+ **	leaq	4\(%rdi\), %rdi
+ **	movl	%eax, -4\(%rdi\)
+ **	movl	125\(%rsi\), %eax
+ **	movl	%eax, 121\(%rdi\)
+ **	andq	\$-4, %rdi
+ **	subq	%rdi, %rcx
+ **	subq	%rcx, %rsi
+ **	addl	\$129, %ecx
+ **	shrl	\$2, %ecx
+ **	rep movsl
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memcpy-1a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-2a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-2a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-2a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,63 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L9
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	cmpl	\$8, %edx
+ **	jnb	.L10
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memcpy (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 16)
+     __builtin_memcpy (a, b, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-2b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-2b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-2b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L10
+ **.L8:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	cmpl	\$8, %edx
+ **	jnb	.L11
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L8
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memcpy-2a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-2c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-2c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-2c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-2c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,58 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L10
+ **.L8:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	cmpl	\$8, %edx
+ **	jnb	.L11
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L8
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memcpy-2a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-3a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-3a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-3a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-3a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,74 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$31, %rdx
+ **	jbe	.L10
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	cmpl	\$16, %edx
+ **	jnb	.L11
+ **	cmpl	\$8, %edx
+ **	jnb	.L5
+ **	cmpl	\$4, %edx
+ **	jnb	.L6
+ **	cmpl	\$1, %edx
+ **	ja	.L7
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memcpy (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 32)
+     __builtin_memcpy (a, b, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-3b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-3b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-3b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-3b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,69 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$31, %rdx
+ **	jbe	.L11
+ **.L9:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	cmpl	\$16, %edx
+ **	jnb	.L12
+ **	cmpl	\$8, %edx
+ **	jnb	.L5
+ **	cmpl	\$4, %edx
+ **	jnb	.L6
+ **	cmpl	\$1, %edx
+ **	ja	.L7
+ **	jb	.L9
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memcpy-3a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-3c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-3c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-3c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-3c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,69 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$31, %rdx
+ **	jbe	.L11
+ **.L9:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	cmpl	\$16, %edx
+ **	jnb	.L12
+ **	cmpl	\$8, %edx
+ **	jnb	.L5
+ **	cmpl	\$4, %edx
+ **	jnb	.L6
+ **	cmpl	\$1, %edx
+ **	ja	.L7
+ **	jb	.L9
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memcpy-3a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-4a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-4a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-4a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-4a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm1
+ **	movdqu	-32\(%rsi\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memcpy (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 64)
+     __builtin_memcpy (a, b, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-4b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-4b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-4b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-4b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	jbe	.L12
+ **.L10:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$32, %edx
+ **	jnb	.L13
+ **	cmpl	\$16, %edx
+ **	jnb	.L5
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L10
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memcpy-4a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-4c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-4c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-4c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-4c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	jbe	.L12
+ **.L10:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$32, %edx
+ **	jnb	.L13
+ **	cmpl	\$16, %edx
+ **	jnb	.L5
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L10
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memcpy-4a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-5a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-5a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-5a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-5a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,114 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$127, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm1
+ **	movdqu	-16\(%rsi,%rdx\), %xmm0
+ **	movups	%xmm1, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpl	\$64, %edx
+ **	ja	.L14
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm3
+ **	movdqu	16\(%rsi\), %xmm2
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm1
+ **	movdqu	-32\(%rsi\), %xmm0
+ **	movups	%xmm3, \(%rdi\)
+ **	movups	%xmm2, 16\(%rdi\)
+ **	movups	%xmm1, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movl	%edx, %edx
+ **	movdqu	\(%rsi\), %xmm7
+ **	movdqu	16\(%rsi\), %xmm6
+ **	movdqu	32\(%rsi\), %xmm5
+ **	movdqu	48\(%rsi\), %xmm4
+ **	addq	%rdx, %rsi
+ **	movdqu	-16\(%rsi\), %xmm3
+ **	movdqu	-32\(%rsi\), %xmm2
+ **	movdqu	-48\(%rsi\), %xmm1
+ **	movdqu	-64\(%rsi\), %xmm0
+ **	movups	%xmm7, \(%rdi\)
+ **	movups	%xmm6, 16\(%rdi\)
+ **	movups	%xmm5, 32\(%rdi\)
+ **	movups	%xmm4, 48\(%rdi\)
+ **	movups	%xmm3, -16\(%rdi,%rdx\)
+ **	movups	%xmm2, -32\(%rdi,%rdx\)
+ **	movups	%xmm1, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memcpy (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n < 128)
+     __builtin_memcpy (a, b, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-5b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-5b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-5b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-5b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,97 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$127, %rdx
+ **	jbe	.L14
+ **.L12:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	cmpl	\$32, %edx
+ **	jnb	.L15
+ **	cmpl	\$16, %edx
+ **	jnb	.L6
+ **	cmpl	\$8, %edx
+ **	jnb	.L7
+ **	cmpl	\$4, %edx
+ **	jnb	.L8
+ **	cmpl	\$1, %edx
+ **	ja	.L9
+ **	jb	.L12
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	cmpl	\$64, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %ymm3
+ **	vmovdqu	32\(%rsi\), %ymm2
+ **	addq	%rdx, %rsi
+ **	vmovdqu	-32\(%rsi\), %ymm1
+ **	vmovdqu	-64\(%rsi\), %ymm0
+ **	vmovdqu	%ymm3, \(%rdi\)
+ **	vmovdqu	%ymm2, 32\(%rdi\)
+ **	vmovdqu	%ymm1, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memcpy-5a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-5c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-5c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-5c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-5c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,91 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target { lp64 } } {^\t?\.} } } */
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$127, %rdx
+ **	jbe	.L13
+ **.L11:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	cmpl	\$64, %edx
+ **	jnb	.L14
+ **	cmpl	\$32, %edx
+ **	jnb	.L5
+ **	cmpl	\$16, %edx
+ **	jnb	.L6
+ **	cmpl	\$8, %edx
+ **	jnb	.L7
+ **	cmpl	\$4, %edx
+ **	jnb	.L8
+ **	cmpl	\$1, %edx
+ **	ja	.L9
+ **	jb	.L11
+ **	movzbl	\(%rsi\), %eax
+ **	movb	%al, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movl	%edx, %edx
+ **	vmovdqu64	\(%rsi\), %zmm1
+ **	vmovdqu64	-64\(%rsi,%rdx\), %zmm0
+ **	vmovdqu64	%zmm1, \(%rdi\)
+ **	vmovdqu64	%zmm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %ymm1
+ **	vmovdqu	-32\(%rsi,%rdx\), %ymm0
+ **	vmovdqu	%ymm1, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	vmovdqu	\(%rsi\), %xmm1
+ **	vmovdqu	-16\(%rsi,%rdx\), %xmm0
+ **	vmovdqu	%xmm1, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movq	\(%rsi\), %rcx
+ **	movq	-8\(%rsi,%rdx\), %rax
+ **	movq	%rcx, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movl	\(%rsi\), %ecx
+ **	movl	-4\(%rsi,%rdx\), %eax
+ **	movl	%ecx, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **.L9:
+ **	movl	%edx, %edx
+ **	movzwl	\(%rsi\), %ecx
+ **	movzwl	-2\(%rsi,%rdx\), %eax
+ **	movw	%cx, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memcpy-5a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-6.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-6.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-6.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,109 ----
+ /* { dg-do compile { target { maybe_x32 && lp64 } } } */
+ /* { dg-options "-O2 -mx32 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ 
+ /*
+ **gcc_memcpy:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpl	\$64, %edx
+ **	jnb	.L2
+ **	testb	\$32, %dl
+ **	jne	.L19
+ **	testb	\$16, %dl
+ **	jne	.L20
+ **	testb	\$8, %dl
+ **	jne	.L21
+ **	testb	\$4, %dl
+ **	jne	.L22
+ **	testl	%edx, %edx
+ **	jne	.L23
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L2:
+ **	movdqu	-64\(%edx,%esi\), %xmm0
+ **	subl	\$1, %edx
+ **	movups	%xmm0, -63\(%edx,%edi\)
+ **	movdqu	-47\(%edx,%esi\), %xmm0
+ **	movups	%xmm0, -47\(%edx,%edi\)
+ **	movdqu	-31\(%edx,%esi\), %xmm0
+ **	movups	%xmm0, -31\(%edx,%edi\)
+ **	movdqu	-15\(%edx,%esi\), %xmm0
+ **	movups	%xmm0, -15\(%edx,%edi\)
+ **	cmpl	\$64, %edx
+ **	jb	.L1
+ **	andl	\$-64, %edx
+ **	xorl	%eax, %eax
+ **.L9:
+ **	movdqu	\(%eax,%esi\), %xmm3
+ **	movdqu	16\(%eax,%esi\), %xmm2
+ **	addl	\$64, %eax
+ **	movdqu	-32\(%eax,%esi\), %xmm1
+ **	movdqu	-16\(%eax,%esi\), %xmm0
+ **	movups	%xmm3, -64\(%eax,%edi\)
+ **	movups	%xmm2, -48\(%eax,%edi\)
+ **	movups	%xmm1, -32\(%eax,%edi\)
+ **	movups	%xmm0, -16\(%eax,%edi\)
+ **	cmpl	%edx, %eax
+ **	jb	.L9
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L23:
+ **	movzbl	\(%esi\), %eax
+ **	movb	%al, \(%edi\)
+ **	testb	\$2, %dl
+ **	je	.L1
+ **	movzwl	-2\(%edx,%esi\), %eax
+ **	movw	%ax, -2\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	movdqu	\(%esi\), %xmm0
+ **	movups	%xmm0, \(%edi\)
+ **	movdqu	16\(%esi\), %xmm0
+ **	movups	%xmm0, 16\(%edi\)
+ **	movdqu	-32\(%edx,%esi\), %xmm0
+ **	movups	%xmm0, -32\(%edx,%edi\)
+ **	movdqu	-16\(%edx,%esi\), %xmm0
+ **	movups	%xmm0, -16\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L20:
+ **	movdqu	\(%esi\), %xmm0
+ **	movups	%xmm0, \(%edi\)
+ **	movdqu	-16\(%edx,%esi\), %xmm0
+ **	movups	%xmm0, -16\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L21:
+ **	movq	\(%esi\), %rax
+ **	movq	%rax, \(%edi\)
+ **	movq	-8\(%edx,%esi\), %rax
+ **	movq	%rax, -8\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L22:
+ **	movl	\(%esi\), %eax
+ **	movl	%eax, \(%edi\)
+ **	movl	-4\(%edx,%esi\), %eax
+ **	movl	%eax, -4\(%edx,%edi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ gcc_memcpy (void *a, void *b, __SIZE_TYPE__ n)
+ {
+   if (n <= (__SIZE_TYPE__) -1)
+     __builtin_memcpy (a, b, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,122 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -minline-all-stringops" } */
+ 
+ /* Test -O2 -minline-all-stringops on memcpy with various bounds.  */
+ 
+ #include <stdlib.h>
+ 
+ #define MAX_LENGTH 4096
+ #define EXTRA 64
+ #define TOTAL (EXTRA + MAX_LENGTH + EXTRA)
+ 
+ #define MEMCPY_BOUND(BOUND) \
+ __attribute__ ((noipa, noinline)) \
+ static char * \
+ memcpy_##BOUND (char *dest, char *src, size_t len) \
+ { \
+   if (len <= BOUND) \
+     return __builtin_memcpy (dest + EXTRA, src, len); \
+   else \
+     return dest + EXTRA; \
+ }
+ 
+ #define CHECK_MEMCPY_BOUND(BOUND, SIZE) \
+   { \
+     for (i = 0; i < TOTAL; i++) \
+       { \
+ 	dest[i] = 'a'; \
+ 	src[i] = 'A'; \
+       } \
+     p = memcpy_##BOUND (dest, src, SIZE); \
+     if (p != dest + EXTRA) \
+       abort (); \
+     for (i = 0; i < SIZE; i++, p++) \
+       if (*p != 'A') \
+         abort (); \
+     for (; i < (TOTAL - EXTRA); i++, p++) \
+       if (*p != 'a') \
+ 	abort (); \
+     p = dest; \
+     for (i = 0; i < EXTRA; i++, p++) \
+       if (*p != 'a') \
+ 	abort (); \
+   }
+ 
+ #define CHECK_MEMCPY(SIZE) \
+   CHECK_MEMCPY_BOUND (SIZE, SIZE) \
+   if (SIZE > 1) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 1) \
+   if (SIZE > 2) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 2) \
+   if (SIZE > 3) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 3) \
+   if (SIZE > 4) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 4) \
+   if (SIZE > 5) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 5) \
+   if (SIZE > 6) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 6) \
+   if (SIZE > 7) \
+     CHECK_MEMCPY_BOUND (SIZE, SIZE - 7)
+ 
+ char dest[TOTAL];
+ char src[TOTAL];
+ 
+ MEMCPY_BOUND (0);
+ MEMCPY_BOUND (1);
+ MEMCPY_BOUND (2);
+ MEMCPY_BOUND (3);
+ MEMCPY_BOUND (4);
+ MEMCPY_BOUND (5);
+ MEMCPY_BOUND (7);
+ MEMCPY_BOUND (8);
+ MEMCPY_BOUND (9);
+ MEMCPY_BOUND (15);
+ MEMCPY_BOUND (16);
+ MEMCPY_BOUND (17);
+ MEMCPY_BOUND (31);
+ MEMCPY_BOUND (32);
+ MEMCPY_BOUND (33);
+ MEMCPY_BOUND (63);
+ MEMCPY_BOUND (64);
+ MEMCPY_BOUND (65);
+ MEMCPY_BOUND (127);
+ MEMCPY_BOUND (128);
+ MEMCPY_BOUND (129);
+ MEMCPY_BOUND (255);
+ MEMCPY_BOUND (256);
+ MEMCPY_BOUND (257);
+ 
+ int
+ main (void)
+ {
+   unsigned int i;
+   char *p;
+ 
+   CHECK_MEMCPY (0);
+   CHECK_MEMCPY (1);
+   CHECK_MEMCPY (2);
+   CHECK_MEMCPY (3);
+   CHECK_MEMCPY (4);
+   CHECK_MEMCPY (5);
+   CHECK_MEMCPY (7);
+   CHECK_MEMCPY (8);
+   CHECK_MEMCPY (9);
+   CHECK_MEMCPY (15);
+   CHECK_MEMCPY (16);
+   CHECK_MEMCPY (17);
+   CHECK_MEMCPY (31);
+   CHECK_MEMCPY (32);
+   CHECK_MEMCPY (33);
+   CHECK_MEMCPY (63);
+   CHECK_MEMCPY (64);
+   CHECK_MEMCPY (65);
+   CHECK_MEMCPY (127);
+   CHECK_MEMCPY (128);
+   CHECK_MEMCPY (129);
+   CHECK_MEMCPY (255);
+   CHECK_MEMCPY (256);
+   CHECK_MEMCPY (257);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memcpy-bounded-1b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run } */
+ /* { dg-options "-O0 -minline-all-stringops" } */
+ 
+ /* Test -O0 -minline-all-stringops on memcpy with various bounds.  */
+ 
+ #include "builtin-memcpy-bounded-1a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,132 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -minline-all-stringops" } */
+ 
+ /* Test -O2 -minline-all-stringops on memmove with various bounds.  */
+ 
+ #include <stdlib.h>
+ 
+ #define MAX_LENGTH 512
+ #define TOTAL (4 * MAX_LENGTH)
+ 
+ #define MEMMOVE_BOUND(BOUND) \
+ __attribute__ ((noipa, noinline)) \
+ static char * \
+ memmove_##BOUND (char *dest, char *src, size_t len) \
+ { \
+   if (len <= BOUND) \
+     return __builtin_memmove (dest, src, len); \
+   else \
+     return dest; \
+ }
+ 
+ #define CHECK_MEMMOVE_BOUND(BOUND, SIZE) \
+   { \
+     char *dest, *src; \
+     unsigned int offset; \
+     for (i = 0; i < SIZE; i++) \
+       buf[i] = 'a'; \
+     for (; i < 2 * SIZE; i++) \
+       buf[i] = 'A'; \
+     for (; i < 3 * SIZE; i++) \
+       buf[i] = 'b'; \
+     for (i = 0; i < 3 * SIZE; i++) \
+       copy[i] = buf[i]; \
+     offset = SIZE - (SIZE) / 2; \
+     dest = &buf[0]; \
+     src = &buf[offset]; \
+     p = memmove_##BOUND (dest, src, SIZE); \
+     if (p != dest) \
+       abort (); \
+     for (i = 0; i < SIZE; i++) \
+       if (dest[i] != copy[offset + i]) \
+         abort (); \
+     for (i = 0; i < 3 * SIZE; i++) \
+       buf[i] = copy[i]; \
+     dest = &buf[offset]; \
+     src = &buf[0]; \
+     p = memmove_##BOUND (dest, src, SIZE); \
+     if (p != dest) \
+       abort (); \
+     for (i = 0; i < SIZE; i++) \
+       if (dest[i] != copy[i]) \
+         abort (); \
+   }
+ 
+ #define CHECK_MEMMOVE(SIZE) \
+   CHECK_MEMMOVE_BOUND (SIZE, SIZE) \
+   if (SIZE > 1) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 1) \
+   if (SIZE > 2) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 2) \
+   if (SIZE > 3) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 3) \
+   if (SIZE > 4) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 4) \
+   if (SIZE > 5) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 5) \
+   if (SIZE > 6) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 6) \
+   if (SIZE > 7) \
+     CHECK_MEMMOVE_BOUND (SIZE, SIZE - 7)
+ 
+ char buf[TOTAL];
+ char copy[TOTAL];
+ 
+ MEMMOVE_BOUND (0);
+ MEMMOVE_BOUND (1);
+ MEMMOVE_BOUND (2);
+ MEMMOVE_BOUND (3);
+ MEMMOVE_BOUND (4);
+ MEMMOVE_BOUND (5);
+ MEMMOVE_BOUND (7);
+ MEMMOVE_BOUND (8);
+ MEMMOVE_BOUND (9);
+ MEMMOVE_BOUND (15);
+ MEMMOVE_BOUND (16);
+ MEMMOVE_BOUND (17);
+ MEMMOVE_BOUND (31);
+ MEMMOVE_BOUND (32);
+ MEMMOVE_BOUND (33);
+ MEMMOVE_BOUND (63);
+ MEMMOVE_BOUND (64);
+ MEMMOVE_BOUND (65);
+ MEMMOVE_BOUND (127);
+ MEMMOVE_BOUND (128);
+ MEMMOVE_BOUND (129);
+ MEMMOVE_BOUND (255);
+ MEMMOVE_BOUND (256);
+ MEMMOVE_BOUND (257);
+ 
+ int
+ main (void)
+ {
+   unsigned int i;
+   char *p;
+ 
+   CHECK_MEMMOVE (0);
+   CHECK_MEMMOVE (1);
+   CHECK_MEMMOVE (2);
+   CHECK_MEMMOVE (3);
+   CHECK_MEMMOVE (4);
+   CHECK_MEMMOVE (5);
+   CHECK_MEMMOVE (7);
+   CHECK_MEMMOVE (8);
+   CHECK_MEMMOVE (9);
+   CHECK_MEMMOVE (15);
+   CHECK_MEMMOVE (16);
+   CHECK_MEMMOVE (17);
+   CHECK_MEMMOVE (31);
+   CHECK_MEMMOVE (32);
+   CHECK_MEMMOVE (33);
+   CHECK_MEMMOVE (63);
+   CHECK_MEMMOVE (64);
+   CHECK_MEMMOVE (65);
+   CHECK_MEMMOVE (127);
+   CHECK_MEMMOVE (128);
+   CHECK_MEMMOVE (129);
+   CHECK_MEMMOVE (255);
+   CHECK_MEMMOVE (256);
+   CHECK_MEMMOVE (257);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memmove-bounded-1b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run } */
+ /* { dg-options "-O0 -minline-all-stringops" } */
+ 
+ /* Test -O0 -minline-all-stringops on memmove with various bounds.  */
+ 
+ #include "builtin-memmove-bounded-1a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-1a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-1a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-1a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,32 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movd	%esi, %xmm0
+ **	movb	%sil, 128\(%rdi\)
+ **	punpcklbw	%xmm0, %xmm0
+ **	punpcklwd	%xmm0, %xmm0
+ **	pshufd	\$0, %xmm0, %xmm0
+ **	movups	%xmm0, \(%rdi\)
+ **	movups	%xmm0, 16\(%rdi\)
+ **	movups	%xmm0, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **	movups	%xmm0, 64\(%rdi\)
+ **	movups	%xmm0, 80\(%rdi\)
+ **	movups	%xmm0, 96\(%rdi\)
+ **	movups	%xmm0, 112\(%rdi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dest, int c)
+ {
+   __builtin_memset (dest, c, 129);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-1b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-1b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-1b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -mtune=znver3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movzbl	%sil, %eax
+ **	movabsq	\$72340172838076673, %rdx
+ **	movq	%rdi, %rcx
+ **	leaq	8\(%rdi\), %rdi
+ **	imulq	%rdx, %rax
+ **	movq	%rax, -8\(%rdi\)
+ **	movq	%rax, 113\(%rdi\)
+ **	andq	\$-8, %rdi
+ **	subq	%rdi, %rcx
+ **	addl	\$129, %ecx
+ **	shrl	\$3, %ecx
+ **	rep stosq
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-1a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-2a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-2a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-2a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-2a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,59 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L9
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	cmpl	\$8, %edx
+ **	jnb	.L10
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L1
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dest, int c, __SIZE_TYPE__ n)
+ {
+   if (n < 16)
+     __builtin_memset (dest, c, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-2b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-2b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-2b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-2b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L10
+ **.L8:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	cmpl	\$8, %edx
+ **	jnb	.L11
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L8
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-2a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-2c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-2c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-2c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-2c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,54 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$15, %rdx
+ **	jbe	.L10
+ **.L8:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	cmpl	\$8, %edx
+ **	jnb	.L11
+ **	cmpl	\$4, %edx
+ **	jnb	.L5
+ **	cmpl	\$1, %edx
+ **	ja	.L6
+ **	jb	.L8
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-2a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-3a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-3a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-3a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-3a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,70 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$31, %rdx
+ **	jbe	.L10
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	movq	%rax, %xmm0
+ **	punpcklqdq	%xmm0, %xmm0
+ **	cmpl	\$16, %edx
+ **	jnb	.L11
+ **	cmpl	\$8, %edx
+ **	jnb	.L5
+ **	cmpl	\$4, %edx
+ **	jnb	.L6
+ **	cmpl	\$1, %edx
+ **	ja	.L7
+ **	jb	.L1
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%edx, %edx
+ **	movups	%xmm0, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dest, int c, __SIZE_TYPE__ n)
+ {
+   if (n < 32)
+     __builtin_memset (dest, c, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-3b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-3b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-3b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-3b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,65 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$31, %rdx
+ **	jbe	.L11
+ **.L9:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	vmovq	%rax, %xmm1
+ **	vpunpcklqdq	%xmm1, %xmm1, %xmm0
+ **	cmpl	\$16, %edx
+ **	jnb	.L12
+ **	cmpl	\$8, %edx
+ **	jnb	.L5
+ **	cmpl	\$4, %edx
+ **	jnb	.L6
+ **	cmpl	\$1, %edx
+ **	ja	.L7
+ **	jb	.L9
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movl	%edx, %edx
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-3a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-3c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-3c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-3c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-3c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ */
+ 
+ #include "builtin-memset-3a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-4a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-4a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-4a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-4a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,80 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	movq	%rax, %xmm0
+ **	punpcklqdq	%xmm0, %xmm0
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movups	%xmm0, \(%rdi\)
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	movups	%xmm0, 16\(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dest, int c, __SIZE_TYPE__ n)
+ {
+   if (n < 64)
+     __builtin_memset (dest, c, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-4b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-4b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-4b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-4b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,82 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	jbe	.L13
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	vmovq	%rax, %xmm1
+ **	vpbroadcastq	%xmm1, %ymm0
+ **	cmpl	\$32, %edx
+ **	jnb	.L14
+ **	cmpl	\$16, %edx
+ **	jnb	.L5
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L10
+ **	movb	%sil, \(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movl	%edx, %edx
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **.L10:
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-4a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-4c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-4c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-4c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-4c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,81 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$63, %rdx
+ **	jbe	.L13
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	vpbroadcastq	%rax, %ymm0
+ **	cmpl	\$32, %edx
+ **	jnb	.L14
+ **	cmpl	\$16, %edx
+ **	jnb	.L5
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L10
+ **	movb	%sil, \(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movl	%edx, %edx
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **.L10:
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-4a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-5a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-5a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-5a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-5a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,93 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$127, %rdx
+ **	jbe	.L12
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L12:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	movq	%rax, %xmm0
+ **	punpcklqdq	%xmm0, %xmm0
+ **	cmpl	\$16, %edx
+ **	jnb	.L13
+ **	cmpl	\$8, %edx
+ **	jnb	.L6
+ **	cmpl	\$4, %edx
+ **	jnb	.L7
+ **	cmpl	\$1, %edx
+ **	ja	.L8
+ **	jb	.L1
+ **	movb	%sil, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L13:
+ **	movups	%xmm0, \(%rdi\)
+ **	cmpl	\$32, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movups	%xmm0, 16\(%rdi\)
+ **	cmpl	\$64, %edx
+ **	ja	.L14
+ **	movl	%edx, %edx
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movl	%edx, %edx
+ **	movups	%xmm0, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rdx\)
+ **	movups	%xmm0, -32\(%rdi,%rdx\)
+ **	movups	%xmm0, -48\(%rdi,%rdx\)
+ **	movups	%xmm0, -64\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dest, int c, __SIZE_TYPE__ n)
+ {
+   if (n < 128)
+     __builtin_memset (dest, c, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-5b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-5b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-5b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-5b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,93 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$127, %rdx
+ **	jbe	.L15
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	vmovq	%rax, %xmm1
+ **	vpbroadcastq	%xmm1, %ymm0
+ **	cmpl	\$32, %edx
+ **	jnb	.L16
+ **	cmpl	\$16, %edx
+ **	jnb	.L6
+ **	cmpl	\$8, %edx
+ **	jnb	.L7
+ **	cmpl	\$4, %edx
+ **	jnb	.L8
+ **	cmpl	\$1, %edx
+ **	ja	.L9
+ **	jb	.L12
+ **	movb	%sil, \(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	cmpl	\$64, %edx
+ **	ja	.L5
+ **	movl	%edx, %edx
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	%ymm0, 32\(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **.L12:
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-5a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-5c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-5c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-5c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-5c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,89 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$127, %rdx
+ **	jbe	.L14
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	movabsq	\$72340172838076673, %rcx
+ **	movzbl	%sil, %eax
+ **	imulq	%rcx, %rax
+ **	vpbroadcastq	%rax, %zmm0
+ **	cmpl	\$64, %edx
+ **	jnb	.L15
+ **	cmpl	\$32, %edx
+ **	jnb	.L5
+ **	cmpl	\$16, %edx
+ **	jnb	.L6
+ **	cmpl	\$8, %edx
+ **	jnb	.L7
+ **	cmpl	\$4, %edx
+ **	jnb	.L8
+ **	cmpl	\$1, %edx
+ **	ja	.L9
+ **	jb	.L11
+ **	movb	%sil, \(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	movl	%edx, %edx
+ **	vmovdqu8	%zmm0, \(%rdi\)
+ **	vmovdqu8	%zmm0, -64\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%edx, %edx
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%edx, %edx
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%edx, %edx
+ **	movq	%rax, \(%rdi\)
+ **	movq	%rax, -8\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%edx, %edx
+ **	movl	%eax, \(%rdi\)
+ **	movl	%eax, -4\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **.L9:
+ **	movl	%edx, %edx
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rdx\)
+ **	vzeroupper
+ **	ret
+ **.L11:
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-5a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-6a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-6a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-6a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-6a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,109 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$247, %rsi
+ **	jbe	.L16
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	movq	%rdi, %rax
+ **	cmpl	\$16, %esi
+ **	jnb	.L17
+ **	cmpl	\$8, %esi
+ **	jnb	.L6
+ **	cmpl	\$4, %esi
+ **	jnb	.L7
+ **	cmpl	\$1, %esi
+ **	ja	.L8
+ **	jb	.L1
+ **	movb	\$0, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	pxor	%xmm0, %xmm0
+ **	cmpl	\$32, %esi
+ **	ja	.L5
+ **	movl	%esi, %esi
+ **	movups	%xmm0, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpl	\$128, %esi
+ **	ja	.L10
+ **	movups	%xmm0, \(%rdi\)
+ **	movups	%xmm0, 16\(%rdi\)
+ **	cmpl	\$64, %esi
+ **	jbe	.L11
+ **	movups	%xmm0, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **.L14:
+ **	movl	%esi, %esi
+ **	movups	%xmm0, -16\(%rdi,%rsi\)
+ **	movups	%xmm0, -32\(%rdi,%rsi\)
+ **	movups	%xmm0, -48\(%rdi,%rsi\)
+ **	movups	%xmm0, -64\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%esi, %esi
+ **	movq	\$0, \(%rdi\)
+ **	movq	\$0, -8\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movl	%esi, %edx
+ **.L12:
+ **	subl	\$64, %edx
+ **	movups	%xmm0, \(%rax\)
+ **	addq	\$64, %rax
+ **	movups	%xmm0, -48\(%rax\)
+ **	movups	%xmm0, -32\(%rax\)
+ **	movups	%xmm0, -16\(%rax\)
+ **	cmpl	\$64, %edx
+ **	ja	.L12
+ **	jmp	.L14
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%esi, %esi
+ **	movl	\$0, \(%rdi\)
+ **	movl	\$0, -4\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%esi, %esi
+ **	movups	%xmm0, -16\(%rdi,%rsi\)
+ **	movups	%xmm0, -32\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	xorl	%eax, %eax
+ **	movl	%esi, %esi
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rsi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dst, __SIZE_TYPE__ n)
+ {
+   if (n <= 247)
+     __builtin_memset(dst, 0, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-6b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-6b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-6b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-6b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,97 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$247, %rsi
+ **	jbe	.L14
+ **.L12:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L14:
+ **	vpxor	%xmm0, %xmm0, %xmm0
+ **	cmpl	\$32, %esi
+ **	jnb	.L15
+ **	cmpl	\$16, %esi
+ **	jnb	.L6
+ **	cmpl	\$8, %esi
+ **	jnb	.L7
+ **	cmpl	\$4, %esi
+ **	jnb	.L8
+ **	cmpl	\$1, %esi
+ **	ja	.L9
+ **	jb	.L12
+ **	movb	\$0, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	cmpl	\$64, %esi
+ **	ja	.L5
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	vmovdqu	%ymm0, 32\(%rdi\)
+ **	cmpl	\$128, %esi
+ **	ja	.L16
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%esi, %esi
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, 64\(%rdi\)
+ **	vmovdqu	%ymm0, 96\(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -96\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -128\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%esi, %esi
+ **	movq	\$0, \(%rdi\)
+ **	movq	\$0, -8\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%esi, %esi
+ **	movl	\$0, \(%rdi\)
+ **	movl	\$0, -4\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	xorl	%eax, %eax
+ **	movl	%esi, %esi
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rsi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-6a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-6c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-6c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-6c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-6c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,91 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$247, %rsi
+ **	jbe	.L15
+ **.L13:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	vpxor	%xmm0, %xmm0, %xmm0
+ **	cmpl	\$64, %esi
+ **	jnb	.L16
+ **	cmpl	\$32, %esi
+ **	jnb	.L6
+ **	cmpl	\$16, %esi
+ **	jnb	.L7
+ **	cmpl	\$8, %esi
+ **	jnb	.L8
+ **	cmpl	\$4, %esi
+ **	jnb	.L9
+ **	cmpl	\$1, %esi
+ **	ja	.L10
+ **	jb	.L13
+ **	movb	\$0, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	vmovdqu8	%zmm0, \(%rdi\)
+ **	cmpl	\$128, %esi
+ **	ja	.L5
+ **	movl	%esi, %esi
+ **	vmovdqu8	%zmm0, -64\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%esi, %esi
+ **	vmovdqu8	%zmm0, 64\(%rdi\)
+ **	vmovdqu8	%zmm0, -64\(%rdi,%rsi\)
+ **	vmovdqu8	%zmm0, -128\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%esi, %esi
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%esi, %esi
+ **	movq	\$0, \(%rdi\)
+ **	movq	\$0, -8\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movl	%esi, %esi
+ **	movl	\$0, \(%rdi\)
+ **	movl	\$0, -4\(%rdi,%rsi\)
+ **	ret
+ **.L10:
+ **	xorl	%eax, %eax
+ **	movl	%esi, %esi
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rsi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-6a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-7a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-7a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-7a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-7a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,108 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$247, %rsi
+ **	jbe	.L16
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	movq	%rdi, %rax
+ **	cmpl	\$16, %esi
+ **	jnb	.L17
+ **	cmpl	\$8, %esi
+ **	jnb	.L6
+ **	cmpl	\$4, %esi
+ **	jnb	.L7
+ **	cmpl	\$1, %esi
+ **	ja	.L8
+ **	jb	.L1
+ **	movb	\$-1, \(%rdi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	pcmpeqd	%xmm0, %xmm0
+ **	cmpl	\$32, %esi
+ **	ja	.L5
+ **	movl	%esi, %esi
+ **	movups	%xmm0, \(%rdi\)
+ **	movups	%xmm0, -16\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	cmpl	\$128, %esi
+ **	ja	.L10
+ **	movups	%xmm0, \(%rdi\)
+ **	movups	%xmm0, 16\(%rdi\)
+ **	cmpl	\$64, %esi
+ **	jbe	.L11
+ **	movups	%xmm0, 32\(%rdi\)
+ **	movups	%xmm0, 48\(%rdi\)
+ **.L14:
+ **	movl	%esi, %esi
+ **	movups	%xmm0, -16\(%rdi,%rsi\)
+ **	movups	%xmm0, -32\(%rdi,%rsi\)
+ **	movups	%xmm0, -48\(%rdi,%rsi\)
+ **	movups	%xmm0, -64\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%esi, %esi
+ **	movq	\$-1, \(%rdi\)
+ **	movq	\$-1, -8\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L10:
+ **	movl	%esi, %edx
+ **.L12:
+ **	subl	\$64, %edx
+ **	movups	%xmm0, \(%rax\)
+ **	addq	\$64, %rax
+ **	movups	%xmm0, -48\(%rax\)
+ **	movups	%xmm0, -32\(%rax\)
+ **	movups	%xmm0, -16\(%rax\)
+ **	cmpl	\$64, %edx
+ **	ja	.L12
+ **	jmp	.L14
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%esi, %esi
+ **	movl	\$-1, \(%rdi\)
+ **	movl	\$-1, -4\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L11:
+ **	movl	%esi, %esi
+ **	movups	%xmm0, -16\(%rdi,%rsi\)
+ **	movups	%xmm0, -32\(%rdi,%rsi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	\$-1, %eax
+ **	movl	%esi, %esi
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rsi\)
+ **	ret
+ **...
+ */
+ 
+ void
+ foo (char *dst, __SIZE_TYPE__ n)
+ {
+   if (n <= 247)
+     __builtin_memset(dst, -1, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-7b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-7b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-7b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-7b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,103 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v3 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$247, %rsi
+ **	jbe	.L15
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L15:
+ **	vpcmpeqd	%ymm0, %ymm0, %ymm0
+ **	cmpl	\$32, %esi
+ **	jnb	.L16
+ **	cmpl	\$16, %esi
+ **	jnb	.L6
+ **	cmpl	\$8, %esi
+ **	jnb	.L7
+ **	cmpl	\$4, %esi
+ **	jnb	.L8
+ **	cmpl	\$1, %esi
+ **	ja	.L9
+ **	jb	.L12
+ **	movb	\$-1, \(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	cmpl	\$64, %esi
+ **	ja	.L5
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	vmovdqu	%ymm0, 32\(%rdi\)
+ **	cmpl	\$128, %esi
+ **	ja	.L17
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%esi, %esi
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, 64\(%rdi\)
+ **	vmovdqu	%ymm0, 96\(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -64\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -96\(%rdi,%rsi\)
+ **	vmovdqu	%ymm0, -128\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%esi, %esi
+ **	movq	\$-1, \(%rdi\)
+ **	movq	\$-1, -8\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%esi, %esi
+ **	movl	\$-1, \(%rdi\)
+ **	movl	\$-1, -4\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movl	\$-1, %eax
+ **	movl	%esi, %esi
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **.L12:
+ **	vzeroupper
+ **	ret
+ **...
+ */
+ 
+ #include "builtin-memset-7a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-7c.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-7c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-7c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-7c.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,99 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64-v4 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	cmpq	\$247, %rsi
+ **	jbe	.L16
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L16:
+ **	vpxor	%xmm0, %xmm0, %xmm0
+ **	vpternlogd	\$0xFF, %zmm0, %zmm0, %zmm0
+ **	cmpl	\$64, %esi
+ **	jnb	.L17
+ **	cmpl	\$32, %esi
+ **	jnb	.L6
+ **	cmpl	\$16, %esi
+ **	jnb	.L7
+ **	cmpl	\$8, %esi
+ **	jnb	.L8
+ **	cmpl	\$4, %esi
+ **	jnb	.L9
+ **	cmpl	\$1, %esi
+ **	ja	.L10
+ **	jb	.L13
+ **	movb	\$-1, \(%rdi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L17:
+ **	vmovdqu8	%zmm0, \(%rdi\)
+ **	cmpl	\$128, %esi
+ **	ja	.L5
+ **	movl	%esi, %esi
+ **	vmovdqu8	%zmm0, -64\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L5:
+ **	movl	%esi, %esi
+ **	vmovdqu8	%zmm0, 64\(%rdi\)
+ **	vmovdqu8	%zmm0, -64\(%rdi,%rsi\)
+ **	vmovdqu8	%zmm0, -128\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L6:
+ **	movl	%esi, %esi
+ **	vmovdqu	%ymm0, \(%rdi\)
+ **	vmovdqu	%ymm0, -32\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L7:
+ **	movl	%esi, %esi
+ **	vmovdqu	%xmm0, \(%rdi\)
+ **	vmovdqu	%xmm0, -16\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L8:
+ **	movl	%esi, %esi
+ **	movq	\$-1, \(%rdi\)
+ **	movq	\$-1, -8\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L9:
+ **	movl	%esi, %esi
+ **	movl	\$-1, \(%rdi\)
+ **	movl	\$-1, -4\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **.L10:
+ **	movl	\$-1, %eax
+ **	movl	%esi, %esi
+ **	movw	%ax, \(%rdi\)
+ **	movw	%ax, -2\(%rdi,%rsi\)
+ **	vzeroupper
+ **	ret
+ **.L13:
+ **	vzeroupper
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ #include "builtin-memset-7a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-8.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-8.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-8.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,93 ----
+ /* { dg-do compile { target { maybe_x32 && lp64 } } } */
+ /* { dg-options "-O2 -mx32 -march=x86-64 -minline-all-stringops" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target lp64 } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **.LFB0:
+ **	.cfi_startproc
+ **	movabsq	\$72340172838076673, %rax
+ **	movzbl	%sil, %esi
+ **	imulq	%rax, %rsi
+ **	movq	%rsi, %xmm0
+ **	punpcklqdq	%xmm0, %xmm0
+ **	cmpl	\$64, %edx
+ **	jnb	.L2
+ **	testb	\$32, %dl
+ **	jne	.L19
+ **	testb	\$16, %dl
+ **	jne	.L20
+ **	testb	\$8, %dl
+ **	jne	.L21
+ **	testb	\$4, %dl
+ **	jne	.L22
+ **	testl	%edx, %edx
+ **	jne	.L23
+ **.L1:
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L2:
+ **	movups	%xmm0, -64\(%edx,%edi\)
+ **	subl	\$1, %edx
+ **	movups	%xmm0, -47\(%edx,%edi\)
+ **	movups	%xmm0, -31\(%edx,%edi\)
+ **	movups	%xmm0, -15\(%edx,%edi\)
+ **	cmpl	\$64, %edx
+ **	jb	.L1
+ **	andl	\$-64, %edx
+ **	xorl	%eax, %eax
+ **.L9:
+ **	movups	%xmm0, \(%eax,%edi\)
+ **	addl	\$64, %eax
+ **	movups	%xmm0, -48\(%eax,%edi\)
+ **	movups	%xmm0, -32\(%eax,%edi\)
+ **	movups	%xmm0, -16\(%eax,%edi\)
+ **	cmpl	%edx, %eax
+ **	jb	.L9
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L23:
+ **	movb	%sil, \(%edi\)
+ **	testb	\$2, %dl
+ **	je	.L1
+ **	movw	%si, -2\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L19:
+ **	movups	%xmm0, \(%edi\)
+ **	movups	%xmm0, 16\(%edi\)
+ **	movups	%xmm0, -32\(%edx,%edi\)
+ **	movups	%xmm0, -16\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L20:
+ **	movups	%xmm0, \(%edi\)
+ **	movups	%xmm0, -16\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L21:
+ **	movq	%rsi, \(%edi\)
+ **	movq	%rsi, -8\(%edx,%edi\)
+ **	ret
+ **	.p2align 4,,10
+ **	.p2align 3
+ **.L22:
+ **	movl	%esi, \(%edi\)
+ **	movl	%esi, -4\(%edx,%edi\)
+ **	ret
+ **	.cfi_endproc
+ **...
+ */
+ 
+ void
+ foo (char *dst, int c, __SIZE_TYPE__ n)
+ {
+   if (n <= (__SIZE_TYPE__) -1)
+     __builtin_memset (dst, c, n);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1a.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1a.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,118 ----
+ /* { dg-do run } */
+ /* { dg-options "-O2 -minline-all-stringops" } */
+ 
+ /* Test -O2 -minline-all-stringops on memset with various bounds.  */
+ 
+ #include <stdlib.h>
+ 
+ #define MAX_LENGTH 4096
+ #define EXTRA 64
+ #define TOTAL (EXTRA + MAX_LENGTH + EXTRA)
+ 
+ #define MEMSET_BOUND(BOUND) \
+ __attribute__ ((noipa, noinline)) \
+ static char * \
+ memset_##BOUND (char *buf, size_t len) \
+ { \
+   if (len <= BOUND) \
+     return __builtin_memset (buf + EXTRA, 'A', len); \
+   else \
+     return buf + EXTRA; \
+ }
+ 
+ #define CHECK_MEMSET_BOUND(BOUND, SIZE) \
+   { \
+     for (i = 0; i < TOTAL; i++) \
+       buf[i] = 'a'; \
+     p = memset_##BOUND (buf, SIZE); \
+       if (p != buf + EXTRA) \
+ 	abort (); \
+     for (i = 0; i < SIZE; i++, p++) \
+       if (*p != 'A') \
+ 	abort (); \
+     for (; i < (TOTAL - EXTRA); i++, p++) \
+       if (*p != 'a') \
+ 	abort (); \
+     p = buf; \
+     for (i = 0; i < EXTRA; i++, p++) \
+       if (*p != 'a') \
+ 	abort (); \
+   }
+ 
+ #define CHECK_MEMSET(SIZE) \
+   CHECK_MEMSET_BOUND (SIZE, SIZE) \
+   if (SIZE > 1) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 1) \
+   if (SIZE > 2) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 2) \
+   if (SIZE > 3) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 3) \
+   if (SIZE > 4) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 4) \
+   if (SIZE > 5) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 5) \
+   if (SIZE > 6) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 6) \
+   if (SIZE > 7) \
+     CHECK_MEMSET_BOUND (SIZE, SIZE - 7)
+ 
+ char buf[TOTAL];
+ 
+ MEMSET_BOUND (0);
+ MEMSET_BOUND (1);
+ MEMSET_BOUND (2);
+ MEMSET_BOUND (3);
+ MEMSET_BOUND (4);
+ MEMSET_BOUND (5);
+ MEMSET_BOUND (7);
+ MEMSET_BOUND (8);
+ MEMSET_BOUND (9);
+ MEMSET_BOUND (15);
+ MEMSET_BOUND (16);
+ MEMSET_BOUND (17);
+ MEMSET_BOUND (31);
+ MEMSET_BOUND (32);
+ MEMSET_BOUND (33);
+ MEMSET_BOUND (63);
+ MEMSET_BOUND (64);
+ MEMSET_BOUND (65);
+ MEMSET_BOUND (127);
+ MEMSET_BOUND (128);
+ MEMSET_BOUND (129);
+ MEMSET_BOUND (255);
+ MEMSET_BOUND (256);
+ MEMSET_BOUND (257);
+ 
+ int
+ main (void)
+ {
+   unsigned int i;
+   char *p;
+ 
+   CHECK_MEMSET (0);
+   CHECK_MEMSET (1);
+   CHECK_MEMSET (2);
+   CHECK_MEMSET (3);
+   CHECK_MEMSET (4);
+   CHECK_MEMSET (5);
+   CHECK_MEMSET (7);
+   CHECK_MEMSET (8);
+   CHECK_MEMSET (9);
+   CHECK_MEMSET (15);
+   CHECK_MEMSET (16);
+   CHECK_MEMSET (17);
+   CHECK_MEMSET (31);
+   CHECK_MEMSET (32);
+   CHECK_MEMSET (33);
+   CHECK_MEMSET (63);
+   CHECK_MEMSET (64);
+   CHECK_MEMSET (65);
+   CHECK_MEMSET (127);
+   CHECK_MEMSET (128);
+   CHECK_MEMSET (129);
+   CHECK_MEMSET (255);
+   CHECK_MEMSET (256);
+   CHECK_MEMSET (257);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1b.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/builtin-memset-bounded-1b.c	Sun Jun 28 22:32:14 2026
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run } */
+ /* { dg-options "-O0 -minline-all-stringops" } */
+ 
+ /* Test -O0 -minline-all-stringops on memset with various bounds.  */
+ 
+ #include "builtin-memset-bounded-1a.c"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/funcspec-56.inc gcc-17-20260628/gcc/testsuite/gcc.target/i386/funcspec-56.inc
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/funcspec-56.inc	Sun Jun 21 22:32:11 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/funcspec-56.inc	Sun Jun 28 22:32:14 2026
*************** extern void test_arch_znver6 (void)
*** 242,247 ****
--- 242,248 ----
  extern void test_arch_c86_4g_m4 (void)          __attribute__((__target__("arch=c86-4g-m4")));
  extern void test_arch_c86_4g_m6 (void)          __attribute__((__target__("arch=c86-4g-m6")));
  extern void test_arch_c86_4g_m7 (void)          __attribute__((__target__("arch=c86-4g-m7")));
+ extern void test_arch_c86_4g_m8 (void)          __attribute__((__target__("arch=c86-4g-m8")));
  
  extern void test_tune_nocona (void)		__attribute__((__target__("tune=nocona")));
  extern void test_tune_core2 (void)		__attribute__((__target__("tune=core2")));
*************** extern void test_tune_znver6 (void)
*** 273,278 ****
--- 274,280 ----
  extern void test_tune_c86_4g_m4 (void)          __attribute__((__target__("tune=c86-4g-m4")));
  extern void test_tune_c86_4g_m6 (void)          __attribute__((__target__("tune=c86-4g-m6")));
  extern void test_tune_c86_4g_m7 (void)          __attribute__((__target__("tune=c86-4g-m7")));
+ extern void test_tune_c86_4g_m8 (void)          __attribute__((__target__("tune=c86-4g-m8")));
  
  extern void test_fpmath_sse (void)		__attribute__((__target__("sse2,fpmath=sse")));
  extern void test_fpmath_387 (void)		__attribute__((__target__("sse2,fpmath=387")));
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr123238-2.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr123238-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr123238-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr123238-2.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile { target { ! ia32 } } } */
+ /* { dg-options "-O2" } */
+ 
+ void f(char c[])
+ {
+     for (int i = 0; i < 8; i++)
+         c[i] = c[i] ? 'a' : 'c';
+ }
+ 
+ /* { dg-final { scan-assembler-not "pandn" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125100-4.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125100-4.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125100-4.c	Sun Jun 21 22:32:12 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125100-4.c	Sun Jun 28 22:32:15 2026
***************
*** 8,14 ****
  **.LFB[0-9]+:
  **	.cfi_startproc
  **	movabsq	\$4758053007424749568, %rax
! **	movq	%rax, \(%rdi\)
  **	ret
  **	.cfi_endproc
  **...
--- 8,14 ----
  **.LFB[0-9]+:
  **	.cfi_startproc
  **	movabsq	\$4758053007424749568, %rax
! **	movq	%rax, \(%[re]di\)
  **	ret
  **	.cfi_endproc
  **...
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-1.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune-ctrl=lcp_stall" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	movl	\$3, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, \(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 2\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 4\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 6\(%[a-z0-9]+\)
+ **...
+ */
+ 
+ void
+ foo (short *dst)
+ {
+   dst[0] = 3;
+   asm volatile ("" : : : "memory");
+   dst[1] = 3;
+   asm volatile ("" : : : "memory");
+   dst[2] = 3;
+   asm volatile ("" : : : "memory");
+   dst[3] = 3;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-10.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-10.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-10.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-10.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-do compile { target ia32 } } */
+ /* { dg-options "-O2 -fomit-frame-pointer -momit-leaf-frame-pointer -mtune=pentiumpro"  } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	xorl	%eax, %eax
+ **...
+ **	movl	%eax, 24\(%esp\)
+ **	movl	%eax, 28\(%esp\)
+ **	leal	24\(%esp\), %ebx
+ **	movl	%ebx, \(%esp\)
+ **	call	bar
+ **	xorl	%ecx, %ecx
+ **	movl	%ecx, 32\(%esp\)
+ **	movl	%ebx, \(%esp\)
+ **	movl	%ecx, 36\(%esp\)
+ **	call	bar
+ **...
+ */
+ 
+ extern void bar (int *dst);
+ 
+ void
+ foo (void)
+ {
+   int dst[10];
+   dst[0] = 0;
+   asm volatile ("" : : : "memory");
+   dst[1] = 0;
+   bar (dst);
+   dst[2] = 0;
+   asm volatile ("" : : : "memory");
+   dst[3] = 0;
+   bar (dst);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-11.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-11.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-11.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-11.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,99 ----
+ /* { dg-do compile { target { ia32 && fpic } } } */
+ /* { dg-options "-O2 -fPIC -fomit-frame-pointer -momit-leaf-frame-pointer -mtune=pentiumpro"  } */
+ 
+ typedef int Elf32_Addr;
+ typedef struct
+ {
+   int p_type;
+   unsigned p_offset;
+   Elf32_Addr p_vaddr;
+   int p_filesz;
+   int p_memsz;
+   int p_flags;
+   int p_align;
+ } Elf32_Phdr;
+ enum
+ {
+   LA_SER_RUNPATH
+ } _rtld_local_ro_0;
+ struct loadcmd
+ {
+   Elf32_Addr allocend, mapalign;
+   unsigned mapoff;
+   int prot;
+ };
+ char cached;
+ int fbp, _dl_map_new_object_mode, _dl_map_new_object_fb,
+     _dl_map_new_object_namelen, _dl_map_new_object_loader,
+     _dl_map_new_object_loader_1;
+ struct dl_pt_load_iterator
+ {
+   unsigned phnum;
+   short buf_base;
+   Elf32_Addr p_align_max;
+   Elf32_Addr pagesize;
+   int nloadcmds;
+ };
+ Elf32_Phdr *_dl_map_object_scan_phdrs___trans_tmp_2;
+ char _dl_map_new_object_name;
+ char *_dl_map_new_object_realname, *_dl_map_new_object_errstring;
+ short _dl_map_new_object_l_0;
+ void __pread64 (int, void *, int, long);
+ int pf_to_prot ();
+ Elf32_Addr _dl_map_segment_align (struct loadcmd *, Elf32_Addr);
+ static void
+ _dl_pt_load_iterator_init (struct dl_pt_load_iterator *it,
+                            unsigned short phnum)
+ {
+   it->phnum = phnum;
+   it->pagesize = _rtld_local_ro_0;
+ }
+ static char *
+ _dl_map_object_scan_phdrs (struct dl_pt_load_iterator *it)
+ {
+   for (unsigned i = 0; i < it->phnum; i++)
+     {
+       struct dl_pt_load_iterator __trans_tmp_3 = *it;
+       if (__builtin_expect (cached, 1))
+         _dl_map_object_scan_phdrs___trans_tmp_2 = (Elf32_Phdr *)fbp + i;
+       if (__trans_tmp_3.buf_base)
+         {
+           short batch = __trans_tmp_3.phnum;
+           int off = i * sizeof (Elf32_Phdr);
+           __pread64 (0, 0, batch, off);
+           it->buf_base = i;
+         }
+       Elf32_Phdr ph = *_dl_map_object_scan_phdrs___trans_tmp_2;
+       switch (ph.p_type)
+         {
+         case 1:
+           if (__builtin_expect (ph.p_offset & it->pagesize - 1, 0))
+             return "";
+           Elf32_Addr mapstart = ph.p_vaddr - it->pagesize,
+                      mapoff = ph.p_offset - pf_to_prot ();
+           it->p_align_max = _dl_map_segment_align (
+               &(struct loadcmd){ mapstart, ph.p_vaddr, mapoff },
+               it->p_align_max);
+           it->nloadcmds++;
+         }
+     }
+ }
+ extern int nloadcmds;
+ void open_path (char *, int, int, int *, char **, int *, int *, int,
+ 		char *);
+ void
+ _dl_map_new_object_empty_dynamic (void)
+ {
+   char found_other_class = 0;
+   open_path (&_dl_map_new_object_name, _dl_map_new_object_namelen,
+              _dl_map_new_object_mode, &_dl_map_new_object_loader_1,
+              &_dl_map_new_object_realname, &_dl_map_new_object_fb,
+              &_dl_map_new_object_loader, LA_SER_RUNPATH,
+ 	     &found_other_class);
+ lose:
+   struct dl_pt_load_iterator it;
+   _dl_pt_load_iterator_init (&it, _dl_map_new_object_l_0);
+   _dl_map_new_object_errstring = _dl_map_object_scan_phdrs (&it);
+   if (it.nloadcmds == nloadcmds)
+     goto lose;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-2.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-2.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune-ctrl=lcp_stall" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	movl	\$3, %[a-z0-9]+
+ **...
+ **	movw	%[a-z0-9]+, \(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 4\(%[a-z0-9]+\)
+ **	call	_?bar
+ **	movl	\$3, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, 2\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 8\(%[a-z0-9]+\)
+ **...
+ */
+ 
+ 
+ extern void bar (void);
+ 
+ void
+ foo (short *dst)
+ {
+   dst[0] = 3;
+   asm volatile ("" : : : "memory");
+   dst[2] = 3;
+   bar ();
+   dst[1] = 3;
+   asm volatile ("" : : : "memory");
+   dst[4] = 3;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-3.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-3.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-3.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,27 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune-ctrl=lcp_stall" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	xorl	%[a-z0-9]+, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, \(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 2\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 4\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 6\(%[a-z0-9]+\)
+ **...
+ */
+ 
+ void
+ foo (short *dst)
+ {
+   dst[0] = 0;
+   asm volatile ("" : : : "memory");
+   dst[1] = 0;
+   asm volatile ("" : : : "memory");
+   dst[2] = 0;
+   asm volatile ("" : : : "memory");
+   dst[3] = 0;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-4.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-4.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-4.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune-ctrl=lcp_stall" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	xorl	%[a-z0-9]+, %[a-z0-9]+
+ **...
+ **	movw	%[a-z0-9]+, \(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 4\(%[a-z0-9]+\)
+ **	call	_?bar
+ **	xorl	%[a-z0-9]+, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, 2\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 8\(%[a-z0-9]+\)
+ **...
+ */
+ 
+ 
+ extern void bar (void);
+ 
+ void
+ foo (short *dst)
+ {
+   dst[0] = 0;
+   asm volatile ("" : : : "memory");
+   dst[2] = 0;
+   bar ();
+   dst[1] = 0;
+   asm volatile ("" : : : "memory");
+   dst[4] = 0;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-5.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-5.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-5.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-5.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune-ctrl=lcp_stall" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	movl	\$3, %[a-z0-9]+
+ **...
+ **	movw	%[a-z0-9]+, \(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 4\(%[a-z0-9]+\)
+ **	call	_?bar
+ **	movl	\$3, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, 2\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 8\(%[a-z0-9]+\)
+ **...
+ */
+ 
+ 
+ extern int bar (void);
+ 
+ int
+ foo (short *dst)
+ {
+   dst[0] = 3;
+   asm volatile ("" : : : "memory");
+   dst[2] = 3;
+   int ret = bar ();
+   dst[1] = 3;
+   asm volatile ("" : : : "memory");
+   dst[4] = 3;
+   return ret;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-6.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-6.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-6.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-6.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,34 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mtune-ctrl=lcp_stall" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	xorl	%[a-z0-9]+, %[a-z0-9]+
+ **...
+ **	movw	%[a-z0-9]+, \(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 4\(%[a-z0-9]+\)
+ **	call	_?bar
+ **	xorl	%[a-z0-9]+, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, 2\(%[a-z0-9]+\)
+ **	movw	%[a-z0-9]+, 8\(%[a-z0-9]+\)
+ **...
+ */
+ 
+ 
+ extern int bar (void);
+ 
+ int
+ foo (short *dst)
+ {
+   dst[0] = 0;
+   asm volatile ("" : : : "memory");
+   dst[2] = 0;
+   int ret = bar ();
+   dst[1] = 0;
+   asm volatile ("" : : : "memory");
+   dst[4] = 0;
+   return ret;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-7.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-7.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-7.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-7.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile { target ia32 } } */
+ /* { dg-options "-O2 -fomit-frame-pointer -momit-leaf-frame-pointer -mtune=pentiumpro"  } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	movl	\$3, %eax
+ **	movl	%eax, 16\(%esp\)
+ **	movl	%eax, 20\(%esp\)
+ **	movl	%eax, 24\(%esp\)
+ **	movl	%eax, 28\(%esp\)
+ **...
+ */
+ 
+ extern void bar (int *dst);
+ 
+ void
+ foo (void)
+ {
+   int dst[16];
+   dst[0] = 3;
+   asm volatile ("" : : : "memory");
+   dst[1] = 3;
+   asm volatile ("" : : : "memory");
+   dst[2] = 3;
+   asm volatile ("" : : : "memory");
+   dst[3] = 3;
+   bar (dst);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-8.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-8.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-8.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-8.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,38 ----
+ /* { dg-do compile { target ia32 } } */
+ /* { dg-options "-O2 -fomit-frame-pointer -momit-leaf-frame-pointer -mtune=pentiumpro"  } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	movl	\$3, %eax
+ **...
+ **	movl	%eax, 24\(%esp\)
+ **	movl	%eax, 28\(%esp\)
+ **	leal	24\(%esp\), %ebx
+ **	movl	%ebx, \(%esp\)
+ **	call	bar
+ **	movl	\$3, %ecx
+ **	movl	%ecx, 32\(%esp\)
+ **	movl	%ebx, \(%esp\)
+ **	movl	%ecx, 36\(%esp\)
+ **	call	bar
+ **...
+ */
+ 
+ extern void bar (int *dst);
+ 
+ void
+ foo (void)
+ {
+   int dst[10];
+   dst[0] = 3;
+   asm volatile ("" : : : "memory");
+   dst[1] = 3;
+   bar (dst);
+   dst[2] = 3;
+   asm volatile ("" : : : "memory");
+   dst[3] = 3;
+   bar (dst);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-9.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-9.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125893-9.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125893-9.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,31 ----
+ /* { dg-do compile { target ia32 } } */
+ /* { dg-options "-O2 -fomit-frame-pointer -momit-leaf-frame-pointer -mtune=pentiumpro"  } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **foo:
+ **...
+ **	xorl	%eax, %eax
+ **	movl	%eax, 16\(%esp\)
+ **	movl	%eax, 20\(%esp\)
+ **	movl	%eax, 24\(%esp\)
+ **	movl	%eax, 28\(%esp\)
+ **...
+ */
+ 
+ extern void bar (int *dst);
+ 
+ void
+ foo (void)
+ {
+   int dst[16];
+   dst[0] = 0;
+   asm volatile ("" : : : "memory");
+   dst[1] = 0;
+   asm volatile ("" : : : "memory");
+   dst[2] = 0;
+   asm volatile ("" : : : "memory");
+   dst[3] = 0;
+   bar (dst);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125895.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125895.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125895.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125895.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=x86-64" } */
+ 
+ __attribute__((__vector_size__(2 * sizeof(float)))) float b;
+ void a(float d) {
+   double c;
+   b -= *(float *)__builtin_memcpy(&d, &c, 1);
+   __asm__("");
+   a(2);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125949.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125949.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125949.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125949.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,38 ----
+ /* PR target/125949 */
+ /* On a target with AVX-VNNI-INT8 the vpdpb{ss,su,uu}d[s] instructions only
+    have a VEX encoding.  Even under register pressure the compiler must stay
+    within xmm/ymm0-15 for these insns and must not allocate xmm/ymm16-31 and
+    emit an EVEX-encoded vpdpb* using a high register.  -mavx512vl exposes the
+    xmm/ymm16-31 register file so the allocator would otherwise be tempted to
+    use it.  */
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -mavxvnniint8 -mavx512vl" } */
+ /* { dg-final { scan-assembler-not "vpdpb\[a-z\]+\[ \\t\]+\[^\n\]*%\[xy\]mm(1\[6-9\]|2\[0-9\]|3\[01\])" } } */
+ 
+ #include <immintrin.h>
+ 
+ #define NACC 32
+ 
+ void
+ foo (unsigned int *restrict out, const unsigned char *restrict a,
+      const unsigned char *restrict b, int n)
+ {
+   __m256i acc[NACC];
+ 
+   for (int k = 0; k < NACC; k++)
+     acc[k] = _mm256_setzero_si256 ();
+ 
+   for (int i = 0; i < n; i++)
+     {
+       __m256i vb = _mm256_loadu_si256 ((const __m256i *) (b + 32 * (i & 7)));
+       for (int k = 0; k < NACC; k++)
+ 	{
+ 	  __m256i va
+ 	    = _mm256_loadu_si256 ((const __m256i *) (a + 32 * ((i + k) & 15)));
+ 	  acc[k] = _mm256_dpbuud_epi32 (acc[k], va, vb);
+ 	}
+     }
+ 
+   for (int k = 0; k < NACC; k++)
+     _mm256_storeu_si256 ((__m256i *) (out + 8 * k), acc[k]);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125958.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125958.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/pr125958.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/pr125958.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,22 ----
+ /* { dg-do compile { target fpic } } */
+ /* { dg-options "-O2 -fno-pic -march=x86-64 -mno-stackrealign" } */
+ /* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+ /* { dg-final { check-function-bodies "**" "" "" { target *-*-* } {^\t?\.} } } */
+ 
+ /*
+ **vcn_init_session_buf_fc:
+ **.LFB0:
+ **...
+ **	pxor	%xmm0, %xmm0
+ **	xorl	%[a-z0-9]+, %[a-z0-9]+
+ **	movw	%[a-z0-9]+, 16\(%[a-z0-9]+\)
+ **	movups	%xmm0, \(%[a-z0-9]+\)
+ **...
+ */
+ 
+ const short ar[9] = {};
+ void
+ vcn_init_session_buf_fc (void * r)
+ {
+   __builtin_memcpy (r, ar,sizeof(ar));
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/prfchw-Wcast-qual-1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* Verify that _m_prefetchw does not produce -Wcast-qual warnings when
+    included as a system header.  The cast (const void *) drops volatile
+    from volatile const void *, which would trigger -Wcast-qual if not
+    in a system header.  */
+ /* { dg-do compile } */
+ /* { dg-options "-mprfchw -O2 -Wcast-qual" } */
+ 
+ #include <x86intrin.h>
+ 
+ void
+ prefetchw_cast_qual_test (volatile void *p)
+ {
+     _m_prefetchw (p);
+ }
+ 
+ /* { dg-bogus "cast discards .volatile. qualifier" "" { target *-*-* } 0 } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,87 ----
+ /* Test cond_vec_cbranch_all<mode> for the 128-bit V_ANY_CBRANCH modes
+    (V4SI, V2DI, V4SF, V2DF).  */
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=128 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #define N 100000
+ int       a_int[N],    b_int[N],    c_int[N];
+ long long a_long[N],   b_long[N],   c_long[N];
+ float     a_float[N],  b_float[N],  c_float[N];
+ double    a_double[N], b_double[N], c_double[N];
+ 
+ /*
+ ** f_v4si:
+ **	...
+ **	vpcmpd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vpcmpd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	je	\.L[0-9]+
+ **	...
+ */
+ void f_v4si (int d, int e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b_int[i] += a_int[i];
+       if (c_int[i] == e) continue;
+       if (a_int[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v2di:
+ **	...
+ **	vpcmpq	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vpcmpq	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	je	\.L[0-9]+
+ **	...
+ */
+ void f_v2di (long long d, long long e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b_long[i] += a_long[i];
+       if (c_long[i] == e) continue;
+       if (a_long[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v4sf:
+ **	...
+ **	vcmpps	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vcmpps	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	je	\.L[0-9]+
+ **	...
+ */
+ void f_v4sf (float d, float e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b_float[i] += a_float[i];
+       if (c_float[i] == e) continue;
+       if (a_float[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v2df:
+ **	...
+ **	vcmppd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vcmppd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	je	\.L[0-9]+
+ **	...
+ */
+ void f_v2df (double d, double e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b_double[i] += a_double[i];
+       if (c_double[i] == e) continue;
+       if (a_double[i] != d) break;
+     }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-256.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,47 ----
+ /* Test cond_vec_cbranch_all<mode> for the 256-bit V_ANY_CBRANCH modes
+    (V4DI, V4DF).  */
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=256 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ #define N 100000
+ long long a_long[N],   b_long[N],   c_long[N];
+ double    a_double[N], b_double[N], c_double[N];
+ 
+ /*
+ ** f_v4di:
+ **	...
+ **	vpcmpq	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+
+ **	vpcmpq	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	je	\.L[0-9]+
+ **	...
+ */
+ void f_v4di (long long d, long long e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b_long[i] += a_long[i];
+       if (c_long[i] == e) continue;
+       if (a_long[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v4df:
+ **	...
+ **	vcmppd	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+
+ **	vcmppd	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	je	\.L[0-9]+
+ **	...
+ */
+ void f_v4df (double d, double e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b_double[i] += a_double[i];
+       if (c_double[i] == e) continue;
+       if (a_double[i] != d) break;
+     }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-all-run.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,72 ----
+ /* { dg-do run { target { avx512vl && avx512dq } } } */
+ /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=128" } */
+ 
+ #define AVX512VL
+ #define AVX512DQ
+ #define DO_TEST test_cbranch_all
+ static void test_cbranch_all (void);
+ #include "avx512-check.h"
+ 
+ #define N 100
+ long long a[N];
+ long long b[N];
+ long long c[N];
+ 
+ __attribute__((noipa))
+ void f (long long d, long long e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b[i] += a[i];
+       if (c[i] == e) continue;
+       if (a[i] != d) break;
+     }
+ }
+ 
+ static void reset (void)
+ {
+   for (int i = 0; i < N; i++) { a[i] = 0; b[i] = 0; c[i] = 0; }
+ }
+ 
+ #define CHECK(_i, _v) do { if (b[_i] != (_v)) __builtin_abort (); } while (0)
+ #define CHECK_RANGE_EQ(_lo, _hi, _v)         \
+   do {                                       \
+     for (int i = _lo; i < _hi; i++)          \
+       if (b[i] != (_v)) __builtin_abort ();  \
+   } while (0)
+ 
+ static void
+ test_cbranch_all (void)
+ {
+   /* No break — all a[i] == d.  Whole loop runs; b[i] = a[i].  */
+   reset ();
+   for (int i = 0; i < N; i++) { a[i] = 7; c[i] = 0; }
+   f (7 /*d*/, 99 /*e*/);
+   CHECK_RANGE_EQ (0, N, 7);
+ 
+   /* Break at index 50: a[i]==d for i<50, a[50]!=d AND c[50]!=e.  */
+   reset ();
+   for (int i = 0; i < N; i++) { a[i] = 7; c[i] = 0; }
+   a[50] = 99;
+   f (7, 5);
+   CHECK_RANGE_EQ (0, 50, 7); CHECK (50, 99);
+   CHECK_RANGE_EQ (51, N, 0);
+ 
+   /* "continue" gates the break: c[50]==e at the same i where a[i]!=d
+      should *not* break, loop keeps going.  */
+   reset ();
+   for (int i = 0; i < N; i++) { a[i] = 7; c[i] = 0; }
+   a[50] = 99;  c[50] = 5;     /* c==e -> continue, skip break check */
+   f (7, 5);
+   CHECK (50, 99);
+   for (int i = 0; i < N; i++)
+     if (i != 50 && b[i] != 7) __builtin_abort ();
+ 
+   /* Break at index 0.  */
+   reset ();
+   a[0] = 99;  c[0] = 0;       /* a!=d AND c!=e at i=0 */
+   for (int i = 1; i < N; i++) { a[i] = 7; c[i] = 0; }
+   f (7, 5);
+   CHECK (0, 99);
+   CHECK_RANGE_EQ (1, N, 0);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,86 ----
+ /* Test cond_vec_cbranch_any<mode> for the 128-bit V_ANY_CBRANCH modes
+    (V4SI, V2DI, V4SF, V2DF).  */
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=128 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ int       a_int[5],    b_int[5],    c_int[5];
+ long long a_long[3],   b_long[3],   c_long[3];
+ float     a_float[5],  b_float[5],  c_float[5];
+ double    a_double[3], b_double[3], c_double[3];
+ 
+ /*
+ ** f_v4si:
+ **	...
+ **	vpcmpd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vpcmpd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	jne	\.L[0-9]+
+ **	...
+ */
+ void f_v4si (int d, int e)
+ {
+   for (int i = 0; i < 5; i++)
+     {
+       b_int[i] += a_int[i];
+       if (c_int[i] == e) continue;
+       if (a_int[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v2di:
+ **	...
+ **	vpcmpq	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vpcmpq	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	jne	\.L[0-9]+
+ **	...
+ */
+ void f_v2di (long long d, long long e)
+ {
+   for (int i = 0; i < 3; i++)
+     {
+       b_long[i] += a_long[i];
+       if (c_long[i] == e) continue;
+       if (a_long[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v4sf:
+ **	...
+ **	vcmpps	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vcmpps	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	jne	\.L[0-9]+
+ **	...
+ */
+ void f_v4sf (float d, float e)
+ {
+   for (int i = 0; i < 5; i++)
+     {
+       b_float[i] += a_float[i];
+       if (c_float[i] == e) continue;
+       if (a_float[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v2df:
+ **	...
+ **	vcmppd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+
+ **	vcmppd	\$4, %xmm[0-9]+, %xmm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	jne	\.L[0-9]+
+ **	...
+ */
+ void f_v2df (double d, double e)
+ {
+   for (int i = 0; i < 3; i++)
+     {
+       b_double[i] += a_double[i];
+       if (c_double[i] == e) continue;
+       if (a_double[i] != d) break;
+     }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-256.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,46 ----
+ /* Test cond_vec_cbranch_any<mode> for the 256-bit V_ANY_CBRANCH modes
+    (V4DI, V4DF).  */
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=256 -fno-schedule-insns -fno-reorder-blocks -fno-schedule-insns2" } */
+ /* { dg-final { check-function-bodies "**" "" "" } } */
+ 
+ long long a_long[5],   b_long[5],   c_long[5];
+ double    a_double[5], b_double[5], c_double[5];
+ 
+ /*
+ ** f_v4di:
+ **	...
+ **	vpcmpq	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+
+ **	vpcmpq	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	jne	\.L[0-9]+
+ **	...
+ */
+ void f_v4di (long long d, long long e)
+ {
+   for (int i = 0; i < 5; i++)
+     {
+       b_long[i] += a_long[i];
+       if (c_long[i] == e) continue;
+       if (a_long[i] != d) break;
+     }
+ }
+ 
+ /*
+ ** f_v4df:
+ **	...
+ **	vcmppd	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+
+ **	vcmppd	\$4, %ymm[0-9]+, %ymm[0-9]+, %k[0-9]+\{%k[0-9]+\}
+ **	kortestb	%k[0-9]+, %k[0-9]+
+ **	jne	\.L[0-9]+
+ **	...
+ */
+ void f_v4df (double d, double e)
+ {
+   for (int i = 0; i < 5; i++)
+     {
+       b_double[i] += a_double[i];
+       if (c_double[i] == e) continue;
+       if (a_double[i] != d) break;
+     }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-cbranch-cond-any-run.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,67 ----
+ /* { dg-do run { target { avx512vl && avx512dq } } } */
+ /* { dg-options "-Ofast -mavx512f -mavx512vl -mavx512dq -mprefer-vector-width=128" } */
+ 
+ #define AVX512VL
+ #define AVX512DQ
+ #define DO_TEST test_cbranch_any
+ static void test_cbranch_any (void);
+ #include "avx512-check.h"
+ 
+ #define N 3   /* V2DI nelem (2) + 1 */
+ long long a[N];
+ long long b[N];
+ long long c[N];
+ 
+ __attribute__((noipa))
+ void f (long long d, long long e)
+ {
+   for (int i = 0; i < N; i++)
+     {
+       b[i] += a[i];
+       if (c[i] == e) continue;
+       if (a[i] != d) break;
+     }
+ }
+ 
+ static void reset (void)
+ {
+   for (int i = 0; i < N; i++) { a[i] = 0; b[i] = 0; c[i] = 0; }
+ }
+ 
+ #define CHECK(_i, _v) do { if (b[_i] != (_v)) __builtin_abort (); } while (0)
+ 
+ static void
+ test_cbranch_any (void)
+ {
+   /* a[0] != d AND c[0] != e  → break immediately, only b[0] updated.  */
+   reset ();
+   a[0] = 5;  c[0] = 5;
+   a[1] = 1;  c[1] = 7;
+   a[2] = 1;  c[2] = 7;
+   f (1 /*d*/, 7 /*e*/);
+   CHECK (0, 5); CHECK (1, 0); CHECK (2, 0);
+ 
+   /* All a[i]==d  → continue cond never breaks.  All updated.  */
+   reset ();
+   a[0] = 1;  c[0] = 7;
+   a[1] = 1;  c[1] = 7;
+   a[2] = 1;  c[2] = 7;
+   f (1, 7);
+   CHECK (0, 1); CHECK (1, 1); CHECK (2, 1);
+ 
+   /* All c[i]==e  → outer cond hits "continue" each iter, no break.  */
+   reset ();
+   a[0] = 5;  c[0] = 7;     /* c==e (e=7) — continue */
+   a[1] = 6;  c[1] = 7;
+   a[2] = 8;  c[2] = 7;
+   f (1, 7);
+   CHECK (0, 5); CHECK (1, 6); CHECK (2, 8);
+ 
+   /* break at index 1.  */
+   reset ();
+   a[0] = 1;  c[0] = 0;     /* a==d, no break */
+   a[1] = 9;  c[1] = 0;     /* a!=d AND c!=e → break here */
+   a[2] = 0;  c[2] = 0;
+   f (1, 7);
+   CHECK (0, 1); CHECK (1, 9); CHECK (2, 0);
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-compare-cost.c gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-compare-cost.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/i386/vect-compare-cost.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/i386/vect-compare-cost.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O3 -mavx512f -mtune=c86-4g-m7 --param ix86-vect-compare-costs=1 -fdump-tree-vect-details" } */
+ 
+ int
+ find_ll (const unsigned long long *p, unsigned long long x, int n)
+ {
+   for (int i = 0; i < n; ++i)
+     if (p[i] == x)
+       return i;
+   return -1;
+ }
+ 
+ /* The compare cost should make c86-4g-m7 prefer 32-byte vectors.  */
+ /* { dg-final { scan-tree-dump "loop vectorized using 32 byte vectors" "vect" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/ecc-builtin-1.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/ecc-builtin-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/ecc-builtin-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/ecc-builtin-1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,203 ----
+ /* { dg-do compile { target { lp64 } } } */
+ /* { dg-options "-mdejagnu-cpu=future -O2" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ /* Test the ECC (Elliptic Curve Cryptography) acceleration builtins for Power future.
+    These instructions support P-256 and P-384 elliptic curve operations. */
+ 
+ #include <altivec.h>
+ 
+ /* Test xxmulmul - Multiply-Multiply with scaling */
+ vector unsigned __int128
+ test_xxmulmul (vector unsigned long long a, vector unsigned long long b)
+ {
+   return __builtin_vsx_xxmulmul (a, b, 3);
+ }
+ 
+ /* Test xxmulmulhiadd - Multiply-Multiply with high add and accumulator */
+ vector unsigned __int128
+ test_xxmulmulhiadd (vector unsigned __int128 acc,
+ 		    vector unsigned long long a,
+ 		    vector unsigned long long b)
+ {
+   return __builtin_vsx_xxmulmulhiadd (acc, a, b, 1, 0, 1);
+ }
+ 
+ /* Test xxmulmulloadd - Multiply-Multiply low add with accumulator */
+ vector unsigned __int128
+ test_xxmulmulloadd (vector unsigned __int128 acc,
+ 		    vector unsigned long long a,
+ 		    vector unsigned long long b)
+ {
+   return __builtin_vsx_xxmulmulloadd (acc, a, b, 1, 0);
+ }
+ 
+ /* Test xxssumudm - Scaled sum unsigned doubleword modulo */
+ vector unsigned __int128
+ test_xxssumudm (vector unsigned __int128 acc,
+ 		vector unsigned long long a,
+ 		vector unsigned long long b)
+ {
+   return __builtin_vsx_xxssumudm (acc, a, b, 1);
+ }
+ 
+ /* Test xxssumudmc - Scaled sum unsigned doubleword modulo carry */
+ vector unsigned __int128
+ test_xxssumudmc (vector unsigned __int128 acc,
+ 		 vector unsigned long long a,
+ 		 vector unsigned long long b)
+ {
+   return __builtin_vsx_xxssumudmc (acc, a, b, 0);
+ }
+ 
+ /* Test xxssumudmcext - Scaled sum unsigned doubleword modulo carry extended */
+ vector unsigned __int128
+ test_xxssumudmcext (vector unsigned long long a,
+                     vector unsigned long long b,
+                     vector unsigned __int128 c)
+ {
+   return __builtin_vsx_xxssumudmcext (a, b, c, 1);
+ }
+ 
+ /* Test xsaddadduqm - Add add unsigned quadword modulo */
+ vector unsigned __int128
+ test_xsaddadduqm (vector unsigned __int128 acc,
+                   vector unsigned __int128 a,
+                   vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsaddadduqm (acc, a, b);
+ }
+ 
+ /* Test xsaddaddsuqm - Add add scaled unsigned quadword modulo */
+ vector unsigned __int128
+ test_xsaddaddsuqm (vector unsigned __int128 acc,
+                    vector unsigned __int128 a,
+                    vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsaddaddsuqm (acc, a, b);
+ }
+ 
+ /* Test xsaddsubuqm - Add subtract unsigned quadword modulo */
+ vector unsigned __int128
+ test_xsaddsubuqm (vector unsigned __int128 acc,
+                   vector unsigned __int128 a,
+                   vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsaddsubuqm (acc, a, b);
+ }
+ 
+ /* Test xsaddsubsuqm - Add subtract scaled unsigned quadword modulo */
+ vector unsigned __int128
+ test_xsaddsubsuqm (vector unsigned __int128 acc,
+                    vector unsigned __int128 a,
+                    vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsaddsubsuqm (acc, a, b);
+ }
+ 
+ /* Test xsmerge2t1uqm - Merge type 1 (2-operand) */
+ vector unsigned __int128
+ test_xsmerge2t1uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsmerge2t1uqm (a, b);
+ }
+ 
+ /* Test xsmerge2t2uqm - Merge type 2 (2-operand) */
+ vector unsigned __int128
+ test_xsmerge2t2uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsmerge2t2uqm (a, b);
+ }
+ 
+ /* Test xsmerge2t3uqm - Merge type 3 (2-operand) */
+ vector unsigned __int128
+ test_xsmerge2t3uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsmerge2t3uqm (a, b);
+ }
+ 
+ /* Test xsmerge3t1uqm - Merge type 1 (3-operand with accumulator) */
+ vector unsigned __int128
+ test_xsmerge3t1uqm (vector unsigned __int128 acc,
+                     vector unsigned __int128 a,
+                     vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsmerge3t1uqm (acc, a, b);
+ }
+ 
+ /* Test xsrebase2t1uqm - Rebase type 1 (2-operand) */
+ vector unsigned __int128
+ test_xsrebase2t1uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase2t1uqm (a, b);
+ }
+ 
+ /* Test xsrebase2t2uqm - Rebase type 2 (2-operand) */
+ vector unsigned __int128
+ test_xsrebase2t2uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase2t2uqm (a, b);
+ }
+ 
+ /* Test xsrebase2t3uqm - Rebase type 3 (2-operand) */
+ vector unsigned __int128
+ test_xsrebase2t3uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase2t3uqm (a, b);
+ }
+ 
+ /* Test xsrebase2t4uqm - Rebase type 4 (2-operand) */
+ vector unsigned __int128
+ test_xsrebase2t4uqm (vector unsigned __int128 a, vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase2t4uqm (a, b);
+ }
+ 
+ /* Test xsrebase3t1uqm - Rebase type 1 (3-operand with accumulator) */
+ vector unsigned __int128
+ test_xsrebase3t1uqm (vector unsigned __int128 acc,
+                      vector unsigned __int128 a,
+                      vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase3t1uqm (acc, a, b);
+ }
+ 
+ /* Test xsrebase3t2uqm - Rebase type 2 (3-operand with accumulator) */
+ vector unsigned __int128
+ test_xsrebase3t2uqm (vector unsigned __int128 acc,
+                      vector unsigned __int128 a,
+                      vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase3t2uqm (acc, a, b);
+ }
+ 
+ /* Test xsrebase3t3uqm - Rebase type 3 (3-operand with accumulator) */
+ vector unsigned __int128
+ test_xsrebase3t3uqm (vector unsigned __int128 acc,
+                      vector unsigned __int128 a,
+                      vector unsigned __int128 b)
+ {
+   return __builtin_vsx_xsrebase3t3uqm (acc, a, b);
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mxxmulmul\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxxmulmulhiadd\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxxmulmulloadd\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxxssumudm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxxssumudmc\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxxssumudmcext\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsaddadduqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsaddaddsuqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsaddsubuqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsaddsubsuqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsmerge2t1uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsmerge2t2uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsmerge2t3uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsmerge3t1uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase2t1uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase2t2uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase2t3uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase2t4uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase3t1uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase3t2uqm\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxsrebase3t3uqm\M} 1 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,74 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=future -O2" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ typedef vector signed int   v4si_t;
+ typedef vector signed short v8hi_t;
+ typedef vector signed long long v2di_t;
+ 
+ v4si_t int_add (v4si_t x, v4si_t y)
+ {
+   /* force x & y into FPRs to prefer xvadduwm over vadduwm.  */
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_add (x, y);            /* xvadduwm */
+ }
+ 
+ v4si_t int_sub (v4si_t x, v4si_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_sub (x, y);            /* xvsubuwm */
+ }
+ 
+ v4si_t int_mul (v4si_t x, v4si_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mul (x, y);            /* xvmuluwm */
+ }
+ 
+ v4si_t int_mulhi (v4si_t x, v4si_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mulh (x, y);           /* xvmulhsw */
+ }
+ 
+ v8hi_t short_add (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_add (x, y);            /* xvadduhm */
+ }
+ 
+ v8hi_t short_sub (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_sub (x, y);            /* xvsubuhm */
+ }
+ 
+ v8hi_t short_mul (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mul (x, y);            /* xvmuluhm */
+ }
+ 
+ v8hi_t short_mulhi (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mulh (x, y);            /* xvmulhsh */
+ }
+ 
+ v2di_t longlong_mulhi (v2di_t x, v2di_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mulh (x, y);            /* vmulhsd */
+ }
+ 
+ /* { dg-final { scan-assembler-times "xvadduwm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvsubuwm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmuluwm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmulhsw" 1 } } */
+ /* { dg-final { scan-assembler-times "xvadduhm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvsubuhm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmuluhm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmulhsh" 1 } } */
+ /* { dg-final { scan-assembler-times "vmulhsd" 1 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-2.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,74 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=future -O2" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ typedef vector unsigned int   v4si_t;
+ typedef vector unsigned short v8hi_t;
+ typedef vector unsigned long long v2di_t;
+ 
+ v4si_t uint_add (v4si_t x, v4si_t y)
+ {
+   /* force x & y into FPRs to prefer xvadduwm over vadduwm.  */
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_add (x, y);            /* xvadduwm */
+ }
+ 
+ v4si_t uint_sub (v4si_t x, v4si_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_sub (x, y);            /* xvsubuwm */
+ }
+ 
+ v4si_t uint_mul (v4si_t x, v4si_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mul (x, y);            /* xvmuluwm */
+ }
+ 
+ v4si_t uint_mulhi (v4si_t x, v4si_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mulh (x, y);           /* xvmulhuw */
+ }
+ 
+ v8hi_t ushort_add (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_add (x, y);            /* xvadduhm */
+ }
+ 
+ v8hi_t ushort_sub (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_sub (x, y);            /* xvsubuhm */
+ }
+ 
+ v8hi_t ushort_mul (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mul (x, y);            /* xvmuluhm */
+ }
+ 
+ v8hi_t ushort_mulhi (v8hi_t x, v8hi_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mulh (x, y);            /* xvmulhuh */
+ }
+ 
+ v2di_t ulonglong_mulhi (v2di_t x, v2di_t y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return vec_mulh (x, y);            /* vmulhud */
+ }
+ 
+ /* { dg-final { scan-assembler-times "xvadduwm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvsubuwm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmuluwm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmulhuw" 1 } } */
+ /* { dg-final { scan-assembler-times "xvadduhm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvsubuhm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmuluhm" 1 } } */
+ /* { dg-final { scan-assembler-times "xvmulhuh" 1 } } */
+ /* { dg-final { scan-assembler-times "vmulhud" 1 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-3.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,56 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=future -O2 -mno-vsx" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ /* The -mno-vsx option turns off generation of VSX instructions (such as
+    xvadduwm) in favor of the traditional Altivec instructions (such as
+    vadduwm).  */
+ 
+ #include <altivec.h>
+ 
+ typedef vector signed int   vsi;
+ typedef vector signed short vss;
+ typedef vector unsigned int   vui;
+ 
+ vsi int_add (vsi x, vsi y)
+ {
+   return vec_add (x, y);            /* vadduwm */
+ }
+ 
+ vsi int_sub (vsi x, vsi y)
+ {
+   return vec_sub (x, y);            /* vsubuwm */
+ }
+ 
+ vsi int_mulhi (vsi x, vsi y)
+ {
+   return vec_mulh (x, y);           /* vmulhsw */
+ }
+ 
+ vui uint_mulh (vui x, vui y)
+ {
+   return vec_mulh (x, y);           /* vmulhuw */
+ }
+ 
+ vss short_add (vss x, vss y)
+ {
+   return vec_add (x, y);            /* vadduhm */
+ }
+ 
+ vss short_sub (vss x, vss y)
+ {
+   return vec_sub (x, y);            /* vsubuhm */
+ }
+ 
+ vss short_mul (vss x, vss y)
+ {
+   return vec_mul (x, y);            /* vmladduhm */
+ }
+ 
+ /* { dg-final { scan-assembler-times "vadduwm" 1 } } */
+ /* { dg-final { scan-assembler-times "vsubuwm" 1 } } */
+ /* { dg-final { scan-assembler-times "vmulhsw" 1 } } */
+ /* { dg-final { scan-assembler-times "vmulhuw" 1 } } */
+ /* { dg-final { scan-assembler-times "vadduhm" 1 } } */
+ /* { dg-final { scan-assembler-times "vsubuhm" 1 } } */
+ /* { dg-final { scan-assembler-times "vmladduhm" 1 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_builtin-4.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=future -O2 -mno-vsx" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ typedef vector signed short   vss;
+ typedef vector unsigned short vus;
+ 
+ __attribute__((noinline))
+ vss short_mulhi (vss x, vss y)
+ {
+   return vec_mulh (x, y);  /* { dg-error "'__builtin_vsx_xvmulhsh' requires the '-mcpu=future' and '-mvsx' options" } */
+ }
+ 
+ __attribute__((noinline))
+ vus ushort_mulhi (vus x, vus y)
+ {
+   return vec_mulh (x, y);  /* { dg-error "'__builtin_vsx_xvmulhuh' requires the '-mcpu=future' and '-mvsx' options" } */
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,90 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=future -O2" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #include <altivec.h>
+ 
+ typedef vector signed int      vsi;
+ typedef vector unsigned int    vui;
+ typedef vector signed short    vss;
+ typedef vector unsigned short  vus;
+ 
+ vsi int_add (vsi x, vsi y)
+ {
+   /* force x & y into FPRs to prefer xvadduwm over vadduwm.  */
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x + y;            /* xvadduwm */
+ }
+ 
+ vsi int_sub (vsi x, vsi y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x - y;            /* xvsubuwm */
+ }
+ 
+ vsi int_mul (vsi x, vsi y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x * y;            /* xvmuluwm */
+ }
+ 
+ vui uint_add (vui x, vui y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x + y;            /* xvadduwm */
+ }
+ 
+ vui uint_sub (vui x, vui y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x - y;            /* xvsubuwm */
+ }
+ 
+ vui uint_mul (vui x, vui y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x * y;            /* xvmuluwm */
+ }
+ 
+ vss short_add (vss x, vss y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x + y;            /* xvadduhm */
+ }
+ 
+ vss short_sub (vss x, vss y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x - y;            /* xvsubuhm */
+ }
+ 
+ vss short_mul (vss x, vss y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x * y;            /* xvmuluhm */
+ }
+ 
+ vus ushort_add (vus x, vus y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x + y;            /* xvadduhm */
+ }
+ 
+ vus ushort_sub (vus x, vus y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x - y;            /* xvsubuhm */
+ }
+ 
+ vus ushort_mul (vus x, vus y)
+ {
+   __asm__ (" # %x0,%x0" : "+f" (x), "+f" (y));
+   return x * y;            /* xvmuluhm */
+ }
+ 
+ /* { dg-final { scan-assembler-times "xvadduwm" 2 } } */
+ /* { dg-final { scan-assembler-times "xvsubuwm" 2 } } */
+ /* { dg-final { scan-assembler-times "xvmuluwm" 2 } } */
+ /* { dg-final { scan-assembler-times "xvadduhm" 2 } } */
+ /* { dg-final { scan-assembler-times "xvsubuhm" 2 } } */
+ /* { dg-final { scan-assembler-times "xvmuluhm" 2 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/powerpc/vsx_arith_vect_2.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-do compile } */
+ /* { dg-options "-mdejagnu-cpu=future -O2 -ftree-vectorize -fno-unroll-loops" } */
+ /* { dg-require-effective-target powerpc_future_compile_ok } */
+ 
+ #define N 128
+ 
+ extern signed int   si_a[N],  si_b[N],  si_c[N];
+ extern unsigned int ui_a[N],  ui_b[N],  ui_c[N];
+ extern signed short ss_a[N],  ss_b[N],  ss_c[N];
+ extern unsigned short us_a[N], us_b[N], us_c[N];
+ 
+ void int_mulhi ()
+ {
+   for (int i = 0; i < N; i++)
+     si_c[i] = ((signed long long) si_a[i] *
+                (signed long long) si_b[i]) >> 32;
+ }
+ 
+ void uint_mulhi ()
+ {
+   for (int i = 0; i < N; i++)
+     ui_c[i] = ((unsigned long long) ui_a[i] *
+                (unsigned long long) ui_b[i]) >> 32;
+ }
+ 
+ void short_mulhi ()
+ {
+   for (int i = 0; i < N; i++)
+     ss_c[i] = ((signed int) ss_a[i] *
+                (signed int) ss_b[i]) >> 16;
+ }
+ 
+ void ushort_mulhi ()
+ {
+   for (int i = 0; i < N; i++)
+     us_c[i] = ((unsigned int) us_a[i] *
+                (unsigned int) us_b[i]) >> 16;
+ }
+ 
+ /* { dg-final { scan-assembler-times {\mxvmulhsw\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxvmulhuw\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxvmulhsh\M} 1 } } */
+ /* { dg-final { scan-assembler-times {\mxvmulhuh\M} 1 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr123884-a.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr123884-a.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr123884-a.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr123884-a.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zbs -mabi=lp64d" { target rv64 } } */
+ /* { dg-options "-march=rv32gc_zbs -mabi=ilp32" { target rv32 } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og"} } */
+  
+ int foo(int dst, int a)
+ {
+     dst ^= (1 << a);
+     return dst;
+ }
+  
+ /* { dg-final { scan-assembler-times "binv" 1 } } */
+ /* { dg-final { scan-assembler-times "sext.w" 1 { target rv64 } } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr123884-b.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr123884-b.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr123884-b.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr123884-b.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,14 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zbs -mabi=lp64d" { target rv64 } } */
+ /* { dg-options "-march=rv32gc_zbs -mabi=ilp32" { target rv32 } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og" "-O1" } } */
+ 
+ int x264_macroblock_encode_p8x8(int dst, int a)
+ {
+     dst &= ~(1 << a);
+     return dst;
+ }
+ 
+ /* { dg-final { scan-assembler-times "bclr" 1 } } */
+ /* { dg-final { scan-assembler-times "sext.w" 1 { target rv64 } } } */
+  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr123884-c.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr123884-c.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr123884-c.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr123884-c.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc_zbs -mabi=lp64d" { target rv64 } } */
+ /* { dg-options "-march=rv32gc_zbs -mabi=ilp32" { target rv32 } } */
+ /* { dg-skip-if "" { *-*-* } { "-O0" "-Og"} } */
+ 
+ int foo2(int dst, int a)
+ {
+     dst |= (1 << a);
+     return dst;
+ }
+  
+ /* { dg-final { scan-assembler-times "bset" 1 } } */
+ /* { dg-final { scan-assembler-times "sext.w" 1 { target rv64} } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr124019.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr124019.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/pr124019.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/pr124019.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-do compile } */
+ /* { dg-options "-O2 -march=rv64gcbv_zicond -mabi=lp64d" { target { rv64 } } } */
+ /* { dg-options "-O2 -march=rv32gcbv_zicond -mabi=ilp32" { target { rv32 } } } */
+ 
+ #define TEST(TYPE,NAME) _Bool f1_##NAME(TYPE a) { TYPE b = a << 4; return b == -128; }
+ 
+ TEST (unsigned char, uc);
+ TEST (signed char, sc);
+ 
+ TEST (unsigned short, us);
+ TEST (signed short, ss);
+ 
+ TEST (unsigned int, ui);
+ TEST (signed int, si);
+ 
+ TEST (unsigned long, ul);
+ TEST (signed long, sl);
+ 
+ /* The unsigned char and unsigned short cases collapse to a trivial li.  */
+ /* { dg-final { scan-assembler-times {\tli} 2 } } */
+ 
+ /* The signed char case will have an andi.  It's the only one.  */
+ /* { dg-final { scan-assembler-times {\tandi} 1 } } */
+ /* { dg-final { scan-assembler-not {\tsext.b} } } */
+ 
+ /* Other than the degenerate unsigned char/short cases, every test has
+    an sll, addi and seqz.  */
+ /* { dg-final { scan-assembler-times {\taddi} 6 } } */
+ /* { dg-final { scan-assembler-times {\tseqz} 6 } } */
+ 
+ /* The signed char, and degenerate unsigned tests have slli[w].  */
+ /* { dg-final { scan-assembler-times {\tslli} 5 } } */
+ 
+ /* The signed short will need an sext.  */
+ /* { dg-final { scan-assembler-times {\tsext.h} 1 } } */
+ 
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/zvabd-1.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/zvabd-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/autovec/zvabd-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/autovec/zvabd-1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,61 ----
+ /* { dg-do compile } */
+ /* { dg-additional-options "-march=rv64gcv_zvabd -mabi=lp64d -fno-vect-cost-model" } */
+ 
+ #include <stdint-gcc.h>
+ 
+ static int
+ abs (int i)
+ {
+   return i < 0 ? -i : i;
+ }
+ 
+ #define TEST_VABS(TYPE1, TYPE2)                                            \
+   __attribute__((noipa)) void vabs_##TYPE1_##TYPE2 (TYPE1 *__restrict dst, \
+ 						    TYPE2 *__restrict a,   \
+ 						    int n)                 \
+   {                                                                        \
+     int i;                                                                 \
+     for (i = 0; i < n; i++)                                                \
+       dst[i] = abs (a[i]);                                                 \
+   }
+ 
+ #define TEST_VABD(TYPE1, TYPE2)                                            \
+   __attribute__((noipa)) void vabd_##TYPE1_##TYPE2 (TYPE1 *__restrict dst, \
+ 						    TYPE2 *__restrict a,   \
+ 						    TYPE2 *__restrict b,   \
+ 						    int n)                 \
+   {                                                                        \
+     int i;                                                                 \
+     for (i = 0; i < n; i++)                                                \
+       dst[i] = abs (a[i] - b[i]);                                          \
+   }
+ 
+ #define TEST_VWABDA(TYPE1, TYPE2)                                       \
+   __attribute__((noipa)) void                                           \
+   vwabda_##TYPE1_##TYPE2 (TYPE1 *__restrict dst, TYPE2 *__restrict a,   \
+ 			  TYPE2 *__restrict b, int n)                   \
+   {                                                                     \
+     int i;                                                              \
+     for (i = 0; i < n; i++)                                             \
+       dst[i] += abs (a[i] - b[i]);                                      \
+   }
+ 
+ #define TEST_ALL()                 \
+   TEST_VABS (int8_t, int8_t)       \
+   TEST_VABS (int16_t, int16_t)     \
+   TEST_VABD (int8_t, int8_t)       \
+   TEST_VABD (uint8_t, uint8_t)     \
+   TEST_VABD (int16_t, int16_t)     \
+   TEST_VABD (uint16_t, uint16_t)   \
+   TEST_VWABDA (int16_t, int8_t)   \
+   TEST_VWABDA (uint16_t, uint8_t) \
+   TEST_VWABDA (int32_t, int16_t)  \
+   TEST_VWABDA (uint32_t, uint16_t)
+ 
+ TEST_ALL()
+ 
+ /* { dg-final { scan-assembler-times {\tvabs\.v} 2 } } */
+ /* { dg-final { scan-assembler-times {\tvabd\.vv} 2 } } */
+ /* { dg-final { scan-assembler-times {\tvabdu\.vv} 2 } } */
+ /* { dg-final { scan-assembler-times {\tvwabda\.vv} 2 } } */
+ /* { dg-final { scan-assembler-times {\tvwabdau\.vv} 2 } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-4.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-4.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-4.c	Sun Jun 21 22:32:12 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-4.c	Sun Jun 28 22:32:15 2026
*************** foo (char const *buf, size_t len)
*** 101,104 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 101,104 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c	Sun Jun 21 22:32:12 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-5.c	Sun Jun 28 22:32:15 2026
*************** foo (char const *buf, size_t len)
*** 65,68 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 65,68 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c	Sun Jun 21 22:32:12 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/rvv/base/pr112431-6.c	Sun Jun 28 22:32:15 2026
*************** foo (char const *buf, size_t len)
*** 48,51 ****
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} { xfail riscv*-*-* } } } */
--- 48,51 ----
  /* { dg-final { scan-assembler-not {vmv2r} } } */
  /* { dg-final { scan-assembler-not {vmv4r} } } */
  /* { dg-final { scan-assembler-not {vmv8r} } } */
! /* { dg-final { scan-assembler-not {csrr} } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jun 21 22:32:12 2026
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h	Sun Jun 28 22:32:15 2026
*************** sat_u_mul_##T##_fmt_12 (T a, T b)
*** 853,856 ****
--- 853,872 ----
  #define RUN_SAT_U_MUL_FMT_12(T, a, b) sat_u_mul_##T##_fmt_12(a, b)
  #define RUN_SAT_U_MUL_FMT_12_WRAP(T, a, b) RUN_SAT_U_MUL_FMT_12(T, a, b)
  
+ #define DEF_SAT_U_MUL_FMT_13(NT, WT)             \
+ NT __attribute__((noinline))                     \
+ sat_u_mul_##NT##_from_##WT##_fmt_13 (NT a, NT b) \
+ {                                                \
+   WT x = (WT)a * (WT)b;                          \
+   if ((x >> sizeof(a) * 8) != 0)                 \
+     return (NT)-1;                               \
+   else                                           \
+     return (NT)x;                                \
+ }
+ 
+ #define DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT) DEF_SAT_U_MUL_FMT_13(NT, WT)
+ #define RUN_SAT_U_MUL_FMT_13(NT, WT, a, b) \
+   sat_u_mul_##NT##_from_##WT##_fmt_13 (a, b)
+ #define RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, a, b) RUN_SAT_U_MUL_FMT_13(NT, WT, a, b)
+ 
  #endif
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv64.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv64.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u16-from-u64.rv64.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint16_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv64.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv64.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u32-from-u64.rv64.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint32_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u64-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u64-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u64-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint64_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint128_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u16.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u16.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u16.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint16_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint32_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv32gc -mabi=ilp32 -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-14-u8-from-u64.rv64.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-march=rv64gc -mabi=lp64d -fdump-tree-optimized" } */
+ 
+ #include "sat_arith.h"
+ 
+ #define NT uint8_t
+ #define WT uint64_t
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ /* { dg-final { scan-tree-dump-times ".SAT_MUL" 1 "optimized" } } */
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u64.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u64.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u16-from-u64.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint16_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u64.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u64.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u32-from-u64.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint32_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u64-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u64-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u64-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u64-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint64_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u128.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u128.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u128.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u128.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint128_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u16.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint16_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u32.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint32_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/riscv/sat/sat_u_mul-run-14-u8-from-u64.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,16 ----
+ /* { dg-do run { target { rv32 || rv64 } } } */
+ /* { dg-additional-options "-std=c99" } */
+ 
+ #include "sat_arith.h"
+ #include "sat_arith_data.h"
+ 
+ #define NT               uint8_t
+ #define WT               uint64_t
+ #define NAME             usmul
+ #define DATA             TEST_BINARY_DATA_WRAP(NT, NAME)
+ #define T                TEST_BINARY_STRUCT_DECL_WRAP(NT, NAME)
+ #define RUN_BINARY(x, y) RUN_SAT_U_MUL_FMT_13_WRAP(NT, WT, x, y)
+ 
+ DEF_SAT_U_MUL_FMT_13_WRAP(NT, WT)
+ 
+ #include "scalar_sat_binary_run_xxx.h"
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/s390/pr125972.c gcc-17-20260628/gcc/testsuite/gcc.target/s390/pr125972.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/s390/pr125972.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/s390/pr125972.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,20 ----
+ /* { dg-do compile { target int128 } } */
+ /* { dg-options "-march=z16 -O3" } */
+ 
+ int a, b, c;
+ long d, e;
+ int *f;
+ __int128 g;
+ void h() {
+   g = 0;
+   for (; g <= 33; ++g) {
+     int *i = &c;
+     *i = d - a;
+     if (*i) {
+       c = 0;
+       for (; c <= 8; ++c)
+         f = &b;
+     } else
+       ++e;
+   }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/s390/pr125992.c gcc-17-20260628/gcc/testsuite/gcc.target/s390/pr125992.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/s390/pr125992.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/s390/pr125992.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,41 ----
+ /* PR target/125992 */
+ /* { dg-do run { target s390_useable_hw } } */
+ /* { dg-options "-O2 -march=z13" } */
+ 
+ long a, b, c, d[4];
+ 
+ [[gnu::noipa]] long
+ foo ()
+ {
+   return d[c++];
+ }
+ 
+ [[gnu::noipa]] void
+ bar ()
+ {
+   long e = 0;
+   for (;;)
+     {
+       e += a;
+       a = foo ();
+       if (b + a > e)
+ 	return;
+       if (a == 0)
+ 	break;
+       if (a > 0)
+ 	b += a;
+     }
+ }
+ 
+ int
+ main ()
+ {
+   a = 16;
+   b = -64;
+   c = 0;
+   d[0] = 64;
+   d[1] = 128;
+   bar ();
+   if (b != 0)
+     __builtin_abort ();
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-1.c gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-1.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-1.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-1.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,43 ----
+ /* { dg-additional-options "-std=c23 -m4 -mfsca -ffast-math" }  */
+ /* { dg-do compile }  */
+ 
+ typedef float vec3[3];
+ typedef float vec4[4];
+ typedef vec4 mat4[4];
+ 
+ float glm_rotate_make_angle, glm_rotate_make___trans_tmp_1, glm_rotate_at_m_2_1,
+     glm_rotate_at_m_1_1, glm_rotate_at_m_0_0, glm_rotate_at_m_0_3,
+     glm_rotate_at_m_2_3, glm_rotate_at_pivot;
+ vec3 glm_rotate_make_vs;
+ 
+ vec4 *glm_rotate_at_m;
+ 
+ inline void glm_rotate_make (mat4 m)
+ {
+   float vs_2;
+   glm_rotate_make___trans_tmp_1 = __builtin_sinf (glm_rotate_make_angle);
+   float *dest = glm_rotate_make_vs;
+   dest[0] = glm_rotate_make___trans_tmp_1;
+   m[0][2] -= vs_2 += glm_rotate_make_vs[0];
+ }
+ 
+ void glmc_rotate_at (void)
+ {
+   __attribute((aligned(8))) vec3 pivotInv;
+   float *v = &glm_rotate_at_pivot, *dest = glm_rotate_at_m[3];
+   dest[3] += glm_rotate_at_m[1][3] * v[1];
+   dest[3] += glm_rotate_at_m_2_3 * v[2];
+   {
+     __attribute((aligned(16))) mat4 rot;
+     glm_rotate_make(rot);
+     vec4 *dest = glm_rotate_at_m;
+     float a03 = glm_rotate_at_m_0_3, b10 = rot[1][0], b11 = rot[1][1];
+     dest[0][1] = glm_rotate_at_m_0_0 + glm_rotate_at_m_1_1 * rot[0][1] +
+                  glm_rotate_at_m_2_1 * rot[0][2];
+     dest[1][3] = a03 * b10 * b11;
+   }
+   {
+     dest[3] += glm_rotate_at_m_1_1;
+     dest[3] += pivotInv[2];
+   }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-2.c gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-2.c
*** gcc-17-20260621/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-2.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gcc.target/sh/torture/pr55212-c464-2.c	Sun Jun 28 22:32:15 2026
***************
*** 0 ****
--- 1,37 ----
+ /* { dg-additional-options "-std=c23 -m4 -mfsca -ffast-math" }  */
+ /* { dg-do compile }  */
+ 
+ 
+ typedef float vec4[4];
+ typedef vec4 mat4[4];
+ float glm_mul_rot_m1_2_2, glm_mul_rot_m1_1_2, glm_mul_rot_m1_0_2,
+     glm_mul_rot_m1_3_3, glm_mul_rot_m1_3_2, glm_mul_rot_m1_3_1,
+     glm_mul_rot_m1_3_0, glm_mul_rot_m1_2_1, glm_mul_rot_m1_2_0,
+     glm_mul_rot_dest_3_3, glm_mul_rot_dest_3_2, glm_mul_rot_dest_3_1,
+     glm_mul_rot_dest_3_0, glm_mul_rot_dest_2_3, glm_mul_rot_dest_1_2,
+     glm_mul_rot_dest_1_1, glm_mul_rot_dest_1_0, glm_mul_rot_dest_0_2,
+     glm_rotate_z_angle;
+ 
+ static void glm_mul_rot(mat4 m2) {
+   float a20 = glm_mul_rot_m1_2_0, a21 = glm_mul_rot_m1_2_1,
+         a30 = glm_mul_rot_m1_3_0, a31 = glm_mul_rot_m1_3_1,
+         a32 = glm_mul_rot_m1_3_2, a33 = glm_mul_rot_m1_3_3, b11 = m2[1][1],
+         b20 = m2[2][0], b21 = m2[2][1], b22 = m2[2][2];
+   glm_mul_rot_dest_0_2 = glm_mul_rot_m1_0_2 * m2[0][0] +
+                          glm_mul_rot_m1_1_2 * m2[0][1] +
+                          glm_mul_rot_m1_2_2 * m2[0][2];
+   glm_mul_rot_dest_1_0 = a20;
+   glm_mul_rot_dest_1_1 = a21;
+   glm_mul_rot_dest_1_2 = b11;
+   glm_mul_rot_dest_2_3 = b20 * b21 * b22;
+   glm_mul_rot_dest_3_0 = a30;
+   glm_mul_rot_dest_3_1 = a31;
+   glm_mul_rot_dest_3_2 = a32;
+   glm_mul_rot_dest_3_3 = a33;
+ }
+ void glmc_rotate_z() {
+   mat4 t;
+   float s = __builtin_sinf(glm_rotate_z_angle);
+   t[0][1] = s;
+   glm_mul_rot(t);
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/asan/structure_constructor_alloc_comp_leak_1.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,36 ----
+ ! { dg-do run }
+ 
+ ! PR fortran/121972
+ 
+ ! A structure constructor used as an array-constructor element whose type has
+ ! allocatable components leaked those components.  gfc_trans_array_ctor_element
+ ! freed alloc comps only for EXPR_FUNCTION elements; EXPR_STRUCTURE was missed.
+ ! gfc_trans_alloc_subarray_assign also nulled the temp descriptor data pointer
+ ! without first freeing the element alloc comps.  Checked under -fsanitize=address.
+ 
+ module m
+   implicit none
+   type string_t
+     character(len=:), allocatable :: s
+   end type
+   type file_t
+     type(string_t), allocatable :: lines(:)
+   end type
+ contains
+   subroutine check (line)
+     character(len=*), intent(in) :: line
+     type(file_t) :: f
+     f = file_t([string_t(line)])
+     if (.not. allocated (f%lines)) stop 1
+     if (size (f%lines) /= 1) stop 2
+     if (.not. allocated (f%lines(1)%s)) stop 3
+     if (f%lines(1)%s /= line) stop 4
+   end subroutine
+ end module
+ 
+ program structure_constructor_alloc_comp_leak_1
+   use m
+   call check ('hello')
+   call check ('world')
+   call check ('a longer string value')
+ end program
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/c-prototypes_1.F90 gcc-17-20260628/gcc/testsuite/gfortran.dg/c-prototypes_1.F90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/c-prototypes_1.F90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/c-prototypes_1.F90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,61 ----
+ ! { dg-do compile }
+ ! { dg-options "-fc-prototypes" }
+ !
+ ! PR fortran/125902
+ !
+ ! Test -fc-prototypes for deferred shape and deferred length dummies
+ 
+ module test_c_prototypes_module
+ 
+   use iso_c_binding
+   implicit none (type, external)
+ 
+   interface
+     subroutine testsub1(b, c, d, r, ier) bind(C)
+       import
+       character(kind=c_char,len=*),              intent(in)    :: b
+       real(c_float),  dimension(:),              intent(inout) :: c
+       real(c_double), dimension(:), allocatable, intent(inout) :: d
+       character(kind=c_char,len=:), allocatable, intent(inout) :: r
+       integer(c_int),                            intent(out)   :: ier
+     end subroutine testsub1
+   end interface
+ 
+   interface
+     subroutine testsub2(b, msg, c, d, r) bind(C)
+       import
+       character(kind=c_char),                intent(in)    :: b(:)
+       character(kind=c_char),                intent(out)   :: msg(*)
+       real(c_float),  dimension(*),          intent(inout) :: c
+       real(c_double), dimension(:), pointer, intent(inout) :: d
+       character(kind=c_char,len=:), pointer, intent(inout) :: r
+     end subroutine testsub2
+   end interface
+ 
+ end module test_c_prototypes_module 
+ 
+ #if 0
+ !{ dg-begin-multiline-output "" }
+ #include <stddef.h>
+ #ifdef __cplusplus
+ #include <complex>
+ #define __GFORTRAN_FLOAT_COMPLEX std::complex<float>
+ #define __GFORTRAN_DOUBLE_COMPLEX std::complex<double>
+ #define __GFORTRAN_LONG_DOUBLE_COMPLEX std::complex<long double>
+ extern "C" {
+ #else
+ #define __GFORTRAN_FLOAT_COMPLEX float _Complex
+ #define __GFORTRAN_DOUBLE_COMPLEX double _Complex
+ #define __GFORTRAN_LONG_DOUBLE_COMPLEX long double _Complex
+ #endif
+ 
+ #include <ISO_Fortran_binding.h>
+ 
+ void testsub1 (const CFI_cdesc_t *b, CFI_cdesc_t *c, CFI_cdesc_t *d, CFI_cdesc_t *r, int *ier);
+ void testsub2 (const CFI_cdesc_t *b, char *msg, float *c, CFI_cdesc_t *d, CFI_cdesc_t *r);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ !{ dg-end-multiline-output "" }
+ #endif
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/c-prototypes_2.F90 gcc-17-20260628/gcc/testsuite/gfortran.dg/c-prototypes_2.F90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/c-prototypes_2.F90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/c-prototypes_2.F90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,35 ----
+ ! { dg-do compile }
+ ! { dg-options "-fc-prototypes" }
+ !
+ ! PR fortran/125902
+ !
+ ! Test -fc-prototypes for assumed length character dummy, header include
+ 
+ subroutine sub (b) bind(C)
+   character(*) :: b
+ end subroutine sub
+ 
+ #if 0
+ !{ dg-begin-multiline-output "" }
+ #include <stddef.h>
+ #ifdef __cplusplus
+ #include <complex>
+ #define __GFORTRAN_FLOAT_COMPLEX std::complex<float>
+ #define __GFORTRAN_DOUBLE_COMPLEX std::complex<double>
+ #define __GFORTRAN_LONG_DOUBLE_COMPLEX std::complex<long double>
+ extern "C" {
+ #else
+ #define __GFORTRAN_FLOAT_COMPLEX float _Complex
+ #define __GFORTRAN_DOUBLE_COMPLEX double _Complex
+ #define __GFORTRAN_LONG_DOUBLE_COMPLEX long double _Complex
+ #endif
+ 
+ #include <ISO_Fortran_binding.h>
+ 
+ void sub (CFI_cdesc_t *b);
+ 
+ #ifdef __cplusplus
+ }
+ #endif
+ !{ dg-end-multiline-output "" }
+ #endif
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/class_array_15.f03 gcc-17-20260628/gcc/testsuite/gfortran.dg/class_array_15.f03
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/class_array_15.f03	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/class_array_15.f03	Sun Jun 28 22:32:16 2026
*************** subroutine pr54992  ! This test remains
*** 115,118 ****
    bh => bhGet(b,instance=2)
    if (loc (b) .ne. loc(bh%hostNode)) STOP 8
  end
! ! { dg-final { scan-tree-dump-times "builtin_free" 16 "original" } }
--- 115,118 ----
    bh => bhGet(b,instance=2)
    if (loc (b) .ne. loc(bh%hostNode)) STOP 8
  end
! ! { dg-final { scan-tree-dump-times "builtin_free" 17 "original" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90	Sun Jun 28 22:32:16 2026
*************** contains
*** 130,133 ****
    end function new_prt_spec3
  end program main
  ! { dg-final { scan-tree-dump-times "__builtin_malloc" 16 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_free" 33 "original" } }
--- 130,133 ----
    end function new_prt_spec3
  end program main
  ! { dg-final { scan-tree-dump-times "__builtin_malloc" 16 "original" } }
! ! { dg-final { scan-tree-dump-times "__builtin_free" 35 "original" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/fmt_t_10.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/fmt_t_10.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/fmt_t_10.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/fmt_t_10.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,15 ----
+ ! { dg-do run }
+ ! PR114618 Format produces incorrect output when contains 1x, ok when uses " " 
+ ! aside: Before patch output1 is garbage.
+ program fmt_t_10
+    implicit none
+    integer, parameter :: wp = kind(0d0)
+    real(kind=wp) :: pi  = 3.14159265358979323846264338_wp
+    character(len=*), parameter:: fmt1 = '(19("."),t1,g0,1x,t21,g0)'
+    character(len=*), parameter:: fmt2 = '(19("."),t1,g0," ",t21,g0)'
+    character(21) :: output1, output2
+    write (output1, fmt1) 'RADIX', radix(pi)
+    write (output2, fmt2) 'RADIX', radix(pi)
+    if (output1 /= 'RADIX ............. 2') stop 1
+    if (output2 /= 'RADIX ............. 2') stop 2
+ end program fmt_t_10
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/fmt_t_11.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/fmt_t_11.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/fmt_t_11.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/fmt_t_11.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,61 ----
+ ! { dg-do run }
+ ! PR libfortran/114618 - Test TL, TR, and T specifiers in combination for
+ ! sequential and stream formatted file I/O.
+ program fmt_t_11
+   implicit none
+   integer :: u
+   character(len=20) :: line
+ 
+   ! --- Sequential formatted file tests ---
+ 
+   ! T backward then TR forward into already-written content
+   open (newunit=u, status='scratch', form='formatted')
+   write (u, '(10("X"),t3,"AB",tr3,"C")')
+   rewind (u)
+   read (u, '(a)') line
+   close (u)
+   if (line(1:10) /= 'XXABXXXCXX') stop 1
+ 
+   ! TL backward then TR forward into already-written content
+   open (newunit=u, status='scratch', form='formatted')
+   write (u, '("HELLO123",tl5,"AB",tr3,"Z")')
+   rewind (u)
+   read (u, '(a)') line
+   close (u)
+   if (line(1:9) /= 'HELAB123Z') stop 2
+ 
+   ! T, TL, and TR all combined in one format
+   open (newunit=u, status='scratch', form='formatted')
+   write (u, '(t7,"*",tl5,"AB",tr3,"Z")')
+   rewind (u)
+   read (u, '(a)') line
+   close (u)
+   if (line(1:8) /= '  AB  *Z') stop 3
+ 
+   ! --- Stream formatted file tests ---
+ 
+   ! T backward then TR forward into already-written content
+   open (newunit=u, status='scratch', form='formatted', access='stream')
+   write (u, '(10("X"),t3,"AB",tr3,"C")')
+   rewind (u)
+   read (u, '(a)') line
+   close (u)
+   if (line(1:10) /= 'XXABXXXCXX') stop 4
+ 
+   ! TL backward then TR forward into already-written content
+   open (newunit=u, status='scratch', form='formatted', access='stream')
+   write (u, '("HELLO123",tl5,"AB",tr3,"Z")')
+   rewind (u)
+   read (u, '(a)') line
+   close (u)
+   if (line(1:9) /= 'HELAB123Z') stop 5
+ 
+   ! T, TL, and TR all combined in one format
+   open (newunit=u, status='scratch', form='formatted', access='stream')
+   write (u, '(t7,"*",tl5,"AB",tr3,"Z")')
+   rewind (u)
+   read (u, '(a)') line
+   close (u)
+   if (line(1:8) /= '  AB  *Z') stop 6
+ 
+ end program fmt_t_11
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/declare-mapper-8.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/declare-mapper-8.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/declare-mapper-8.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/declare-mapper-8.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,22 ----
+ !
+ ! Eventually: Check that strided use of 'declare mapper' is rejected for
+ ! 'target enter data' but accepted for 'target update'
+ !
+ ! However, it currently fails already for parsing, but it should at least not ICE
+ !
+ module m
+ implicit none
+ type t
+   integer :: n
+   integer,pointer :: p(:)
+ end type t
+ 
+ !$omp declare mapper(my : t :: s) map(to: s, s%p(:s%n:2))
+ contains
+ 
+ subroutine f()
+   type(t) v
+   !$omp target enter data map(mapper(my), to: v) ! FIXME/TODO: This line should get rejected
+   !$omp target update to(mapper(my): v)  ! { dg-error "Syntax error in OpenMP variable list" }
+ end
+ end
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/lastprivate-allocatable-barrier-1.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/lastprivate-allocatable-barrier-1.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/lastprivate-allocatable-barrier-1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/lastprivate-allocatable-barrier-1.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,33 ----
+ ! { dg-do compile }
+ ! { dg-additional-options "-fdump-tree-omplower" }
+ 
+ ! A lastprivate allocatable (without a corresponding firstprivate) needs an
+ ! outer-variable reference (gfc_omp_private_outer_ref is true), which makes
+ ! lower_rec_input_clauses emit the implicit barrier.  The barrier kind
+ ! depends on the construct the clause ends up on:
+ !   - combined "parallel do"     -> GOMP_BARRIER_IMPLICIT_PARALLEL  (0)
+ !   - "do" enclosed in a "parallel" -> GOMP_BARRIER_IMPLICIT_WORKSHARE (1)
+ 
+ subroutine parallel_case
+   integer, allocatable :: a(:)
+   integer :: i
+   !$omp parallel do lastprivate(a)
+   do i = 1, 1
+      a = [i]
+   end do
+ end subroutine parallel_case
+ 
+ subroutine workshare_case
+   integer, allocatable :: a(:)
+   integer :: i
+   !$omp parallel
+   !$omp do lastprivate(a)
+   do i = 1, 1
+      a = [i]
+   end do
+   !$omp end do
+   !$omp end parallel
+ end subroutine workshare_case
+ 
+ ! { dg-final { scan-tree-dump-times "GOMP_barrier_ext \\(0\\)" 1 "omplower" } }
+ ! { dg-final { scan-tree-dump-times "GOMP_barrier_ext \\(1\\)" 1 "omplower" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/masked-1.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/masked-1.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/gomp/masked-1.f90	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/gomp/masked-1.f90	Sun Jun 28 22:32:16 2026
***************
*** 1,4 ****
! ! { dg-additional-options "-ffree-line-length-none" }
  subroutine foo (x, a)
    implicit none
    integer, value :: x
--- 1,6 ----
! ! { dg-do compile }
! ! { dg-additional-options "-ffree-line-length-none -fdump-tree-omplower" }
! 
  subroutine foo (x, a)
    implicit none
    integer, value :: x
*************** subroutine foobar (d, f, fi, p, s, g, i1
*** 92,94 ****
--- 94,98 ----
      end do
    !$omp end parallel masked taskloop simd
  end subroutine
+ 
+ ! { dg-final { scan-tree-dump "GOMP_has_masked_thread_num" "omplower" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/namelist_40.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/namelist_40.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/namelist_40.f90	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/namelist_40.f90	Sun Jun 28 22:32:16 2026
*************** contains
*** 31,37 ****
  
  subroutine writenml (astring)
    character(40), intent(in)  :: astring
!   character(300)   :: errmessage
    integer          :: ierror
  
    open (10, status="scratch", delim='apostrophe')
--- 31,37 ----
  
  subroutine writenml (astring)
    character(40), intent(in)  :: astring
!   character(500)   :: errmessage
    integer          :: ierror
  
    open (10, status="scratch", delim='apostrophe')
*************** subroutine writenml (astring)
*** 47,53 ****
  end subroutine writenml
  
  end program namelist_40
! ! { dg-output "Multiple sub-objects with non-zero rank in namelist object x%m%ch(\r*\n+)" }
! ! { dg-output "Missing colon in substring qualifier for namelist variable x%m%ch(\r*\n+)" }
! ! { dg-output "Substring out of range for namelist variable x%m%ch(\r*\n+)" }
! ! { dg-output "Bad character in substring qualifier for namelist variable x%m%ch(\r*\n+)" }
--- 47,57 ----
  end subroutine writenml
  
  end program namelist_40
! ! { dg-output "Multiple sub-objects with non-zero rank in namelist object x%m%ch at line 2, column 20 in file .*(\r*\n+)" }
! ! { dg-output " x\\(2\\)%m%ch\\(:\\)\\(2:2\\) = 'z','z',.*(\r*\n+)                   \\^(\r*\n+)(\r*\n+)" }
! ! { dg-output "Missing colon in substring qualifier for namelist variable x%m%ch at line 2, column 19 in file .*(\r*\n+)" }
! ! { dg-output " x\\(2\\)%m\\(2\\)%ch\\(:\\)\\(2\\) = 'z','z',.*(\r*\n+)                  \\^(\r*\n+)(\r*\n+)" }
! ! { dg-output "Substring out of range for namelist variable x%m%ch at line 2, column 20 in file .*(\r*\n+)" }
! ! { dg-output " x\\(2\\)%m\\(2\\)%ch\\(:\\)\\(:3\\) = 'z','z',.*(\r*\n+)                   \\^(\r*\n+)(\r*\n+)" }
! ! { dg-output "Bad character in substring qualifier for namelist variable x%m%ch at line 2, column 20 in file .*(\r*\n+)" }
! ! { dg-output " x\\(2\\)%m\\(2\\)%ch\\(1:2\\)\\(k:\\) = 'z','z',.*(\r*\n+)                   \\^" }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/namelist_47.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/namelist_47.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/namelist_47.f90	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/namelist_47.f90	Sun Jun 28 22:32:16 2026
*************** contains
*** 29,35 ****
  
  subroutine writenml (astring)
    character(140), intent(in)  :: astring
!   character(300)   :: errmessage
    integer          :: ierror
  
    open (10, status="scratch", delim='apostrophe')
--- 29,35 ----
  
  subroutine writenml (astring)
    character(140), intent(in)  :: astring
!   character(500)   :: errmessage
    integer          :: ierror
  
    open (10, status="scratch", delim='apostrophe')
*************** subroutine writenml (astring)
*** 45,51 ****
  end subroutine writenml
  
  end program namelist_47
! ! { dg-output "Multiple sub-objects with non-zero rank in namelist object x%m%c012345678901234567890123456789012345678901234567890123456789h(\r*\n+)" }
! ! { dg-output "Missing colon in substring qualifier for namelist variable x%m%c012345678901234567890123456789012345678901234567890123456789h(\r*\n+)" }
! ! { dg-output "Substring out of range for namelist variable x%m%c012345678901234567890123456789012345678901234567890123456789h(\r*\n+)" }
! ! { dg-output "Bad character in substring qualifier for namelist variable x%m%c012345678901234567890123456789012345678901234567890123456789h(\r*\n+)" }
--- 45,51 ----
  end subroutine writenml
  
  end program namelist_47
! ! { dg-output "Multiple sub-objects with non-zero rank in namelist object x%m%c012345678901234567890123456789012345678901234567890123456789h at line 2, column 80 in file .*(\r*\n+)" }
! ! { dg-output "Missing colon in substring qualifier for namelist variable x%m%c012345678901234567890123456789012345678901234567890123456789h at line 2, column 79 in file .*(\r*\n+)" }
! ! { dg-output "Substring out of range for namelist variable x%m%c012345678901234567890123456789012345678901234567890123456789h at line 2, column 80 in file .*(\r*\n+)" }
! ! { dg-output "Bad character in substring qualifier for namelist variable x%m%c012345678901234567890123456789012345678901234567890123456789h at line 2, column 80 in file .*" }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/pdt_77.f03 gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_77.f03
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/pdt_77.f03	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/pdt_77.f03	Sun Jun 28 22:32:16 2026
***************
*** 1,6 ****
--- 1,12 ----
  ! { dg-do run }
+ ! { dg-options "-fdump-tree-original" }
  !
  ! Test the fix for PR110012, which failed to compile with an ICE.
+ ! Later, it was found that mfe_disc_test was leaking memory because
+ ! the 'navier_stokes' component p was given the PDT template dynamic
+ ! type, rather than that of the correct instance. This is detected
+ ! by the added, final subroutine being called twice, rather than
+ ! once (PR121972).
  !
  ! Contributed by Neil Carlson  <neil.n.carlson@gmail.com>
  !
*************** module navier_stokes_type
*** 14,20 ****
--- 20,29 ----
    use pde_class
    type, extends(pde) :: navier_stokes
      integer, allocatable :: data_(:)
+   contains
+     final :: finalIze_navier_stokes
    end type
+   integer :: ctr = 0
  contains
    subroutine alloc_navier_stokes(p , n)
      class(pde(:)), allocatable :: p
*************** contains
*** 25,30 ****
--- 34,43 ----
          p%data_ = [(i, i = 1, p%npde)]
      end select
    end subroutine
+   impure elemental subroutine finalIze_navier_stokes (self)
+     type(navier_stokes), intent(inout) :: self
+     ctr = ctr + 1
+   end
  end module
  
  module mfe_disc_type
*************** module mfe_disc_type
*** 35,45 ****
  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)
--- 48,59 ----
  end module
  
  program test
+   use navier_stokes_type
    call navier_stokes_test
    call mfe_disc_test
+   if (ctr /= 2) stop 3
  contains
    subroutine navier_stokes_test
      class (pde(:)), allocatable :: x
      call alloc_navier_stokes (x, 4)
      select type (x)
*************** contains
*** 49,55 ****
    end subroutine
  
    subroutine mfe_disc_test
-     use navier_stokes_type
      use mfe_disc_type
      type (foo), allocatable :: x
      allocate (x)
--- 63,68 ----
*************** contains
*** 61,63 ****
--- 74,77 ----
      if (allocated (x) .and. allocated (x%p)) deallocate (x%p)
    end subroutine
  end program
+ ! { dg-final { scan-tree-dump-times "VIEW_CONVERT_EXPR" 0 "original" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/power_10.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/power_10.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/power_10.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/power_10.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,85 ----
+ ! { dg-do run }
+ ! PR fortran/125914 - optimize 1.0*n
+ ! { dg-additional-options "-fdump-tree-original" }
+ 
+ program memain
+   implicit none
+   integer, parameter :: n = 16
+   integer (kind=1), dimension(n) :: i1 
+   integer (kind=2), dimension(n) :: i2
+   integer (kind=4), dimension(n) :: i4 = &
+        [6, 5, 4, 4, 10, 8, 12, 8, 9, 4, 8, 11, 12, 10, 3, 12]
+   integer (kind=8), dimension(n) :: i8
+   real (kind=8), dimension(n) :: r8 = &
+        [0.996104819512799_8, 0.245675968329691_8, &
+        0.0303468106690589_8, 0.0240992716571487_8,  &
+        0.0354064316729468_8, 0.275774313901932_8, &
+        0.544792948166924_8, 0.445879110979491_8, &
+        0.241491365544482_8, 0.0954139664143259_8, &
+        0.0109187857324577_8, 0.0946393553679743_8, &
+        0.140308573675276_8, 0.353858089853078_8, &
+        0.879882896668272_8, 0.818438744841301_8] 
+ 
+   real (kind=4), dimension(n) :: r4
+ 
+   integer(kind=8) :: i
+   real (kind=8) :: s8
+   real (kind=4) :: s4
+ 
+   i1 = i4
+   i2 = i4
+   i8 = i4
+ 
+   s8 = 0
+   do i=1,n
+      s8 = s8 + r8(i)*(-1.0_8)**i1(i)
+   end do
+   if (abs (s8 - 2.3096522811663198_8) > 1e-13_8) stop 1
+ 
+   s8 = 0
+   do i=1,n
+      s8 = s8 + r8(i)*(-1.0_8)**i2(i)
+   end do
+   if (abs (s8 - 2.3096522811663198_8) > 1e-13_8) stop 2
+ 
+   s8 = 0
+   do i=1,n
+      s8 = s8 + r8(i)*(-1.0_8)**i4(i)
+   end do
+   if (abs (s8 - 2.3096522811663198_8) > 1e-13_8) stop 3
+ 
+   s8 = 0
+   do i=1,n
+      s8 = s8 + r8(i)*(-1.0_8)**i8(i)
+   end do
+   if (abs (s8 - 2.3096522811663198_8) > 1e-13_8) stop 4
+ 
+   r4 = r8
+ 
+   s4 = 0
+   do i=1,n
+      s4 = s4 + r4(i)*(-1.0)**i1(i)
+   end do
+   if (abs (s4 -  2.30965209) > 1e-5) stop 11
+ 
+   s4 = 0
+   do i=1,n
+      s4 = s4 + r4(i)*(-1.0)**i2(i)
+   end do
+   if (abs (s4 -  2.30965209) > 1e-5) stop 12
+ 
+   s4 = 0
+   do i=1,n
+      s4 = s4 + r4(i)*(-1.0)**i4(i)
+   end do
+   if (abs (s4 -  2.30965209) > 1e-5) stop 13
+ 
+   s4 = 0
+   do i=1,n
+      s4 = s4 + r4(i)*(-1.0)**i8(i)
+   end do
+   if (abs (s4 -  2.30965209) > 1e-5) stop 14
+ 
+ end program memain
+ ! { dg-final { scan-tree-dump-not "_gfortran_pow" "original" } }
+ ! { dg-final { scan-tree-dump-not "__builtin_powi" "original" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/power_6.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/power_6.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/power_6.f90	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/power_6.f90	Sun Jun 28 22:32:16 2026
*************** real function f(k)
*** 10,14 ****
  end
  
  ! { dg-final { scan-tree-dump-not "__builtin_powif"  "optimized" } }
- ! { dg-final { scan-tree-dump "powi_cond_\[0-9\] = k_\[0-9\]\\(D\\) & 1;"  "optimized" } }
- ! { dg-final { scan-tree-dump "powi_\[0-9\] = powi_cond_\[0-9\] \\? -1.0e\\+0 : 1.0e\\+0;"  "optimized" } }
--- 10,12 ----
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/pr114618.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/pr114618.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/pr114618.f90	Sun Jun 21 22:32:13 2026
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/pr114618.f90	Thu Jan  1 00:00:00 1970
***************
*** 1,15 ****
- ! { dg-do run }
- ! PR114618 Format produces incorrect output when contains 1x, ok when uses " " 
- ! aside: Before patch output1 is garbage.
- program pr114618
-    implicit none
-    integer, parameter :: wp = kind(0d0)
-    real(kind=wp) :: pi  = 3.14159265358979323846264338_wp
-    character(len=*), parameter:: fmt1 = '(19("."),t1,g0,1x,t21,g0)'
-    character(len=*), parameter:: fmt2 = '(19("."),t1,g0," ",t21,g0)'
-    character(21) :: output1, output2
-    write (output1, fmt1) 'RADIX', radix(pi)
-    write (output2, fmt2) 'RADIX', radix(pi)
-    if (output1 /= 'RADIX.............. 2') stop 1
-    if (output2 /= 'RADIX ............. 2') stop 2
- end program pr114618
--- 0 ----
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/select_type_53.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/select_type_53.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/select_type_53.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/select_type_53.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,41 ----
+ ! { dg-do run }
+ !
+ ! PR fortran/125761
+ !
+ ! Passing an array section of an unlimited-polymorphic array with a CHARACTER
+ ! payload addressed the section data with the wrong element size: the section
+ ! base data pointer was offset using the vptr size (the kind size, 1) rather
+ ! than the _len-corrected element size, so every element but the first was
+ ! wrong.
+ 
+ program p
+   character(4), target :: arr(5) = ["aaaa", "bbbb", "cccc", "dddd", "eeee"]
+   character(2), target :: arr2(4) = ["xx", "yy", "zz", "ww"]
+   class(*), pointer :: ptr(:)
+ 
+   ptr => arr
+   call check (ptr(2:4), ["bbbb", "cccc", "dddd"])   ! contiguous
+   call check (ptr(1:5:2), ["aaaa", "cccc", "eeee"]) ! strided
+ 
+   ptr => arr2
+   call check (ptr(2:3), ["yy", "zz"])
+ 
+ contains
+ 
+   subroutine check (x, expect)
+     class(*) :: x(:)
+     character(*), intent(in) :: expect(:)
+     integer :: i
+     select type (x)
+      type is (character(*))
+        if (len (x) /= len (expect)) stop 1
+        if (size (x) /= size (expect)) stop 2
+        do i = 1, size (x)
+           if (x(i) /= expect(i)) stop 3
+        end do
+      class default
+        stop 4
+     end select
+   end subroutine
+ 
+ end program p
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/warn_unused_but_set_error_1.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_unused_but_set_error_1.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/warn_unused_but_set_error_1.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_unused_but_set_error_1.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,8 ----
+ ! { dg-do compile }
+ ! { dg-options "-Wundefined-vars -Wunused-but-set-variable" }
+ ! Make sure that no warning are emitted after an error.
+ program main
+   real :: a, b
+   b = sum(a) ! { dg-error "must be an array" }
+ end program main
+   
diff -Nrcpad gcc-17-20260621/gcc/testsuite/gfortran.dg/warn_unused_intent_out_2.f90 gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_unused_intent_out_2.f90
*** gcc-17-20260621/gcc/testsuite/gfortran.dg/warn_unused_intent_out_2.f90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/gfortran.dg/warn_unused_intent_out_2.f90	Sun Jun 28 22:32:16 2026
***************
*** 0 ****
--- 1,21 ----
+ ! { dg-do compile }
+ ! { dg-options "-Wunused-intent-out" }
+ ! PR fortran/125801 - no warnings should be emitted here.
+ 
+ subroutine unused_1
+   character(len=20) c_val
+   integer val
+ 
+   CALL getarg(1,c_val)
+   READ(c_val,*) val
+   print*,val
+ end subroutine unused_1
+ 
+ subroutine unused_2
+ 
+   INTEGER t1,t2
+   CALL SYSTEM_CLOCK(t1)
+   CALL sleep(1)
+   CALL SYSTEM_CLOCK(t2)
+   print*,"Ende: ",(t2-t1)/1000.0
+ end subroutine unused_2
diff -Nrcpad gcc-17-20260621/gcc/testsuite/lib/profopt.exp gcc-17-20260628/gcc/testsuite/lib/profopt.exp
*** gcc-17-20260621/gcc/testsuite/lib/profopt.exp	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/lib/profopt.exp	Sun Jun 28 22:32:17 2026
*************** proc profopt-execute { src } {
*** 462,468 ****
  		} else {
  		    set profiler "perf"
  		}
! 		set cmd "create_gcov --binary $execname1 --profile=$tmpdir/$base.perf.data --profiler=$profiler --gcov_version=$autofdo_version --gcov=$tmpdir/$bprefix$base.$ext"
  		verbose "Running $cmd"
  		set id [remote_spawn "" $cmd]
  		if { $id < 0 } {
--- 462,472 ----
  		} else {
  		    set profiler "perf"
  		}
! 	    	set create_gcov "[getenv CREATE_GCOV]"
! 		if { $create_gcov == "" } {
! 		    set create_gcov "create_gcov"
! 		}
! 		set cmd "$create_gcov --binary $execname1 --profile=$tmpdir/$base.perf.data --profiler=$profiler --gcov_version=$autofdo_version --gcov=$tmpdir/$bprefix$base.$ext"
  		verbose "Running $cmd"
  		set id [remote_spawn "" $cmd]
  		if { $id < 0 } {
diff -Nrcpad gcc-17-20260621/gcc/testsuite/lib/target-supports.exp gcc-17-20260628/gcc/testsuite/lib/target-supports.exp
*** gcc-17-20260621/gcc/testsuite/lib/target-supports.exp	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/lib/target-supports.exp	Sun Jun 28 22:32:17 2026
*************** proc check_effective_target_has_q_floati
*** 4245,4250 ****
--- 4245,4264 ----
      } "$opts"]
  }
  
+ # Return 1 if the target supports infinities and NaNs on
+ # float, double and long double.
+ 
+ proc check_effective_target_flt_dbl_ldbl_inf_nan { } {
+     return [check_no_compiler_messages_nocache flt_dbl_ldbl_inf_nan object {
+ 	int dummy1[__FLT_HAS_INFINITY__ ? 1 : -1];
+ 	int dummy2[__FLT_HAS_QUIET_NAN__ ? 1 : -1];
+ 	int dummy3[__DBL_HAS_INFINITY__ ? 1 : -1];
+ 	int dummy4[__DBL_HAS_QUIET_NAN__ ? 1 : -1];
+ 	int dummy5[__LDBL_HAS_INFINITY__ ? 1 : -1];
+ 	int dummy6[__LDBL_HAS_QUIET_NAN__ ? 1 : -1];
+     }]
+ }
+ 
  # Return 1 if the target supports the _FloatN / _FloatNx type
  # indicated in the function name, 0 otherwise.
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/attr-allocator1.rs gcc-17-20260628/gcc/testsuite/rust/compile/attr-allocator1.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/attr-allocator1.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/attr-allocator1.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,12 ----
+ // { dg-additional-options "-fdump-tree-gimple" }
+ #![feature(no_core, rustc_attrs)]
+ #![no_core]
+ 
+ #[rustc_allocator]
+ #[rustc_allocator_nounwind]
+ fn _foo() -> *mut u8 {
+     0 as *mut u8
+ }
+ 
+ // { dg-final { scan-tree-dump "malloc" "gimple" } }
+ // { dg-final { scan-tree-dump "nothrow" "gimple" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/attr-allocator2.rs gcc-17-20260628/gcc/testsuite/rust/compile/attr-allocator2.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/attr-allocator2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/attr-allocator2.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,10 ----
+ #![feature(no_core, rustc_attrs)]
+ #![no_core]
+ 
+ #[rustc_allocator(invalid)] // { dg-error "malformed .rustc_allocator. attribute input" }
+ pub fn _foo() -> *mut u8 {
+     0 as *mut u8
+ }
+ 
+ #[rustc_allocator_nounwind(invalid)] // { dg-error "malformed .rustc_allocator_nounwind. attribute input" }
+ pub fn _bar() {}
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/attr-allocator3.rs gcc-17-20260628/gcc/testsuite/rust/compile/attr-allocator3.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/attr-allocator3.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/attr-allocator3.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,6 ----
+ #![feature(no_core, rustc_attrs)]
+ #![no_core]
+ 
+ #[rustc_allocator] // { dg-error ".rustc_allocator. attribute must be applied to a function returning a pointer" }
+ pub fn _foo() {}
+ 
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/attr-macro.rs gcc-17-20260628/gcc/testsuite/rust/compile/attr-macro.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/attr-macro.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/attr-macro.rs	Thu Jan  1 00:00:00 1970
***************
*** 1,10 ****
- #![feature(no_core)]
- #![no_core]
- 
- macro_rules! foo {
-     () => { #[cfg(all())] 12 }
- }
- 
- fn main() -> i32 {
-     foo!()
- }
--- 0 ----
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/ctlz.rs gcc-17-20260628/gcc/testsuite/rust/compile/ctlz.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/ctlz.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/ctlz.rs	Sun Jun 28 22:32:17 2026
*************** pub trait Sized {}
*** 9,15 ****
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
  }
  
  fn main() {
--- 9,15 ----
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
  }
  
  fn main() {
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/ctlz_nonzero.rs gcc-17-20260628/gcc/testsuite/rust/compile/ctlz_nonzero.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/ctlz_nonzero.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/ctlz_nonzero.rs	Sun Jun 28 22:32:17 2026
*************** pub trait Sized {}
*** 9,15 ****
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
  }
  
  fn main() {
--- 9,15 ----
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
  }
  
  fn main() {
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/cttz.rs gcc-17-20260628/gcc/testsuite/rust/compile/cttz.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/cttz.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/cttz.rs	Sun Jun 28 22:32:17 2026
*************** pub trait Sized {}
*** 9,15 ****
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn cttz<T>(x: T) -> u32;
  }
  
  fn main() {
--- 9,15 ----
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn cttz<T>(x: T) -> T;
  }
  
  fn main() {
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/cttz_nonzero.rs gcc-17-20260628/gcc/testsuite/rust/compile/cttz_nonzero.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/cttz_nonzero.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/cttz_nonzero.rs	Sun Jun 28 22:32:17 2026
*************** pub trait Sized {}
*** 9,15 ****
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn cttz_nonzero<T>(x: T) -> u32;
  }
  
  fn main() {
--- 9,15 ----
  pub trait Copy {}
  
  extern "rust-intrinsic" {
!     pub fn cttz_nonzero<T>(x: T) -> T;
  }
  
  fn main() {
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/drop-ref-pattern.rs gcc-17-20260628/gcc/testsuite/rust/compile/drop-ref-pattern.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/drop-ref-pattern.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/drop-ref-pattern.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,23 ----
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "drop"]
+ pub trait Drop {
+     fn drop (&mut self);
+ }
+ 
+ struct Droppable;
+ 
+ impl Drop for Droppable {
+     fn drop(&mut self) {}
+ }
+ 
+ fn main() {
+     {
+         let ref _x = Droppable; // { dg-message "sorry, unimplemented: drop trait not supported for subpatterns and ref patterns" }
+     }
+ }
\ No newline at end of file
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/exchange_malloc.rs gcc-17-20260628/gcc/testsuite/rust/compile/exchange_malloc.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/exchange_malloc.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/exchange_malloc.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,7 ----
+ #![feature(no_core,lang_items)]
+ #![no_core]
+ 
+ #[lang = "exchange_malloc"]
+ unsafe fn _allocate(_size: usize, _align: usize) -> *mut u8 {
+     0 as *mut u8
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/extern_crate_self.rs gcc-17-20260628/gcc/testsuite/rust/compile/extern_crate_self.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/extern_crate_self.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/extern_crate_self.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,6 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ fn main() {
+     extern crate self as my_crate;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/float_literals.rs gcc-17-20260628/gcc/testsuite/rust/compile/float_literals.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/float_literals.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/float_literals.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,13 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ pub fn f() {
+     let _ = 0.;
+     let _ = 159.;
+     let _ = 0.0;
+     let _ = 159.0;
+     let _ = 0.0f32;
+     let _ = 159.0f32;
+     let _ = 0_0.0f32;
+     let _ = 0_159.0f32;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/import_in_type_ns6.rs gcc-17-20260628/gcc/testsuite/rust/compile/import_in_type_ns6.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/import_in_type_ns6.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/import_in_type_ns6.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,17 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ mod inner {
+     mod intrinsics {
+         pub fn unchecked_shl() {}
+         pub fn unchecked_snl() {}
+         pub fn unchecked_adult_swim() {}
+     }
+ }
+ 
+ use inner::intrinsics::{self, unchecked_snl};
+ 
+ fn foo() /* { dg-warning "never used" } */
+ {
+     use intrinsics::{unchecked_adult_swim, unchecked_shl};
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/import_in_type_ns7.rs gcc-17-20260628/gcc/testsuite/rust/compile/import_in_type_ns7.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/import_in_type_ns7.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/import_in_type_ns7.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,22 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ mod inner {
+     pub mod error {
+         pub enum IntErrorKind {
+             A,
+             B,
+             C,
+         }
+     }
+ }
+ 
+ pub use inner::error::IntErrorKind;
+ 
+ fn foo() /* { dg-warning "never used" } */
+ {
+     use self::IntErrorKind::*;
+ 
+     let _ = A;
+     let _ = IntErrorKind::B;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/intrinsic-checker.rs gcc-17-20260628/gcc/testsuite/rust/compile/intrinsic-checker.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/intrinsic-checker.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/intrinsic-checker.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,27 ----
+ #![feature(no_core, intrinsics, lang_items)]
+ #![no_core]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     fn foo(); // { dg-error "unrecognized intrinsic function: .foo." }
+ 
+     fn size_of<T, U>() -> usize; // { dg-error "intrinsic has wrong number of type parameters: found 2, expected 1" }
+ 
+     fn abort(x: i32) -> !; // { dg-error "intrinsic has wrong number of function parameters: found 1, expected 0" }
+ 
+     fn offset<T>(dst: usize, offset: isize) -> *const T;
+     // { dg-error "intrinsic has wrong type" "" { target *-*-* } .-1 }
+     // { dg-message "expected fn pointer .extern \"rust-intrinsic\" fn\\(\\*const P0, isize\\) -> \\*const P0." "" { target *-*-* } .-2 }
+     // { dg-message "found fn pointer .extern \"rust-intrinsic\" fn\\(usize, isize\\) -> \\*const P0." "" { target *-*-* } .-3 }
+ 
+     fn add_with_overflow<T>(x: T, y: i32) -> (T, bool);
+     // { dg-error "intrinsic has wrong type" "" { target *-*-* } .-1 }
+ 
+     fn catch_unwind(try_fn: usize, data: *mut u8, catch_fn: fn(*mut u8, *mut u8)) -> i32;
+     // { dg-error "intrinsic has wrong type" "" { target *-*-* } .-1 }
+ 
+     fn transmute<T, U>(e: T) -> usize;
+     // { dg-error "intrinsic has wrong type" "" { target *-*-* } .-1 }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/issue-4245.rs gcc-17-20260628/gcc/testsuite/rust/compile/issue-4245.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/issue-4245.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/issue-4245.rs	Sun Jun 28 22:32:17 2026
*************** pub trait Sized {}
*** 9,13 ****
  
  #[cfg(not(cg_gcc))]
  extern "rust-intrinsic" {
!     fn copy_nonoverlapping<T>(src: &T, dst: &mut T, count: usize);
  }
--- 9,13 ----
  
  #[cfg(not(cg_gcc))]
  extern "rust-intrinsic" {
!     fn copy_nonoverlapping<T>(src: *const T, dst: *mut T, count: usize);
  }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/issue-4563.rs gcc-17-20260628/gcc/testsuite/rust/compile/issue-4563.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/issue-4563.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/issue-4563.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,12 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ mod foo {
+     pub fn foo() {}
+ }
+ 
+ use foo::foo;
+ 
+ fn main() {
+     foo();
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/macros/mbe/macro_attr_expr.rs gcc-17-20260628/gcc/testsuite/rust/compile/macros/mbe/macro_attr_expr.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/macros/mbe/macro_attr_expr.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/macros/mbe/macro_attr_expr.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,10 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ macro_rules! foo {
+     () => { #[cfg(all())] 12 }
+ }
+ 
+ fn main() -> i32 {
+     foo!()
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/mod_in_types_ns.rs gcc-17-20260628/gcc/testsuite/rust/compile/mod_in_types_ns.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/mod_in_types_ns.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/mod_in_types_ns.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,8 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ mod foo {
+     mod bar {}
+ 
+     struct bar; // { dg-error "defined multiple times" }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/mod_in_types_ns2.rs gcc-17-20260628/gcc/testsuite/rust/compile/mod_in_types_ns2.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/mod_in_types_ns2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/mod_in_types_ns2.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,8 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ mod foo {
+     mod bar {}
+ 
+     fn baz() -> bar {} // { dg-error "expected type, found module" }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/name_resolution27.rs gcc-17-20260628/gcc/testsuite/rust/compile/name_resolution27.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/name_resolution27.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/name_resolution27.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,20 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ mod a {
+     trait A {
+         fn foo();
+     }
+ 
+     struct B;
+ 
+     impl A for B {
+         fn foo() {}
+     }
+ }
+ 
+ use a::*;
+ 
+ pub fn bar() {
+     foo() // { dg-error "Cannot find path" }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/name_resolution28.rs gcc-17-20260628/gcc/testsuite/rust/compile/name_resolution28.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/name_resolution28.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/name_resolution28.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,11 ----
+ #![feature(no_core, lang_items)]
+ #![no_core]
+ 
+ pub mod lateresolve {
+     #![lang = "f32"]
+     impl f32 {
+         pub const RADIX: u32 = 2;
+     }
+ 
+     pub const _: u32 = f32::RADIX;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/rustc_std_internal_symbol1.rs gcc-17-20260628/gcc/testsuite/rust/compile/rustc_std_internal_symbol1.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/rustc_std_internal_symbol1.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/rustc_std_internal_symbol1.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,10 ----
+ // { dg-additional-options "-fdump-tree-gimple" }
+ #![feature(no_core, rustc_attrs)]
+ #![no_core]
+ 
+ #[rustc_std_internal_symbol]
+ pub fn _foo() -> i32 {
+     0
+ }
+ 
+ // { dg-final { scan-tree-dump "_foo" "gimple" } }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/rustc_std_internal_symbol2.rs gcc-17-20260628/gcc/testsuite/rust/compile/rustc_std_internal_symbol2.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/rustc_std_internal_symbol2.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/rustc_std_internal_symbol2.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,7 ----
+ #![feature(no_core, rustc_attrs)]
+ #![no_core]
+ 
+ #[rustc_std_internal_symbol(invalid_argument)] // { dg-error "malformed .rustc_std_internal_symbol. attribute input" }
+ pub fn _bar() -> i32 {
+     0
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/torture/intrinsics-3.rs gcc-17-20260628/gcc/testsuite/rust/compile/torture/intrinsics-3.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/torture/intrinsics-3.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/torture/intrinsics-3.rs	Sun Jun 28 22:32:17 2026
***************
*** 4,12 ****
  #![feature(intrinsics)]
  
  extern "rust-intrinsic" {
!     fn not_an_intrinsic();
  }
  
  fn main() {
!     unsafe { not_an_intrinsic() }; // { dg-error "unrecognized intrinsic function: .not_an_intrinsic." }
  }
--- 4,12 ----
  #![feature(intrinsics)]
  
  extern "rust-intrinsic" {
!     fn not_an_intrinsic(); // { dg-error "unrecognized intrinsic function: .not_an_intrinsic." }
  }
  
  fn main() {
!     unsafe { not_an_intrinsic() };
  }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs gcc-17-20260628/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/compile/torture/utf8_identifiers.rs	Sun Jun 28 22:32:17 2026
*************** pub fn f<'かに>() {
*** 12,18 ****
      // { dg-warning "unused name" "" { target *-*-* } .-1 }
      let 게 = "";
      // { dg-warning "unused name" "" { target *-*-* } .-1 }
!     let سلطعون = 0.;
      // { dg-warning "unused name" "" { target *-*-* } .-1 }
  
      let _: &'かに () = &crab;
--- 12,18 ----
      // { dg-warning "unused name" "" { target *-*-* } .-1 }
      let 게 = "";
      // { dg-warning "unused name" "" { target *-*-* } .-1 }
!     let سلطعون = 0.15;
      // { dg-warning "unused name" "" { target *-*-* } .-1 }
  
      let _: &'かに () = &crab;
*************** pub fn f<'かに>() {
*** 21,25 ****
  pub fn g<'β, γ>() {}
  
  struct _S {
!     δ: i32
  }
--- 21,25 ----
  pub fn g<'β, γ>() {}
  
  struct _S {
!     δ: i32,
  }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/compile/type-with-builtin-type-name.rs gcc-17-20260628/gcc/testsuite/rust/compile/type-with-builtin-type-name.rs
*** gcc-17-20260621/gcc/testsuite/rust/compile/type-with-builtin-type-name.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/compile/type-with-builtin-type-name.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,8 ----
+ #![feature(no_core)]
+ #![no_core]
+ 
+ struct i32;
+ 
+ fn main() {
+     let _: i32 = i32;
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/drop-block-scope.rs gcc-17-20260628/gcc/testsuite/rust/execute/drop-block-scope.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/drop-block-scope.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/execute/drop-block-scope.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,41 ----
+ // { dg-output "d\r*\nd\r*\nd\r*\n" }
+ // { dg-additional-options "-w" }
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const i8, ...);
+ }
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "drop"]
+ pub trait Drop {
+     fn drop(&mut self);
+ }
+ 
+ struct Droppable;
+ 
+ impl Drop for Droppable {
+     fn drop(&mut self) {
+         let msg = "d\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg); 
+         }
+     }
+ }
+ 
+ fn main() -> i32 {
+     {
+         let _x = Droppable;
+     }
+     {
+         let x = Droppable;
+     }
+     {
+         let mut x = Droppable;
+     }
+     0
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/drop-function-scope-unit.rs gcc-17-20260628/gcc/testsuite/rust/execute/drop-function-scope-unit.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/drop-function-scope-unit.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/execute/drop-function-scope-unit.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,37 ----
+ // { dg-output "d\r*\n" }
+ // { dg-additional-options "-w" }
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const i8, ...);
+ }
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "drop"]
+ pub trait Drop {
+     fn drop(&mut self);
+ }
+ 
+ struct Droppable;
+ 
+ impl Drop for Droppable {
+     fn drop(&mut self) {
+         let msg = "d\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ fn f() {
+     let _x = Droppable;
+ }
+ 
+ fn main() -> i32 {
+     f();
+     0
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/drop-function-scope.rs gcc-17-20260628/gcc/testsuite/rust/execute/drop-function-scope.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/drop-function-scope.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/execute/drop-function-scope.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,33 ----
+ // { dg-output "d\r*\n" }
+ // { dg-additional-options "-w" }
+ #![feature(no_core)]
+ #![feature(lang_items)]
+ #![no_core]
+ 
+ extern "C" {
+     fn printf(s: *const i8, ...);
+ }
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ #[lang = "drop"]
+ pub trait Drop {
+     fn drop(&mut self);
+ }
+ 
+ struct Droppable;
+ 
+ impl Drop for Droppable {
+     fn drop(&mut self) {
+         let msg = "d\n\0" as *const str as *const i8;
+         unsafe {
+             printf(msg);
+         }
+     }
+ }
+ 
+ fn main() -> i32 {
+     let _x = Droppable;
+     0
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/min_align_of.rs gcc-17-20260628/gcc/testsuite/rust/execute/min_align_of.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/min_align_of.rs	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/testsuite/rust/execute/min_align_of.rs	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,29 ----
+ // { dg-require-effective-target lp64 }
+ #![no_core]
+ #![feature(no_core, intrinsics, lang_items)]
+ 
+ #[lang = "sized"]
+ pub trait Sized {}
+ 
+ extern "rust-intrinsic" {
+     pub fn min_align_of<T>() -> usize;
+ }
+ 
+ fn main() -> i32 {
+     let align_u16 = get_u16_align() as i32;
+     let align_u32 = get_i32_align() as i32;
+ 
+     if align_u16 != 2 || align_u32 != 4 {
+         1
+     } else {
+         0
+     }
+ }
+ 
+ pub fn get_u16_align() -> usize {
+     unsafe { min_align_of::<u16>() }
+ }
+ 
+ pub fn get_i32_align() -> usize {
+     unsafe { min_align_of::<i32>() }
+ }
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i16.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i16.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i16.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i16.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i32.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i32.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i32.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i32.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i64.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i64.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i64.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i64.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i8.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i8.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_i8.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_i8.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u16.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u16.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u16.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u16.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u32.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u32.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u32.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u32.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u64.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u64.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u64.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u64.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u8.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u8.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/ctlz_u8.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/ctlz_u8.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn ctlz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/cttz.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/cttz.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/cttz.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/cttz.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn cttz<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn cttz<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs gcc-17-20260628/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs
*** gcc-17-20260621/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs	Sun Jun 28 22:32:17 2026
***************
*** 7,13 ****
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn cttz_nonzero<T>(x: T) -> u32;
      pub fn abort() -> !;
  }
  
--- 7,13 ----
  pub trait Sized {}
  
  extern "rust-intrinsic" {
!     pub fn cttz_nonzero<T>(x: T) -> T;
      pub fn abort() -> !;
  }
  
diff -Nrcpad gcc-17-20260621/gcc/tree-core.h gcc-17-20260628/gcc/tree-core.h
*** gcc-17-20260621/gcc/tree-core.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-core.h	Sun Jun 28 22:32:17 2026
*************** struct real_value;
*** 34,39 ****
--- 34,40 ----
  struct fixed_value;
  struct ptr_info_def;
  struct die_struct;
+ class irange;
  
  
  /*---------------------------------------------------------------------------
*************** struct die_struct;
*** 151,157 ****
  #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
  #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
  
! enum tree_code {
  #include "all-tree.def"
  MAX_TREE_CODES
  };
--- 152,158 ----
  #define DEFTREECODE(SYM, STRING, TYPE, NARGS)   SYM,
  #define END_OF_BASE_TREE_CODES LAST_AND_UNUSED_TREE_CODE,
  
! enum tree_code : unsigned {
  #include "all-tree.def"
  MAX_TREE_CODES
  };
diff -Nrcpad gcc-17-20260621/gcc/tree-inline.cc gcc-17-20260628/gcc/tree-inline.cc
*** gcc-17-20260621/gcc/tree-inline.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-inline.cc	Sun Jun 28 22:32:17 2026
*************** copy_tree_body_r (tree *tp, int *walk_su
*** 1475,1482 ****
  	      for (int i = 0; i <= 4; i++)
  		walk_tree (&TREE_VEC_ELT (TREE_PURPOSE (t), i),
  			   copy_tree_body_r, id, NULL);
! 	      if (TREE_VEC_ELT (TREE_PURPOSE (t), 5))
! 		remap_block (&TREE_VEC_ELT (TREE_PURPOSE (t), 5), id);
  	      walk_tree (&TREE_VALUE (t), copy_tree_body_r, id, NULL);
  	    }
  	}
--- 1475,1482 ----
  	      for (int i = 0; i <= 4; i++)
  		walk_tree (&TREE_VEC_ELT (TREE_PURPOSE (t), i),
  			   copy_tree_body_r, id, NULL);
! 	      if (OMP_ITERATOR_BLOCK (TREE_PURPOSE (t)))
! 		remap_block (&OMP_ITERATOR_BLOCK (TREE_PURPOSE (t)), id);
  	      walk_tree (&TREE_VALUE (t), copy_tree_body_r, id, NULL);
  	    }
  	}
*************** initialize_inlined_parameters (copy_body
*** 3760,3768 ****
    gcc_assert (fn != current_function_decl);
    if (p)
      {
!       /* No static chain?  Seems like a bug in tree-nested.cc.  */
!       gcc_assert (static_chain);
! 
        setup_one_parameter (id, p, static_chain, fn, bb, &vars);
      }
  
--- 3760,3770 ----
    gcc_assert (fn != current_function_decl);
    if (p)
      {
!       /* Calling a function that requires a static chain directly
! 	 without setting up the static chain has undefined behavior
! 	 at run-time.  */
!       if (!static_chain)
! 	static_chain = null_pointer_node;
        setup_one_parameter (id, p, static_chain, fn, bb, &vars);
      }
  
diff -Nrcpad gcc-17-20260621/gcc/tree-nested.cc gcc-17-20260628/gcc/tree-nested.cc
*** gcc-17-20260621/gcc/tree-nested.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-nested.cc	Sun Jun 28 22:32:17 2026
***************
*** 36,41 ****
--- 36,42 ----
  #include "gimplify.h"
  #include "gimple-iterator.h"
  #include "gimple-walk.h"
+ #include "gimple-fold.h"
  #include "tree-cfg.h"
  #include "explow.h"
  #include "langhooks.h"
*************** convert_tramp_reference_stmt (gimple_stm
*** 2886,2891 ****
--- 2887,2898 ----
      {
      case GIMPLE_CALL:
        {
+ 	tree decl = gimple_call_fndecl (stmt);
+ 	if (decl && fndecl_built_in_p (decl, BUILT_IN_NORMAL)
+ 	    && (DECL_FUNCTION_CODE (decl) == BUILT_IN_CALL_CODE_ADDRESS
+ 		|| DECL_FUNCTION_CODE (decl) == BUILT_IN_CALL_STATIC_CHAIN))
+ 	  break;
+ 
  	/* Only walk call arguments, lest we generate trampolines for
  	   direct calls.  */
  	unsigned long i, nargs = gimple_call_num_args (stmt);
*************** convert_gimple_call (gimple_stmt_iterato
*** 2998,3008 ****
    switch (gimple_code (stmt))
      {
      case GIMPLE_CALL:
-       if (gimple_call_chain (stmt))
- 	break;
        decl = gimple_call_fndecl (stmt);
        if (!decl)
  	break;
        target_context = decl_function_context (decl);
        if (target_context && DECL_STATIC_CHAIN (decl))
  	{
--- 3005,3045 ----
    switch (gimple_code (stmt))
      {
      case GIMPLE_CALL:
        decl = gimple_call_fndecl (stmt);
        if (!decl)
  	break;
+       if (fndecl_built_in_p (decl, BUILT_IN_NORMAL)
+ 	  && (DECL_FUNCTION_CODE (decl) == BUILT_IN_CALL_CODE_ADDRESS
+ 	      || DECL_FUNCTION_CODE (decl) == BUILT_IN_CALL_STATIC_CHAIN))
+ 	{
+ 	  tree d = gimple_call_arg (stmt, 0);
+ 	  if (TREE_CODE (d) != ADDR_EXPR
+ 	      || FUNCTION_DECL != TREE_CODE (TREE_OPERAND (d, 0)))
+ 	    break;
+ 	  tree ret = null_pointer_node;
+ 	  if (DECL_FUNCTION_CODE (decl) == BUILT_IN_CALL_CODE_ADDRESS)
+ 	    {
+ 	      /* Return code pointer.  */
+ 	      ret = build_addr (TREE_OPERAND (d, 0));
+ 	      TREE_NO_TRAMPOLINE (ret) = 1;
+ 	    }
+ 	  else
+ 	    {
+ 	      decl = TREE_OPERAND (d, 0);
+ 	      target_context = decl_function_context (decl);
+ 	      if (target_context && DECL_STATIC_CHAIN (decl))
+ 		{
+ 		  /* Return static chain.  */
+ 		  info->static_chain_added
+ 		    |= (1 << (info->context != target_context));
+ 		  ret = get_static_chain (info, target_context, &wi->gsi);
+ 		}
+ 	    }
+ 	  replace_call_with_value (gsi, ret);
+ 	  break;
+ 	}
+       if (gimple_call_chain (stmt))
+ 	break;
        target_context = decl_function_context (decl);
        if (target_context && DECL_STATIC_CHAIN (decl))
  	{
diff -Nrcpad gcc-17-20260621/gcc/tree-pretty-print.cc gcc-17-20260628/gcc/tree-pretty-print.cc
*** gcc-17-20260621/gcc/tree-pretty-print.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-pretty-print.cc	Sun Jun 28 22:32:17 2026
*************** dump_omp_iterators (pretty_printer *pp,
*** 437,461 ****
      {
        if (it != iter)
  	pp_string (pp, ", ");
!       dump_generic_node (pp, TREE_TYPE (TREE_VEC_ELT (it, 0)), spc, flags,
  			 false);
        pp_space (pp);
!       dump_generic_node (pp, TREE_VEC_ELT (it, 0), spc, flags, false);
        pp_equal (pp);
!       dump_generic_node (pp, TREE_VEC_ELT (it, 1), spc, flags, false);
        pp_colon (pp);
!       dump_generic_node (pp, TREE_VEC_ELT (it, 2), spc, flags, false);
        pp_colon (pp);
!       dump_generic_node (pp, TREE_VEC_ELT (it, 3), spc, flags, false);
      }
!   if (TREE_VEC_LENGTH (iter) > 6)
      {
        pp_string (pp, ", loop_label=");
!       dump_generic_node (pp, TREE_VEC_ELT (iter, 6), spc, flags, false);
        pp_string (pp, ", elems=");
!       dump_generic_node (pp, TREE_VEC_ELT (iter, 7), spc, flags, false);
        pp_string (pp, ", index=");
!       dump_generic_node (pp, TREE_VEC_ELT (iter, 8), spc, flags, false);
      }
    pp_right_paren (pp);
  }
--- 437,462 ----
      {
        if (it != iter)
  	pp_string (pp, ", ");
!       dump_generic_node (pp, TREE_TYPE (OMP_ITERATOR_VAR (it)), spc, flags,
  			 false);
        pp_space (pp);
!       dump_generic_node (pp, OMP_ITERATOR_VAR (it), spc, flags, false);
        pp_equal (pp);
!       dump_generic_node (pp, OMP_ITERATOR_BEGIN (it), spc, flags, false);
        pp_colon (pp);
!       dump_generic_node (pp, OMP_ITERATOR_END (it), spc, flags, false);
        pp_colon (pp);
!       dump_generic_node (pp, OMP_ITERATOR_STEP (it), spc, flags, false);
      }
!   if (OMP_ITERATOR_EXPANDED_P (iter))
      {
        pp_string (pp, ", loop_label=");
!       dump_generic_node (pp, OMP_ITERATOR_LABEL (iter), spc, flags, false);
        pp_string (pp, ", elems=");
!       dump_generic_node (pp, OMP_ITERATOR_ELEMS (iter), spc, flags, false);
        pp_string (pp, ", index=");
!       dump_generic_node (pp, OMP_ITERATOR_INDEX (iter), spc, flags, false);
!       /* The count field is not used yet.  */
      }
    pp_right_paren (pp);
  }
diff -Nrcpad gcc-17-20260621/gcc/tree-ssa-alias.cc gcc-17-20260628/gcc/tree-ssa-alias.cc
*** gcc-17-20260621/gcc/tree-ssa-alias.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-ssa-alias.cc	Sun Jun 28 22:32:17 2026
*************** check_fnspec (gcall *call, ao_ref *ref,
*** 2807,2812 ****
--- 2807,2814 ----
  #undef DEF_SYNC_BUILTIN
        case BUILT_IN_GOMP_ATOMIC_START:
        case BUILT_IN_GOMP_ATOMIC_END:
+       case BUILT_IN_GOMP_REDUCTION_START:
+       case BUILT_IN_GOMP_REDUCTION_END:
        case BUILT_IN_GOMP_BARRIER:
        case BUILT_IN_GOMP_BARRIER_CANCEL:
        case BUILT_IN_GOMP_TASKWAIT:
diff -Nrcpad gcc-17-20260621/gcc/tree-ssa-ifcombine.cc gcc-17-20260628/gcc/tree-ssa-ifcombine.cc
*** gcc-17-20260621/gcc/tree-ssa-ifcombine.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-ssa-ifcombine.cc	Sun Jun 28 22:32:17 2026
*************** along with GCC; see the file COPYING3.
*** 40,45 ****
--- 40,46 ----
  #include "gimplify-me.h"
  #include "tree-cfg.h"
  #include "tree-ssa.h"
+ #include "tree-ssa-ifcombine.h"
  #include "attribs.h"
  #include "asan.h"
  #include "bitmap.h"
*************** known_succ_p (basic_block cond_bb)
*** 95,104 ****
     basic-blocks to make the pattern match.  If SUCCS_ANY, *THEN_BB and *ELSE_BB
     will not be filled in, and they will be found to match even if reversed.  */
  
! static bool
  recognize_if_then_else (basic_block cond_bb,
  			basic_block *then_bb, basic_block *else_bb,
! 			bool succs_any = false)
  {
    edge t, e;
  
--- 96,105 ----
     basic-blocks to make the pattern match.  If SUCCS_ANY, *THEN_BB and *ELSE_BB
     will not be filled in, and they will be found to match even if reversed.  */
  
! bool
  recognize_if_then_else (basic_block cond_bb,
  			basic_block *then_bb, basic_block *else_bb,
! 			bool succs_any)
  {
    edge t, e;
  
*************** can_combine_bbs_with_short_circuit (basi
*** 799,804 ****
--- 800,827 ----
    return false;
  }
  
+ /* Return true if BB guards entry to a loop: a successor edge reaches a loop
+    header BB does not belong to, directly or through a single-successor
+    preheader.  Combining the scalar conditions guarding a loop into a single
+    boolean leaves the number-of-iterations analysis unable to prove the loop
+    runs at least once, pessimizing later loop passes such as ivopts.  */
+ 
+ static bool
+ bb_guards_loop_p (basic_block bb)
+ {
+   edge e;
+   edge_iterator ei;
+   FOR_EACH_EDGE (e, ei, bb->succs)
+     {
+       basic_block h = e->dest;
+       if (single_succ_p (h) && !bb_loop_header_p (h))
+ 	h = single_succ (h);
+       if (bb_loop_header_p (h) && !dominated_by_p (CDI_DOMINATORS, bb, h))
+ 	return true;
+     }
+   return false;
+ }
+ 
  /* If-convert on a and pattern with a common else block.  The inner
     if is specified by its INNER_COND_BB, the outer by OUTER_COND_BB.
     inner_inv, outer_inv indicate whether the conditions are inverted.
*************** ifcombine_ifandif (basic_block inner_con
*** 819,829 ****
    if (!outer_cond)
      return false;
  
!   /* niter analysis does not cope with boolean typed loop exit conditions.
!      Avoid turning an analyzable exit into an unanalyzable one.  */
!   if (inner_cond_bb->loop_father == outer_cond_bb->loop_father
!       && loop_exits_from_bb_p (inner_cond_bb->loop_father, inner_cond_bb)
!       && loop_exits_from_bb_p (outer_cond_bb->loop_father, outer_cond_bb))
      {
        tree outer_type = TREE_TYPE (gimple_cond_lhs (outer_cond));
        tree inner_type = TREE_TYPE (gimple_cond_lhs (inner_cond));
--- 842,854 ----
    if (!outer_cond)
      return false;
  
!   /* niter analysis does not cope with boolean typed loop exit conditions, nor
!      with boolean loop guards.  Avoid turning an analyzable loop exit or guard
!      into an unanalyzable one.  */
!   if ((inner_cond_bb->loop_father == outer_cond_bb->loop_father
!        && loop_exits_from_bb_p (inner_cond_bb->loop_father, inner_cond_bb)
!        && loop_exits_from_bb_p (outer_cond_bb->loop_father, outer_cond_bb))
!       || bb_guards_loop_p (inner_cond_bb))
      {
        tree outer_type = TREE_TYPE (gimple_cond_lhs (outer_cond));
        tree inner_type = TREE_TYPE (gimple_cond_lhs (inner_cond));
*************** tree_ssa_ifcombine_bb_1 (basic_block inn
*** 1142,1148 ****
     if-conversion helper.  We start with BB as the innermost
     worker basic-block.  Returns true if a transformation was done.  */
  
! static bool
  tree_ssa_ifcombine_bb (basic_block inner_cond_bb)
  {
    bool ret = false;
--- 1167,1173 ----
     if-conversion helper.  We start with BB as the innermost
     worker basic-block.  Returns true if a transformation was done.  */
  
! bool
  tree_ssa_ifcombine_bb (basic_block inner_cond_bb)
  {
    bool ret = false;
diff -Nrcpad gcc-17-20260621/gcc/tree-ssa-ifcombine.h gcc-17-20260628/gcc/tree-ssa-ifcombine.h
*** gcc-17-20260621/gcc/tree-ssa-ifcombine.h	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/gcc/tree-ssa-ifcombine.h	Sun Jun 28 22:32:17 2026
***************
*** 0 ****
--- 1,27 ----
+ /* Copyright (C) 2026 Free Software Foundation, Inc.
+ 
+ This file is part of GCC.
+ 
+ GCC is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by the
+ Free Software Foundation; either version 3, or (at your option) any
+ later version.
+ 
+ GCC is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ for more details.
+ 
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3.  If not see
+ <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef GCC_TREE_SSA_IFCOMBINE_H
+ #define GCC_TREE_SSA_IFCOMBINE_H
+ 
+ bool recognize_if_then_else (basic_block, basic_block *, basic_block *,
+ 			     bool succs_any = false);
+ 
+ bool tree_ssa_ifcombine_bb (basic_block);
+ 
+ #endif
diff -Nrcpad gcc-17-20260621/gcc/tree-ssa-phiopt.cc gcc-17-20260628/gcc/tree-ssa-phiopt.cc
*** gcc-17-20260621/gcc/tree-ssa-phiopt.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-ssa-phiopt.cc	Sun Jun 28 22:32:17 2026
*************** cond_store_replacement (basic_block midd
*** 3110,3117 ****
       whose value is not available readily, which we want to avoid.  */
    if (nontrap->contains (lhs))
      {
!       /* Make sure there is no load in the middle bb,
! 	 this invalidates nontrap.
  	 FIXME: this is over conserative, this check could be made to
  	 allow loads unrelated to lhs.  */
        tree vuse = gimple_vuse (assign);
--- 3110,3118 ----
       whose value is not available readily, which we want to avoid.  */
    if (nontrap->contains (lhs))
      {
!       /* For local non-addressable variables, a load in the same bb
! 	 (though before) will cause the lhs to be in the nontrap hashset.
! 	 So need to check if there are no other loads in the middle bb.
  	 FIXME: this is over conserative, this check could be made to
  	 allow loads unrelated to lhs.  */
        tree vuse = gimple_vuse (assign);
*************** cond_store_replacement (basic_block midd
*** 3167,3175 ****
--- 3168,3179 ----
  
    /* 2) Insert a load from the memory of the store to the temporary
          on the edge which did not contain the store.  */
+   gphi *vphi = get_virtual_phi (join_bb);
    name = make_temp_ssa_name (TREE_TYPE (lhs), NULL, "cstore");
    new_stmt = gimple_build_assign (name, lhs);
    gimple_set_location (new_stmt, locus);
+   /* Set the vuse for the new load.  */
+   gimple_set_vuse (new_stmt, gimple_phi_arg_def (vphi, e1->dest_idx));
    lhs = unshare_expr (lhs);
    {
      /* Set the no-warning bit on the rhs of the load to avoid uninit
*************** cond_store_replacement (basic_block midd
*** 3189,3203 ****
  
    new_stmt = gimple_build_assign (lhs, gimple_phi_result (newphi));
  
    /* 4) Insert that PHI node.  */
    gsi = gsi_after_labels (join_bb);
!   if (gsi_end_p (gsi))
!     {
!       gsi = gsi_last_bb (join_bb);
!       gsi_insert_after (&gsi, new_stmt, GSI_NEW_STMT);
!     }
!   else
!     gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
  
    if (dump_file && (dump_flags & TDF_DETAILS))
      {
--- 3193,3210 ----
  
    new_stmt = gimple_build_assign (lhs, gimple_phi_result (newphi));
  
+   /* Update the vdef for the new store statement. */
+   tree newvphilhs = make_ssa_name (gimple_vop (cfun));
+   tree vdef = gimple_phi_result (vphi);
+   gimple_set_vuse (new_stmt, newvphilhs);
+   gimple_set_vdef (new_stmt, vdef);
+   gimple_phi_set_result (vphi, newvphilhs);
+   SSA_NAME_DEF_STMT (vdef) = new_stmt;
+   update_stmt (vphi);
+ 
    /* 4) Insert that PHI node.  */
    gsi = gsi_after_labels (join_bb);
!   gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
  
    if (dump_file && (dump_flags & TDF_DETAILS))
      {
*************** cond_if_else_store_replacement_1 (basic_
*** 3337,3349 ****
  
    /* 3) Insert that new store.  */
    gsi = gsi_after_labels (join_bb);
!   if (gsi_end_p (gsi))
!     {
!       gsi = gsi_last_bb (join_bb);
!       gsi_insert_after (&gsi, new_stmt, GSI_NEW_STMT);
!     }
!   else
!     gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
  
    statistics_counter_event (cfun, "if-then-else store replacement", 1);
  
--- 3344,3350 ----
  
    /* 3) Insert that new store.  */
    gsi = gsi_after_labels (join_bb);
!   gsi_insert_before (&gsi, new_stmt, GSI_NEW_STMT);
  
    statistics_counter_event (cfun, "if-then-else store replacement", 1);
  
*************** factor_out_conditional_load (edge e0, ed
*** 3712,3719 ****
  	  || gimple_vuse (load1) != gimple_phi_arg_def (vphi, e1->dest_idx))
  	return false;
      }
!   else
!     gcc_assert (gimple_vuse (load0) == gimple_vuse (load1));
  
    tree ref0 = gimple_assign_rhs1 (load0);
    tree ref1 = gimple_assign_rhs1 (load1);
--- 3713,3723 ----
  	  || gimple_vuse (load1) != gimple_phi_arg_def (vphi, e1->dest_idx))
  	return false;
      }
!   /* Sometimes due to not removing dead statements,
!      a virtual phi does not show up going into an infinite loop
!      so just reject that case.  */
!   else if (gimple_vuse (load0) != gimple_vuse (load1))
!     return false;
  
    tree ref0 = gimple_assign_rhs1 (load0);
    tree ref1 = gimple_assign_rhs1 (load1);
*************** pass_cselim::execute (function *)
*** 4639,4648 ****
    /* If the CFG has changed, we should cleanup the CFG.  */
    if (cfgchanged)
      {
-       /* In cond-store replacement we have added some loads on edges
- 	  and new VOPS (as we moved the store, and created a load).  */
        gsi_commit_edge_inserts ();
!       todo = TODO_cleanup_cfg | TODO_update_ssa_only_virtuals;
      }
    scev_finalize ();
    loop_optimizer_finalize ();
--- 4643,4650 ----
    /* If the CFG has changed, we should cleanup the CFG.  */
    if (cfgchanged)
      {
        gsi_commit_edge_inserts ();
!       todo = TODO_cleanup_cfg;
      }
    scev_finalize ();
    loop_optimizer_finalize ();
diff -Nrcpad gcc-17-20260621/gcc/tree-ssa-tail-merge.cc gcc-17-20260628/gcc/tree-ssa-tail-merge.cc
*** gcc-17-20260621/gcc/tree-ssa-tail-merge.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-ssa-tail-merge.cc	Sun Jun 28 22:32:17 2026
*************** along with GCC; see the file COPYING3.
*** 202,210 ****
--- 202,212 ----
  #include "tree-cfg.h"
  #include "tree-into-ssa.h"
  #include "tree-ssa-sccvn.h"
+ #include "tree-ssa-ifcombine.h"
  #include "cfgloop.h"
  #include "tree-eh.h"
  #include "tree-cfgcleanup.h"
+ #include "tree-ssa.h"
  
  const int ignore_edge_flags = EDGE_DFS_BACK | EDGE_EXECUTABLE;
  
*************** replace_block_by (basic_block bb1, basic
*** 1707,1712 ****
--- 1709,1716 ----
  
  static bitmap update_bbs;
  
+ static bitmap ifcombine_candidate_bbs;
+ 
  /* For each cluster in all_clusters, merge all cluster->bbs.  Returns
     number of bbs removed.  */
  
*************** apply_clusters (void)
*** 1735,1740 ****
--- 1739,1769 ----
  	  bitmap_clear_bit (update_bbs, bb1->index);
  
  	  replace_block_by (bb1, bb2);
+ 
+ 	  basic_block imm_dominator
+ 	    = get_immediate_dominator (CDI_DOMINATORS, bb2);
+ 
+ 	  /* Find conditions in if-statements that lead to bb2.  */
+ 	  edge e;
+ 	  edge_iterator ei;
+ 	  FOR_EACH_EDGE (e, ei, bb2->preds)
+ 	    {
+ 	      /* The immediate dominator's condition cannot be combined; skip it
+ 		 before the more expensive recognize_if_then_else check.  */
+ 	      if (e->src == imm_dominator)
+ 		continue;
+ 
+ 	      basic_block then_tmp = NULL;
+ 	      basic_block else_tmp = NULL;
+ 	      if (recognize_if_then_else (e->src, &bb2, &else_tmp)
+ 		  || recognize_if_then_else (e->src, &then_tmp, &bb2))
+ 		{
+ 		  /* A recognized if-then-else always ends in a gcond.  */
+ 		  gcc_assert (safe_dyn_cast <gcond *> (*gsi_last_bb (e->src)));
+ 		  bitmap_set_bit (ifcombine_candidate_bbs, e->src->index);
+ 		}
+ 	    }
+ 
  	  nr_bbs_removed++;
  	}
      }
*************** tail_merge_optimize (bool need_crit_edge
*** 1807,1812 ****
--- 1836,1842 ----
    bool loop_entered = false;
    int iteration_nr = 0;
    int max_iterations = param_max_tail_merge_iterations;
+   unsigned int todo = 0;
  
    if (!flag_tree_tail_merge
        || max_iterations == 0)
*************** tail_merge_optimize (bool need_crit_edge
*** 1833,1838 ****
--- 1863,1869 ----
  	  loop_entered = true;
  	  alloc_cluster_vectors ();
  	  update_bbs = BITMAP_ALLOC (NULL);
+ 	  ifcombine_candidate_bbs = BITMAP_ALLOC (NULL);
  	}
        else
  	reset_cluster_vectors ();
*************** tail_merge_optimize (bool need_crit_edge
*** 1866,1875 ****
  
    if (nr_bbs_removed_total > 0)
      {
        if (MAY_HAVE_DEBUG_BIND_STMTS)
  	{
! 	  calculate_dominance_info (CDI_DOMINATORS);
! 	  update_debug_stmts ();
  	}
  
        if (dump_file && (dump_flags & TDF_DETAILS))
--- 1897,1926 ----
  
    if (nr_bbs_removed_total > 0)
      {
+       bool need_dominance
+ 	= MAY_HAVE_DEBUG_BIND_STMTS
+ 	  || !bitmap_empty_p (ifcombine_candidate_bbs);
+ 
+       if (need_dominance)
+ 	calculate_dominance_info (CDI_DOMINATORS);
+ 
        if (MAY_HAVE_DEBUG_BIND_STMTS)
+ 	update_debug_stmts ();
+ 
+       unsigned int i;
+       bitmap_iterator bi;
+       bool cfg_changed = false;
+       /* Try to combine conditions of blocks that were made to branch to the
+ 	 same successor by tail merging.  */
+       if (!bitmap_empty_p (ifcombine_candidate_bbs))
  	{
! 	  mark_ssa_maybe_undefs ();
! 	  EXECUTE_IF_SET_IN_BITMAP (ifcombine_candidate_bbs, 0, i, bi)
! 	    {
! 	      basic_block bb = BASIC_BLOCK_FOR_FN (cfun, i);
! 	      if (bb)
! 		cfg_changed |= tree_ssa_ifcombine_bb (bb);
! 	    }
  	}
  
        if (dump_file && (dump_flags & TDF_DETAILS))
*************** tail_merge_optimize (bool need_crit_edge
*** 1879,1884 ****
--- 1930,1937 ----
  	}
  
        mark_virtual_operands_for_renaming (cfun);
+ 
+       todo |= cfg_changed ? TODO_cleanup_cfg : 0;
      }
  
    delete_worklist ();
*************** tail_merge_optimize (bool need_crit_edge
*** 1886,1894 ****
      {
        delete_cluster_vectors ();
        BITMAP_FREE (update_bbs);
      }
  
    timevar_pop (TV_TREE_TAIL_MERGE);
  
!   return 0;
  }
--- 1939,1948 ----
      {
        delete_cluster_vectors ();
        BITMAP_FREE (update_bbs);
+       BITMAP_FREE (ifcombine_candidate_bbs);
      }
  
    timevar_pop (TV_TREE_TAIL_MERGE);
  
!   return todo;
  }
diff -Nrcpad gcc-17-20260621/gcc/tree-ssa-uninit.cc gcc-17-20260628/gcc/tree-ssa-uninit.cc
*** gcc-17-20260621/gcc/tree-ssa-uninit.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-ssa-uninit.cc	Sun Jun 28 22:32:17 2026
*************** maybe_warn_operand (ao_ref &ref, gimple
*** 758,763 ****
--- 758,790 ----
    if (is_empty_type (rhstype))
      return NULL_TREE;
  
+   /* Avoid diagnosing read-modify-write cycles that in the end only
+      sets a subset of bits to zero or one.
+      ???  Note that further reads will then appear (partly) initialized
+      and will not be diagnosed.  */
+   gimple *use_stmt;
+   if (gimple_assign_load_p (stmt)
+       && TREE_CODE (lhs) == SSA_NAME
+       && single_imm_use (lhs, &luse_p, &use_stmt))
+     {
+       gassign *use_ass = dyn_cast <gassign *> (use_stmt);
+       for (int i = 0; i < 4; ++i)
+ 	if (use_ass
+ 	    && (gimple_assign_rhs_code (use_ass) == BIT_AND_EXPR
+ 		|| gimple_assign_rhs_code (use_ass) == BIT_IOR_EXPR
+ 		|| gimple_assign_rhs_code (use_ass) == VIEW_CONVERT_EXPR)
+ 	    && single_imm_use (gimple_assign_lhs (use_ass), &luse_p,
+ 			       &use_stmt))
+ 	  use_ass = dyn_cast <gassign *> (use_stmt);
+ 	else
+ 	  break;
+       if (use_ass
+ 	  && gimple_vdef (use_ass)
+ 	  && operand_equal_p (gimple_assign_rhs1 (stmt),
+ 			      gimple_assign_lhs (use_ass)))
+ 	return NULL_TREE;
+     }
+ 
    bool warned = false;
    /* We didn't find any may-defs so on all paths either
       reached function entry or a killing clobber.  */
diff -Nrcpad gcc-17-20260621/gcc/tree-vect-generic.cc gcc-17-20260628/gcc/tree-vect-generic.cc
*** gcc-17-20260621/gcc/tree-vect-generic.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-vect-generic.cc	Sun Jun 28 22:32:17 2026
*************** lower_vec_perm (gimple_stmt_iterator *gs
*** 1640,1715 ****
  	mask = gimple_assign_rhs1 (def_stmt);
      }
  
-   vec_perm_builder sel_int;
  
    if (TREE_CODE (mask) == VECTOR_CST
!       && tree_to_vec_perm_builder (&sel_int, mask))
      {
-       vec_perm_indices indices (sel_int, 2, in_elements);
        machine_mode vmode = TYPE_MODE (vect_type);
        tree lhs_type = TREE_TYPE (gimple_assign_lhs (stmt));
        machine_mode lhs_mode = TYPE_MODE (lhs_type);
!       if (can_vec_perm_const_p (lhs_mode, vmode, indices))
  	{
  	  gimple_assign_set_rhs3 (stmt, mask);
  	  update_stmt (stmt);
  	  return;
  	}
-       /* Also detect vec_shr pattern - VEC_PERM_EXPR with zero
- 	 vector as VEC1 and a right element shift MASK.  */
-       if (can_implement_p (vec_shr_optab, TYPE_MODE (vect_type))
- 	  && TREE_CODE (vec1) == VECTOR_CST
- 	  && initializer_zerop (vec1)
- 	  && maybe_ne (indices[0], 0)
- 	  && known_lt (poly_uint64 (indices[0]), elements))
- 	{
- 	  bool ok_p = indices.series_p (0, 1, indices[0], 1);
- 	  if (!ok_p)
- 	    {
- 	      for (i = 1; i < elements; ++i)
- 		{
- 		  poly_uint64 actual = indices[i];
- 		  poly_uint64 expected = i + indices[0];
- 		  /* Indices into the second vector are all equivalent.  */
- 		  if (maybe_lt (actual, elements)
- 		      ? maybe_ne (actual, expected)
- 		      : maybe_lt (expected, elements))
- 		    break;
- 		}
- 	      ok_p = i == elements;
- 	    }
- 	  if (ok_p)
- 	    {
- 	      gimple_assign_set_rhs3 (stmt, mask);
- 	      update_stmt (stmt);
- 	      return;
- 	    }
- 	}
-       /* And similarly vec_shl pattern.  */
-       if (can_implement_p (vec_shl_optab, TYPE_MODE (vect_type))
- 	  && TREE_CODE (vec0) == VECTOR_CST
- 	  && initializer_zerop (vec0))
- 	{
- 	  unsigned int first = 0;
- 	  for (i = 0; i < elements; ++i)
- 	    if (known_eq (poly_uint64 (indices[i]), elements))
- 	      {
- 		if (i == 0 || first)
- 		  break;
- 		first = i;
- 	      }
- 	    else if (first
- 		     ? maybe_ne (poly_uint64 (indices[i]),
- 					      elements + i - first)
- 		     : maybe_ge (poly_uint64 (indices[i]), elements))
- 	      break;
- 	  if (first && i == elements)
- 	    {
- 	      gimple_assign_set_rhs3 (stmt, mask);
- 	      update_stmt (stmt);
- 	      return;
- 	    }
- 	}
      }
    else if (can_vec_perm_var_p (TYPE_MODE (vect_type)))
      return;
--- 1640,1659 ----
  	mask = gimple_assign_rhs1 (def_stmt);
      }
  
  
+   vec_perm_indices indices;
    if (TREE_CODE (mask) == VECTOR_CST
!       && tree_to_vec_perm_indices (&indices, vec0, vec1, mask))
      {
        machine_mode vmode = TYPE_MODE (vect_type);
        tree lhs_type = TREE_TYPE (gimple_assign_lhs (stmt));
        machine_mode lhs_mode = TYPE_MODE (lhs_type);
!       if (can_vec_perm_const_p (lhs_mode, vmode, indices, true))
  	{
  	  gimple_assign_set_rhs3 (stmt, mask);
  	  update_stmt (stmt);
  	  return;
  	}
      }
    else if (can_vec_perm_var_p (TYPE_MODE (vect_type)))
      return;
diff -Nrcpad gcc-17-20260621/gcc/tree-vect-patterns.cc gcc-17-20260628/gcc/tree-vect-patterns.cc
*** gcc-17-20260621/gcc/tree-vect-patterns.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-vect-patterns.cc	Sun Jun 28 22:32:17 2026
*************** vect_recog_divmod_pattern (vec_info *vin
*** 5438,5452 ****
        int pow = wi::exact_log2 (wcst + 1);
        if (pow == prec / 2)
  	{
- 	  gimple *stmt = SSA_NAME_DEF_STMT (oprnd0);
- 
- 	  gimple_ranger ranger;
- 	  int_range_max r;
- 
  	  /* Check that no overflow will occur.  If we don't have range
  	     information we can't perform the optimization.  */
  
! 	  if (ranger.range_of_expr (r, oprnd0, stmt) && !r.undefined_p ())
  	    {
  	      wide_int max = r.upper_bound ();
  	      wide_int one = wi::shwi (1, prec);
--- 5438,5449 ----
        int pow = wi::exact_log2 (wcst + 1);
        if (pow == prec / 2)
  	{
  	  /* Check that no overflow will occur.  If we don't have range
  	     information we can't perform the optimization.  */
  
! 	  int_range_max r;
! 	  if (get_range_query (cfun)->range_of_expr (r, oprnd0, last_stmt)
! 	      && !r.undefined_p ())
  	    {
  	      wide_int max = r.upper_bound ();
  	      wide_int one = wi::shwi (1, prec);
diff -Nrcpad gcc-17-20260621/gcc/tree-vect-stmts.cc gcc-17-20260628/gcc/tree-vect-stmts.cc
*** gcc-17-20260621/gcc/tree-vect-stmts.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree-vect-stmts.cc	Sun Jun 28 22:32:17 2026
*************** vect_use_grouped_gather (dr_vec_info *dr
*** 1750,1756 ****
    tree tmp;
    unsigned int pieces;
    if (!can_div_trunc_p (TYPE_VECTOR_SUBPARTS (vectype), nelts, &pieces)
!       || !pieces)
      return false;
  
    *pun_vectype = vector_vector_composition_type (vectype, pieces, &tmp, true);
--- 1750,1756 ----
    tree tmp;
    unsigned int pieces;
    if (!can_div_trunc_p (TYPE_VECTOR_SUBPARTS (vectype), nelts, &pieces)
!       || pieces <= 1)
      return false;
  
    *pun_vectype = vector_vector_composition_type (vectype, pieces, &tmp, true);
diff -Nrcpad gcc-17-20260621/gcc/tree.h gcc-17-20260628/gcc/tree.h
*** gcc-17-20260621/gcc/tree.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/tree.h	Sun Jun 28 22:32:17 2026
*************** class auto_suppress_location_wrappers
*** 1699,1704 ****
--- 1699,1722 ----
  					      OMP_CLAUSE_FROM,		\
  					      OMP_CLAUSE_MAP), 2)
  
+ /* An iterator modifier on a clause is represented as a vector.
+    Unexpanded iterators produced by the front-end parsers have 6
+    elements; after expansion, they have 10.  See also the
+    make_omp_iterator and make_expanded_omp_iterator constructors
+    below.  */
+ #define OMP_ITERATOR_VAR(NODE)		TREE_VEC_ELT (NODE, 0)
+ #define OMP_ITERATOR_BEGIN(NODE)	TREE_VEC_ELT (NODE, 1)
+ #define OMP_ITERATOR_END(NODE)		TREE_VEC_ELT (NODE, 2)
+ #define OMP_ITERATOR_STEP(NODE)	TREE_VEC_ELT (NODE, 3)
+ #define OMP_ITERATOR_ORIG_STEP(NODE)	TREE_VEC_ELT (NODE, 4)
+ #define OMP_ITERATOR_BLOCK(NODE)	TREE_VEC_ELT (NODE, 5)
+ #define OMP_ITERATOR_LABEL(NODE)	TREE_VEC_ELT (NODE, 6)
+ #define OMP_ITERATOR_INDEX(NODE)	TREE_VEC_ELT (NODE, 7)
+ #define OMP_ITERATOR_ELEMS(NODE)	TREE_VEC_ELT (NODE, 8)
+ #define OMP_ITERATOR_COUNT(NODE)	TREE_VEC_ELT (NODE, 9)
+ 
+ #define OMP_ITERATOR_EXPANDED_P(NODE)	(TREE_VEC_LENGTH (NODE) > 6)
+ 
  /* True on OMP_FOR and other OpenMP/OpenACC looping constructs if the loop nest
     is non-rectangular.  */
  #define OMP_FOR_NON_RECTANGULAR(NODE) \
*************** extern tree unshare_expr_without_locatio
*** 7240,7243 ****
--- 7258,7275 ----
  
  extern void copy_if_shared (tree *, void * = NULL);
  
+ /* Make a vector to hold an unexpanded omp iterator vector.  */
+ inline tree
+ make_omp_iterator (void)
+ {
+   return make_tree_vec (6);
+ }
+ 
+ /* Make a vector to hold an expanded omp iterator vector.  */
+ inline tree
+ make_expanded_omp_iterator (void)
+ {
+   return make_tree_vec (10);
+ }
+ 
  #endif  /* GCC_TREE_H  */
diff -Nrcpad gcc-17-20260621/gcc/value-range.cc gcc-17-20260628/gcc/value-range.cc
*** gcc-17-20260621/gcc/value-range.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/value-range.cc	Sun Jun 28 22:32:17 2026
*************** prange::set_pt (tree expr, bool points_t
*** 539,544 ****
--- 539,548 ----
    m_pt = NULL_TREE;
    m_points_to_p = false;
  
+   // A zero range means no points-to info.
+   if (zero_p ())
+     return;
+ 
    // No points to initially may make this VARYING.
    if (varying_compatible_p ())
      set_varying (type ());
*************** prange::intersect (const vrange &v)
*** 825,830 ****
--- 829,838 ----
  	set_pt (r);
      }
  
+   //  If this evolves to zero, clear all points-to info.
+   if (zero_p () && !pt_unknown_p ())
+     set_pt_unknown ();
+ 
    if (varying_compatible_p ())
      {
        set_varying (type ());
*************** prange::verify_range () const
*** 931,936 ****
--- 939,950 ----
      }
    gcc_checking_assert (!varying_compatible_p ());
    gcc_checking_assert (m_kind == VR_RANGE);
+   if (!pt_unknown_p ())
+     {
+       gcc_checking_assert (!varying_p ());
+       gcc_checking_assert (!undefined_p ());
+       gcc_checking_assert (!zero_p ());
+     }
  }
  
  void
diff -Nrcpad gcc-17-20260621/gcc/value-range.h gcc-17-20260628/gcc/value-range.h
*** gcc-17-20260621/gcc/value-range.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/value-range.h	Sun Jun 28 22:32:17 2026
*************** inline bool
*** 1429,1436 ****
  prange::zero_p () const
  {
    bool ret = m_kind == VR_RANGE && m_min == 0 && m_max == 0;
-   // if zero_p is true, there should be no points to info.
-   gcc_checking_assert (!ret || pt_unknown_p ());
    return ret;
  }
  
--- 1429,1434 ----
*************** prange::fits_p (const vrange &) const
*** 1486,1491 ****
--- 1484,1493 ----
  inline void
  prange::set_pt (const prange &r)
  {
+   // Do not set points-to info if this is zero or undefined.
+   if (!r.pt_unknown_p () && (undefined_p () || zero_p()))
+     return;
+ 
    m_pt = r.m_pt;
    m_points_to_p = r.m_points_to_p;
  
diff -Nrcpad gcc-17-20260621/gcc/vec-perm-indices.cc gcc-17-20260628/gcc/vec-perm-indices.cc
*** gcc-17-20260621/gcc/vec-perm-indices.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/vec-perm-indices.cc	Sun Jun 28 22:32:17 2026
*************** along with GCC; see the file COPYING3.
*** 31,36 ****
--- 31,37 ----
  #include "selftest.h"
  #include "rtx-vector-builder.h"
  
+ 
  /* Switch to a new permutation vector that selects between NINPUTS vector
     inputs that have NELTS_PER_INPUT elements each.  Take the elements of the
     new permutation vector from ELEMENTS, clamping each one to be in range.  */
*************** along with GCC; see the file COPYING3.
*** 38,47 ****
--- 39,52 ----
  void
  vec_perm_indices::new_vector (const vec_perm_builder &elements,
  			      unsigned int ninputs,
+ 			      bool input0_bitwise_zero_p,
+ 			      bool input1_bitwise_zero_p,
  			      poly_uint64 nelts_per_input)
  {
    m_ninputs = ninputs;
    m_nelts_per_input = nelts_per_input;
+   m_input0_bitwise_zero_p = input0_bitwise_zero_p;
+   m_input1_bitwise_zero_p = input1_bitwise_zero_p;
    /* If the vector has a constant number of elements, expand the
       encoding and clamp each element.  E.g. { 0, 2, 4, ... } might
       wrap halfway if there is only one vector input, and we want
*************** vec_perm_indices::new_expanded_vector (c
*** 87,92 ****
--- 92,99 ----
  				       unsigned int factor)
  {
    m_ninputs = orig.m_ninputs;
+   m_input0_bitwise_zero_p = orig.m_input0_bitwise_zero_p;
+   m_input1_bitwise_zero_p = orig.m_input1_bitwise_zero_p;
    m_nelts_per_input = orig.m_nelts_per_input * factor;
    m_encoding.new_vector (orig.m_encoding.full_nelts () * factor,
  			 orig.m_encoding.npatterns () * factor,
*************** tree_to_vec_perm_builder (vec_perm_build
*** 301,306 ****
--- 308,331 ----
    return true;
  }
  
+ /* Try to read the contents of VECTOR_CST PERM_CST as a constant permutation
+    vector permuting OP0 and OP1.  Return true and populate INDICES on success,
+    otherwise return false without modifying INDICES.  */
+ 
+ bool
+ tree_to_vec_perm_indices (vec_perm_indices *indices, tree op0, tree op1,
+ 			  tree perm_cst)
+ {
+   vec_perm_builder builder;
+   if (!tree_to_vec_perm_builder (&builder, perm_cst))
+     return false;
+   indices->new_vector (builder, op0 == op1 ? 1 : 2,
+ 		       initializer_zerop (op0), initializer_zerop (op1),
+ 		       TYPE_VECTOR_SUBPARTS (TREE_TYPE (op0)));
+   return true;
+ }
+ 
+ 
  /* Return a VECTOR_CST of type TYPE for the permutation vector in INDICES.  */
  
  tree
diff -Nrcpad gcc-17-20260621/gcc/vec-perm-indices.h gcc-17-20260628/gcc/vec-perm-indices.h
*** gcc-17-20260621/gcc/vec-perm-indices.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/gcc/vec-perm-indices.h	Sun Jun 28 22:32:17 2026
*************** public:
*** 55,61 ****
    vec_perm_indices ();
    vec_perm_indices (const vec_perm_builder &, unsigned int, poly_uint64);
  
!   void new_vector (const vec_perm_builder &, unsigned int, poly_uint64);
    void new_expanded_vector (const vec_perm_indices &, unsigned int);
    bool new_shrunk_vector (const vec_perm_indices &, unsigned int);
    void rotate_inputs (int delta);
--- 55,66 ----
    vec_perm_indices ();
    vec_perm_indices (const vec_perm_builder &, unsigned int, poly_uint64);
  
!   void new_vector (const vec_perm_builder &b, unsigned int ni, poly_uint64 ne)
!   {
!     new_vector (b, ni, false, false, ne);
!   }
!   void new_vector (const vec_perm_builder &, unsigned int, bool, bool,
! 		   poly_uint64);
    void new_expanded_vector (const vec_perm_indices &, unsigned int);
    bool new_shrunk_vector (const vec_perm_indices &, unsigned int);
    void rotate_inputs (int delta);
*************** public:
*** 70,75 ****
--- 75,87 ----
    /* Return the number of input vectors being permuted.  */
    unsigned int ninputs () const { return m_ninputs; }
  
+   /* Return whether the input N is known bitwise zero.  */
+   bool input_bitwise_zero_p (unsigned n) const
+   {
+     return (n == 0 ? m_input0_bitwise_zero_p
+ 	    : (n == 1 ? m_input1_bitwise_zero_p : false));
+   }
+ 
    /* Return the number of elements in each input vector.  */
    poly_uint64 nelts_per_input () const { return m_nelts_per_input; }
  
*************** private:
*** 87,102 ****
--- 99,119 ----
  
    vec_perm_builder m_encoding;
    unsigned int m_ninputs;
+   bool m_input0_bitwise_zero_p;
+   bool m_input1_bitwise_zero_p;
    poly_uint64 m_nelts_per_input;
  };
  
  bool tree_to_vec_perm_builder (vec_perm_builder *, tree);
+ bool tree_to_vec_perm_indices (vec_perm_indices *, tree, tree, tree);
  tree vec_perm_indices_to_tree (tree, const vec_perm_indices &);
  rtx vec_perm_indices_to_rtx (machine_mode, const vec_perm_indices &);
  
  inline
  vec_perm_indices::vec_perm_indices ()
    : m_ninputs (0),
+     m_input0_bitwise_zero_p (false),
+     m_input1_bitwise_zero_p (false),
      m_nelts_per_input (0)
  {
  }
*************** vec_perm_indices::vec_perm_indices (cons
*** 110,116 ****
  				    unsigned int ninputs,
  				    poly_uint64 nelts_per_input)
  {
!   new_vector (elements, ninputs, nelts_per_input);
  }
  
  /* Return the canonical value for permutation vector element ELT,
--- 127,133 ----
  				    unsigned int ninputs,
  				    poly_uint64 nelts_per_input)
  {
!   new_vector (elements, ninputs, false, false, nelts_per_input);
  }
  
  /* Return the canonical value for permutation vector element ELT,
diff -Nrcpad gcc-17-20260621/include/ChangeLog gcc-17-20260628/include/ChangeLog
*** gcc-17-20260621/include/ChangeLog	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/include/ChangeLog	Sun Jun 28 22:32:17 2026
***************
*** 1,3 ****
--- 1,9 ----
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* gomp-constants.h (GOMP_BARRIER_IMPLICIT_PARALLEL): New macro.
+ 	(GOMP_BARRIER_IMPLICIT_WORKSHARE): New macro.
+ 	(GOMP_BARRIER_EXPLICIT): New macro.
+ 
  2026-06-19  Tobias Burnus  <tburnus@baylibre.com>
  
  	PR libgomp/125877
diff -Nrcpad gcc-17-20260621/include/gomp-constants.h gcc-17-20260628/include/gomp-constants.h
*** gcc-17-20260621/include/gomp-constants.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/include/gomp-constants.h	Sun Jun 28 22:32:17 2026
*************** enum gomp_map_kind
*** 435,438 ****
--- 435,444 ----
  /* Identifiers of device-specific target arguments.  */
  #define GOMP_TARGET_ARG_HSA_KERNEL_ATTRIBUTES	(1 << 8)
  
+ /* GOMP_barrier{,_cancel}_ext argument.
+    TODO turn this into an enum?  */
+ #define GOMP_BARRIER_IMPLICIT_PARALLEL 0
+ #define GOMP_BARRIER_IMPLICIT_WORKSHARE 1
+ #define GOMP_BARRIER_EXPLICIT 2
+ 
  #endif
diff -Nrcpad gcc-17-20260621/libbacktrace/ChangeLog gcc-17-20260628/libbacktrace/ChangeLog
*** gcc-17-20260621/libbacktrace/ChangeLog	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libbacktrace/ChangeLog	Sun Jun 28 22:32:17 2026
***************
*** 1,3 ****
--- 1,15 ----
+ 2026-06-27  Ian Lance Taylor  <iant@golang.org>
+ 
+ 	* elf.c (elf_zstd_unpack_seq_decode): Set table field for RLE
+ 	sequence.
+ 	* zstdtest.c (tests): Add rle-sequence-tables test.
+ 
+ 2026-06-27  Ian Lance Taylor  <iant@golang.org>
+ 
+ 	* elf.c (elf_zstd_decompress_frame): Support a compressed block
+ 	that does not set the single segment flag.
+ 	* zstdtest.c (tests): Add tests without single segment.
+ 
  2026-06-02  Ian Lance Taylor  <iant@golang.org>
  
  	* elf.c (elf_zstd_decompress_frame): Support a compressed block
diff -Nrcpad gcc-17-20260621/libbacktrace/elf.c gcc-17-20260628/libbacktrace/elf.c
*** gcc-17-20260621/libbacktrace/elf.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libbacktrace/elf.c	Sun Jun 28 22:32:17 2026
*************** elf_zstd_unpack_seq_decode (int mode,
*** 4302,4307 ****
--- 4302,4308 ----
  	decode->table_bits = 0;
  	if (!conv (&entry, 0, table))
  	  return 0;
+ 	decode->table = table;
        }
        break;
  
*************** elf_zstd_decompress_frame (const unsigne
*** 4364,4369 ****
--- 4365,4371 ----
    uint32_t repeated_offset3;
    uint16_t *scratch;
    unsigned char hdr;
+   int single_segment;
    int has_checksum;
    uint64_t content_size;
    int last_block;
*************** elf_zstd_decompress_frame (const unsigne
*** 4422,4432 ****
  
    hdr = *pin++;
  
!   /* We expect a single frame.  */
!   if (unlikely ((hdr & (1 << 5)) == 0))
      {
!       elf_uncompress_failed ();
!       return 0;
      }
    /* Reserved bit must be zero.  */
    if (unlikely ((hdr & (1 << 3)) != 0))
--- 4424,4440 ----
  
    hdr = *pin++;
  
!   single_segment = (hdr & (1 << 5)) != 0;
!   if (!single_segment)
      {
!       if (unlikely (pin >= pinend))
! 	{
! 	  elf_uncompress_failed ();
! 	  return 0;
! 	}
!       /* We have all the data in memory, so we can ignore the window
! 	 size.  */
!       pin++;
      }
    /* Reserved bit must be zero.  */
    if (unlikely ((hdr & (1 << 3)) != 0))
*************** elf_zstd_decompress_frame (const unsigne
*** 4444,4455 ****
    switch (hdr >> 6)
      {
      case 0:
!       if (unlikely (pin >= pinend))
  	{
! 	  elf_uncompress_failed ();
! 	  return 0;
  	}
-       content_size = (uint64_t) *pin++;
        break;
      case 1:
        if (unlikely (pin + 1 >= pinend))
--- 4452,4472 ----
    switch (hdr >> 6)
      {
      case 0:
!       if (!single_segment)
  	{
! 	  /* The content_size is not specified, but we know it from the
! 	     section header.  */
! 	  content_size = (uint64_t) sout;
! 	}
!       else
! 	{
! 	  if (unlikely (pin >= pinend))
! 	    {
! 	      elf_uncompress_failed ();
! 	      return 0;
! 	    }
! 	  content_size = (uint64_t) *pin++;
  	}
        break;
      case 1:
        if (unlikely (pin + 1 >= pinend))
diff -Nrcpad gcc-17-20260621/libbacktrace/zstdtest.c gcc-17-20260628/libbacktrace/zstdtest.c
*** gcc-17-20260621/libbacktrace/zstdtest.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libbacktrace/zstdtest.c	Sun Jun 28 22:32:17 2026
*************** static const struct zstd_test tests[] =
*** 182,188 ****
       "\xb4\x21\x45\x3b\x10\xe4\x7b\x99\x4d\x8a\x36\x64\x5c\x77\x08\x02"
       "\xcb\xe0\xce"),
      179,
!   }
  };
  
  /* Test the hand coded samples.  */
--- 182,231 ----
       "\xb4\x21\x45\x3b\x10\xe4\x7b\x99\x4d\x8a\x36\x64\x5c\x77\x08\x02"
       "\xcb\xe0\xce"),
      179,
!   },
!   {
!     "window-descriptor",
!     "hello, world\n",
!     0,
!     ("\x28\xb5\x2f\xfd"
!      "\x04" /* no Single_Segment_flag; Frame_Content_Size_flag = 0 */
!      "\x00" /* Window_Descriptor */
!      "\x69\x00\x00"
!      "\x68\x65\x6c\x6c\x6f\x2c\x20\x77\x6f\x72\x6c\x64\x0a"
!      "\x4c\x1f\xf9\xf1"),
!     26,
!   },
!   {
!     "window-descriptor-and-content-size",
!     "hello, world\n",
!     0,
!     ("\x28\xb5\x2f\xfd"
!      "\x84" /* no Single_Segment_flag; Frame_Content_Size_flag = 2 */
!      "\x00" /* Window_Descriptor */
!      "\x0d\x00\x00\x00" /* Frame_Content_Size */
!      "\x69\x00\x00"
!      "\x68\x65\x6c\x6c\x6f\x2c\x20\x77\x6f\x72\x6c\x64\x0a"
!      "\x4c\x1f\xf9\xf1"),
!     30,
!   },
!   {
!     "rle-sequence-tables",
!     "AAAA",
!     0,
!     ("\x28\xb5\x2f\xfd"
!      "\x20" /* Single_Segment_flag; Frame_Content_Size_flag = 0 */
!      "\x04" /* Frame_Content_Size */
!      "\x45\x00\x00" /* Last_Block, Compressed_Block, size 8 */
!      "\x08" /* Raw_Literals_Block, Regenerated_Size 1 */
!      "A"
!      "\x01" /* Number_of_Sequences */
!      "\x54" /* RLE literals length, offset, and match length tables */
!      "\x01" /* literal length code: 1 */
!      "\x00" /* offset code: repeat offset 1 */
!      "\x00" /* match length code: 3 */
!      "\x80"), /* bitstream end marker */
!     17,
!   },
  };
  
  /* Test the hand coded samples.  */
*************** test_samples (struct backtrace_state *st
*** 217,223 ****
  				      error_callback_compress, NULL,
  				      uncompressed, uncompressed_len))
  	{
! 	  fprintf (stderr, "test %s: uncompress failed\n", tests[i].name);
  	  ++failures;
  	}
        else
--- 260,266 ----
  				      error_callback_compress, NULL,
  				      uncompressed, uncompressed_len))
  	{
! 	  fprintf (stderr, "FAIL: test %s: uncompress failed\n", tests[i].name);
  	  ++failures;
  	}
        else
*************** test_samples (struct backtrace_state *st
*** 227,233 ****
  	    {
  	      size_t j;
  
! 	      fprintf (stderr, "test %s: uncompressed data mismatch\n",
  		       tests[i].name);
  	      for (j = 0; j < uncompressed_len; ++j)
  		if (tests[i].uncompressed[j] != uncompressed[j])
--- 270,276 ----
  	    {
  	      size_t j;
  
! 	      fprintf (stderr, "FAIL: test %s: uncompressed data mismatch\n",
  		       tests[i].name);
  	      for (j = 0; j < uncompressed_len; ++j)
  		if (tests[i].uncompressed[j] != uncompressed[j])
diff -Nrcpad gcc-17-20260621/libgcc/config/avr/libf7/f7-renames.h gcc-17-20260628/libgcc/config/avr/libf7/f7-renames.h
*** gcc-17-20260621/libgcc/config/avr/libf7/f7-renames.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcc/config/avr/libf7/f7-renames.h	Sun Jun 28 22:32:17 2026
***************
*** 222,228 ****
  #define f7_sqrt16_floor_asm __f7_sqrt16_floor_asm
  #define f7_lshrdi3_asm __f7_lshrdi3_asm
  #define f7_ashldi3_asm __f7_ashldi3_asm
- #define f7_d_to_fx64_asm __f7_d_to_fx64_asm
  #define f7_ufx64_to_d_asm __f7_ufx64_to_d_asm
  #define f7_sfx64_to_d_asm __f7_sfx64_to_d_asm
  #define f7_class_D_asm __f7_class_D_asm
--- 222,227 ----
diff -Nrcpad gcc-17-20260621/libgcc/config/avr/libf7/libf7-asm.sx gcc-17-20260628/libgcc/config/avr/libf7/libf7-asm.sx
*** gcc-17-20260621/libgcc/config/avr/libf7/libf7-asm.sx	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcc/config/avr/libf7/libf7-asm.sx	Sun Jun 28 22:32:17 2026
*************** _DEFUN __fractdfusa
*** 2465,2512 ****
  _ENDF __fractdfusa
  #endif /* F7MOD_D2usa_ */
  
  
! #ifdef F7MOD_D2fx_
! ;;; Convert double R18 to a 64-bit fixed point value.
! ;;; R18 d_to_fx64 (double R18, int8_t fbit R16);
! ;;; |FBIT| accounts for the extra fbits compared to [u]int64_t.
! ;;; FBIT < 0 indicates a signed conversion.
! ;;; FBIT > 0 indicates an unsigned conversion.
! DEFUN d_to_fx64
!     do_prologue_saves  4, F7_SIZEOF
! 
!     ;; Y = FramePointer + 1
!     adiw    Y,      1
! 
!     ;; FP + 1 = (f7_t) arg
!     wmov    r16,    Y
! 
!     ;; Convert double R18 to f7_t *R16.
!     XCALL   F7_NAME (set_double_impl)
  
!     ;; Prepare for *R24 = ldexp (*R24, R22).  ldexp() accounts for the
!     ;; fractional bits of the fixed point value, i.e. we have to <<= FBIT.
!     wmov    r24,    r16
!     ;; Zero-extend FBIT.
!     clr     r23
!     ;; R16 has been clobbered.  Fetch it from where prologue_saves put it.
!     ldd     r22,    Y + F7_SIZEOF + 3       ; Saved R16
!     tst     r22
!     brmi 1f
  
!     ;; Positive FBIT indicates an unsigned conversion.
!     XCALL   F7_NAME (Ildexp)
!     XCALL   F7_NAME (get_u64)
!     rjmp 9f
  
! 1:  ;; Negative FBIT indicates a signed conversion.
!     neg     r22                 ; FBIT := |FBIT|
!     XCALL   F7_NAME (Ildexp)
!     XCALL   F7_NAME (get_s64)
  
! 9:  do_epilogue_restores  4, F7_SIZEOF
! ENDF d_to_fx64
! #endif /* F7MOD_D2fx_ */
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--- 2465,2520 ----
  _ENDF __fractdfusa
  #endif /* F7MOD_D2usa_ */
  
+ #ifdef F7MOD_D2da_
+ _DEFUN __fractdfda
+     ;; Multiply with 2^FBIT to get a DA result in r25:r18.
+     subi    r24, dex_lo (-__DA_FBIT__)
+     sbci    r25, dex_hi (-__DA_FBIT__)
+     XJMP    __fixdfdi
+ _ENDF __fractdfda
+ #endif /* F7MOD_D2da_ */
  
! #ifdef F7MOD_D2uda_
! _DEFUN __fractdfuda
!     ;; Multiply with 2^FBIT to get an UDA result in r25:r18.
!     subi    r25, dex_hi (-__UDA_FBIT__)
!     XJMP    __fixunsdfdi
! _ENDF __fractdfuda
! #endif /* F7MOD_D2uda_ */
  
! #ifdef F7MOD_D2ta_
! _DEFUN __fractdfta
!     ;; Multiply with 2^FBIT to get a TA result in r25:r18.
!     subi    r24, dex_lo (-__TA_FBIT__)
!     sbci    r25, dex_hi (-__TA_FBIT__)
!     XJMP    __fixdfdi
! _ENDF __fractdfta
! #endif /* F7MOD_D2ta_ */
  
! #ifdef F7MOD_D2uta_
! _DEFUN __fractdfuta
!     ;; Multiply with 2^FBIT to get an UTA result in r25:r18.
!     subi    r25, dex_hi (-__UTA_FBIT__)
!     XJMP    __fixunsdfdi
! _ENDF __fractdfuta
! #endif /* F7MOD_D2uta_ */
  
! #ifdef F7MOD_D2dq_
! _DEFUN __fractdfdq
!     ;; Multiply with 2^FBIT to get a DQ result in r25:r18.
!     subi    r24, dex_lo (-__DQ_FBIT__)
!     sbci    r25, dex_hi (-__DQ_FBIT__)
!     XJMP    __fixdfdi
! _ENDF __fractdfdq
! #endif /* F7MOD_D2dq_ */
  
! #ifdef F7MOD_D2udq_
! _DEFUN __fractdfudq
!     ;; Multiply with 2^FBIT to get an UDQ result in r25:r18.
!     subi    r25, dex_hi (-__UDQ_FBIT__)
!     XJMP    __fixunsdfdi
! _ENDF __fractdfudq
! #endif /* F7MOD_D2udq_ */
  
  
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff -Nrcpad gcc-17-20260621/libgcc/config/avr/libf7/libf7-common.mk gcc-17-20260628/libgcc/config/avr/libf7/libf7-common.mk
*** gcc-17-20260621/libgcc/config/avr/libf7/libf7-common.mk	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcc/config/avr/libf7/libf7-common.mk	Sun Jun 28 22:32:17 2026
*************** F7_ASM_PARTS +=            ha2D uha2D sa
*** 34,42 ****
  F7_ASM_PARTS += fx2D
  
  # Double -> fixed-point conversions
! F7_ASM_PARTS += D2qq D2uqq D2hq D2uhq
! F7_ASM_PARTS +=            D2ha D2uha D2sa D2usa
! F7_ASM_PARTS += D2fx
  
  # Integer -> double conversions
  F7_ASM_PARTS += D_floatsidf D_floatunsidf
--- 34,41 ----
  F7_ASM_PARTS += fx2D
  
  # Double -> fixed-point conversions
! F7_ASM_PARTS += D2qq D2uqq D2hq D2uhq            D2dq D2udq
! F7_ASM_PARTS +=            D2ha D2uha D2sa D2usa D2da D2uda D2ta D2uta
  
  # Integer -> double conversions
  F7_ASM_PARTS += D_floatsidf D_floatunsidf
*************** F7F_asm += set_u64 set_s64 addsub_mant_s
*** 109,115 ****
  F7F_asm += to_integer to_unsigned clr_mant_lsbs
  F7F_asm += div sqrt_approx sqrt16_round sqrt16_floor
  F7F_asm += lshrdi3 ashldi3
! F7F_asm += d_to_fx64 ufx64_to_d sfx64_to_d
  F7F_asm += class_D
  
  F7F_asm += call_ddd call_xdd call_ddx
--- 108,114 ----
  F7F_asm += to_integer to_unsigned clr_mant_lsbs
  F7F_asm += div sqrt_approx sqrt16_round sqrt16_floor
  F7F_asm += lshrdi3 ashldi3
! F7F_asm += ufx64_to_d sfx64_to_d
  F7F_asm += class_D
  
  F7F_asm += call_ddd call_xdd call_ddx
diff -Nrcpad gcc-17-20260621/libgcc/config/avr/libf7/libf7.c gcc-17-20260628/libgcc/config/avr/libf7/libf7.c
*** gcc-17-20260621/libgcc/config/avr/libf7/libf7.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcc/config/avr/libf7/libf7.c	Sun Jun 28 22:32:17 2026
*************** f7_double_t __floatdidf (int64_t x)
*** 140,197 ****
  #endif // F7MOD_floatdidf_
  
  
- extern uint64_t d_to_ufx (f7_double_t, int8_t) F7ASM(f7_d_to_fx64_asm);
- extern int64_t  d_to_sfx (f7_double_t, int8_t) F7ASM(f7_d_to_fx64_asm);
- 
- #ifdef F7MOD_fractdfda_
- F7_WEAK
- int64_t __fractdfda (f7_double_t d)
- {
-   return d_to_sfx (d, -__DA_FBIT__);
- }
- #endif // F7MOD_fractdfda_
- 
- #ifdef F7MOD_fractdfuda_
- F7_WEAK
- uint64_t __fractdfuda (f7_double_t d)
- {
-   return d_to_ufx (d, __UDA_FBIT__);
- }
- #endif // F7MOD_fractdfuda_
- 
- #ifdef F7MOD_fractdfta_
- F7_WEAK
- int64_t __fractdfta (f7_double_t d)
- {
-   return d_to_sfx (d, -__TA_FBIT__);
- }
- #endif // F7MOD_fractdfta_
- 
- #ifdef F7MOD_fractdfuta_
- F7_WEAK
- uint64_t __fractdfuta (f7_double_t d)
- {
-   return d_to_ufx (d, __UTA_FBIT__);
- }
- #endif // F7MOD_fractdfuta_
- 
- #ifdef F7MOD_fractdfdq_
- F7_WEAK
- int64_t __fractdfdq (f7_double_t d)
- {
-   return d_to_sfx (d, -__DQ_FBIT__);
- }
- #endif // F7MOD_fractdfdq_
- 
- #ifdef F7MOD_fractdfudq_
- F7_WEAK
- uint64_t __fractdfudq (f7_double_t d)
- {
-   return d_to_ufx (d, __UDQ_FBIT__);
- }
- #endif // F7MOD_fractdfudq_
- 
- 
  #ifdef F7MOD_init_
  f7_t* f7_init_impl (uint64_t mant, uint8_t flags, f7_t *cc, int16_t expo)
  {
--- 140,145 ----
diff -Nrcpad gcc-17-20260621/libgcc/config/avr/libf7/t-libf7 gcc-17-20260628/libgcc/config/avr/libf7/t-libf7
*** gcc-17-20260621/libgcc/config/avr/libf7/t-libf7	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcc/config/avr/libf7/t-libf7	Sun Jun 28 22:32:17 2026
*************** F7_PREFIX = __f7_
*** 9,16 ****
  include $(libf7)/libf7-common.mk
  
  LIBF7_DF_CONV +=  floatundidf floatdidf # floatunsidf floatsidf
- LIBF7_DF_CONV +=  fractdfda fractdfta fractdfdq
- LIBF7_DF_CONV +=  fractdfuda fractdfuta fractdfudq
  
  # Wrappers like f7_lt_impl for f7_lt etc. because the latter is inline.
  LIBF7_DF_CMP  += lt le gt ge ne eq unord
--- 9,14 ----
diff -Nrcpad gcc-17-20260621/libgcobol/ChangeLog gcc-17-20260628/libgcobol/ChangeLog
*** gcc-17-20260621/libgcobol/ChangeLog	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcobol/ChangeLog	Sun Jun 28 22:32:17 2026
***************
*** 1,3 ****
--- 1,24 ----
+ 2026-06-25  Robert Dubner  <rdubner@symas.com>
+ 
+ 	* charmaps.cc (__gg__miconverter): Use table instead of a map.
+ 	(__gg__get_charmap): Likewise.
+ 	* charmaps.h (ebcdic_zero): New constant.
+ 	(ebcdic_plus): Likewise.
+ 	(ebcdic_minus): Likewise.
+ 	* encodings.h (enum cbl_encoding_t): Guardrail for table.
+ 	(ASCII_e): Remove trailing spaces.
+ 	* stringbin.cc (string_from_combined): Improved routine.
+ 	(defined): Likewise.
+ 	(FALLTHROUGH): Likewise.
+ 	(uint_to_8_digits): Improve speed.
+ 	(__gg__binary_to_string_ascii): Likewise.
+ 	(binary_to_string): Likewise.
+ 	(__gg__binary_to_string_ebcdic): Likewise.
+ 	(__gg__binary_to_string_encoded): Likewise.
+ 	(packed_from_combined): Likewise.
+ 	(__gg__binary_to_packed): Likewise.
+ 	(__gg__packed_to_binary): Likewise.
+ 
  2026-06-20  Robert Dubner  <rdubner@symas.com>
  
  	* charmaps.cc: Eliminate rt_encoding_t.
diff -Nrcpad gcc-17-20260621/libgcobol/charmaps.cc gcc-17-20260628/libgcobol/charmaps.cc
*** gcc-17-20260621/libgcobol/charmaps.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcobol/charmaps.cc	Sun Jun 28 22:32:17 2026
*************** __gg__miconverter( cbl_encoding_t from,
*** 1715,1725 ****
    return retval;
    }
  
! typedef std::unordered_map<cbl_encoding_t, charmap_t *, cbl_encoding_t_hash>
! cbl_encoding_charmap_map;
  
! static
! cbl_encoding_charmap_map map_of_encodings;
  
  charmap_t *
  __gg__get_charmap(cbl_encoding_t encoding)
--- 1715,1727 ----
    return retval;
    }
  
! // I switched to this wasteful table when I learned that unordered_map.find(),
! // fast though it is, at something like 23 nanoseconds was annoyingly longer
! // than some of my efficient MOVE conversion routines.
  
! // Using 1500 is, I suppose, sloppy.  Right now the biggest entry in the
! // cbl_encodings_t enum is about 1,150.
! static charmap_t *maps_weve_seen[iconv_LAST] = {};
  
  charmap_t *
  __gg__get_charmap(cbl_encoding_t encoding)
*************** __gg__get_charmap(cbl_encoding_t encodin
*** 1741,1755 ****
      }
  
    charmap_t *retval;
!   cbl_encoding_charmap_map::const_iterator it = map_of_encodings.find(encoding);
!   if( it != map_of_encodings.end() )
      {
!     retval = it->second;
      }
    else
      {
      retval = new charmap_t(encoding);
!     map_of_encodings[encoding] = retval;
      }
    return retval;
    }
--- 1743,1757 ----
      }
  
    charmap_t *retval;
! 
!   if( maps_weve_seen[encoding] )
      {
!     retval = maps_weve_seen[encoding];
      }
    else
      {
      retval = new charmap_t(encoding);
!     maps_weve_seen[encoding] = retval;
      }
    return retval;
    }
diff -Nrcpad gcc-17-20260621/libgcobol/charmaps.h gcc-17-20260628/libgcobol/charmaps.h
*** gcc-17-20260621/libgcobol/charmaps.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcobol/charmaps.h	Sun Jun 28 22:32:17 2026
*************** enum
*** 263,268 ****
--- 263,271 ----
  #define ascii_ff               ((uint8_t)('\f'))
  #define ascii_newline          ((uint8_t)('\n'))
  #define ascii_return           ((uint8_t)('\r'))
+ #define ebcdic_zero            ((uint8_t)(0xF0))
+ #define ebcdic_plus            ((uint8_t)(0x4E))
+ #define ebcdic_minus           ((uint8_t)(0x60))
  
  extern unsigned char __gg__data_space[1]       ;
  extern unsigned char __gg__data_low_values[1]  ;
diff -Nrcpad gcc-17-20260621/libgcobol/encodings.h gcc-17-20260628/libgcobol/encodings.h
*** gcc-17-20260621/libgcobol/encodings.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcobol/encodings.h	Sun Jun 28 22:32:17 2026
***************
*** 33,40 ****
  
  #include <type_traits>
  
  enum cbl_encoding_t {
!   no_encoding_e,
    custom_encoding_e,
    iconv_1026_e,
    iconv_1046_e,
--- 33,42 ----
  
  #include <type_traits>
  
+ // These values explicitly start at zero.  The final entry is used for sizing
+ // a lookup array.
  enum cbl_encoding_t {
!   no_encoding_e = 0,
    custom_encoding_e,
    iconv_1026_e,
    iconv_1046_e,
*************** enum cbl_encoding_t {
*** 1195,1200 ****
--- 1197,1203 ----
    iconv_WIN_SAMI_2_e,
    iconv_WS2_e,
    iconv_YU_e,
+   iconv_LAST, // This must be the last one.  It's used for array sizing
  };
  
  static inline bool
*************** valid_encoding( cbl_encoding_t enc ) {
*** 1202,1208 ****
    return enc <= iconv_YU_e;
  }
  
! #define ASCII_e  iconv_ASCII_e   
  #define CP1252_e iconv_CP1252_e
  #define EBCDIC_e iconv_CP1140_e
  #define UTF8_e   iconv_UTF_8_e
--- 1205,1211 ----
    return enc <= iconv_YU_e;
  }
  
! #define ASCII_e  iconv_ASCII_e
  #define CP1252_e iconv_CP1252_e
  #define EBCDIC_e iconv_CP1140_e
  #define UTF8_e   iconv_UTF_8_e
diff -Nrcpad gcc-17-20260621/libgcobol/stringbin.cc gcc-17-20260628/libgcobol/stringbin.cc
*** gcc-17-20260621/libgcobol/stringbin.cc	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgcobol/stringbin.cc	Sun Jun 28 22:32:17 2026
*************** static char zero_char;
*** 128,275 ****
  
  typedef struct
    {
-   int   start;
    int   run;
    union
      {
      unsigned __int128 val128;
      uint64_t          val64;
-     uint32_t          val32;
-     uint16_t          val16;
-     uint8_t           val8;
      };
    } COMBINED;
  
! static
! void
! string_from_combined(const COMBINED &combined)
    {
!   COMBINED left;
!   COMBINED right;
  
!   uint16_t v16;
  
!   switch(combined.run)
      {
-     case 1:
-       // We know that val8 is a single digit
-       combined_string[combined.start] = combined.val8 + zero_char;
-       break;
- 
-     case 2:
-       // We know that val8 has two digits
-       combined_string[combined.start]   = digit_high[combined.val8] + zero_char;
-       combined_string[combined.start+1] = digit_low [combined.val8] + zero_char;
-       break;
- 
-     case 3:
-       // We know that val16 has three digits.
-       v16 = combined.val16;
-       combined_string[combined.start] = v16 / 100 + zero_char;
-       v16 %= 100;
-       combined_string[combined.start+1] = v16 / 10 + zero_char;
-       combined_string[combined.start+2] = v16 % 10 + zero_char;
-       break;
- 
-     case 4:
-       // We know that val16 has four digits:
-       v16 = combined.val16;
-       combined_string[combined.start] = v16 / 1000 + zero_char;
-       v16 %= 1000;
-       combined_string[combined.start+1] = v16 / 100 + zero_char;
-       v16 %= 100;
-       combined_string[combined.start+2] = v16 / 10 + zero_char;
-       combined_string[combined.start+3] = v16 % 10 + zero_char;
-       break;
- 
-     case 5:
-     case 6:
-     case 7:
      case 8:
!       // We know that val32 can be treated as two 4-digit pieces
!       left.start  = combined.start;
!       left.run    = combined.run - 4;
!       left.val16  = combined.val32 / 10000;
! 
!       right.start = combined.start+left.run;
!       right.run   =                4;
!       right.val16 = combined.val32 % 10000;
! 
!       string_from_combined(left);
!       string_from_combined(right);
!       break;
! 
!     case 9:
!       // We break val32 into a 1-digit piece, and an 8-digit piece:
!       left.start  = combined.start;
!       left.run    = combined.run - 8;
!       left.val32  = combined.val32 / 100000000;
! 
!       right.start = combined.start+left.run;
!       right.run   =                8;
!       right.val32 = combined.val32 % 100000000;
! 
!       string_from_combined(left);
!       string_from_combined(right);
!       break;
! 
!     case 10:
!     case 11:
!     case 12:
!     case 13:
!     case 14:
!     case 15:
!     case 16:
!     case 17:
!     case 18:
!       // We know we can treat val64 as two 9-digit pieces:
!       left.start  = combined.start;
!       left.run    = combined.run - 9;
!       left.val32  = combined.val64 / 1000000000;
! 
!       right.start = combined.start+left.run;
!       right.run   =                9;
!       right.val32 = combined.val64 % 1000000000;
! 
!       string_from_combined(left);
!       string_from_combined(right);
!       break;
  
!     case 19:
!       // We split off the bottom nine digits
!       left.start  = combined.start;
!       left.run    = combined.run - 9;
!       left.val64 = combined.val64 / 1000000000;
  
!       right.start = combined.start+left.run;
!       right.run   =                9;
!       right.val32 = combined.val64 % 1000000000;
  
!       string_from_combined(left);
!       string_from_combined(right);
        break;
  
!     default:
!       // For twenty or more digits we peel eighteen digits at a time off the
!       // right side:
!       left.start  = combined.start;
!       left.run    = combined.run - 18;
!       left.val128 = combined.val128 / 1000000000000000000ULL;
  
!       right.start = combined.start+left.run;
!       right.run   =                18;
!       right.val64 = combined.val128 % 1000000000000000000ULL;
  
!       string_from_combined(left);
!       string_from_combined(right);
!       break;
      }
    }
  
! bool
! __gg__binary_to_string_ascii(char *result, int digits, __int128 value)
    {
-   zero_char = ascii_zero;
    bool retval; // True means the value was too big to fit into digits
    if( digits < 39 )
      {
--- 128,255 ----
  
  typedef struct
    {
    int   run;
    union
      {
      unsigned __int128 val128;
      uint64_t          val64;
      };
    } COMBINED;
  
! #if defined(__cplusplus) && __cplusplus >= 201703L
! #  define FALLTHROUGH [[fallthrough]]
! #elif defined(__GNUC__) && __GNUC__ >= 7
! #  define FALLTHROUGH __attribute__((fallthrough))
! #else
! #  define FALLTHROUGH ((void)0)
! #endif
! 
! static const unsigned char digits2[100][2] =
    {
!   {0,0},{0,1},{0,2},{0,3},{0,4},{0,5},{0,6},{0,7},{0,8},{0,9},
!   {1,0},{1,1},{1,2},{1,3},{1,4},{1,5},{1,6},{1,7},{1,8},{1,9},
!   {2,0},{2,1},{2,2},{2,3},{2,4},{2,5},{2,6},{2,7},{2,8},{2,9},
!   {3,0},{3,1},{3,2},{3,3},{3,4},{3,5},{3,6},{3,7},{3,8},{3,9},
!   {4,0},{4,1},{4,2},{4,3},{4,4},{4,5},{4,6},{4,7},{4,8},{4,9},
!   {5,0},{5,1},{5,2},{5,3},{5,4},{5,5},{5,6},{5,7},{5,8},{5,9},
!   {6,0},{6,1},{6,2},{6,3},{6,4},{6,5},{6,6},{6,7},{6,8},{6,9},
!   {7,0},{7,1},{7,2},{7,3},{7,4},{7,5},{7,6},{7,7},{7,8},{7,9},
!   {8,0},{8,1},{8,2},{8,3},{8,4},{8,5},{8,6},{8,7},{8,8},{8,9},
!   {9,0},{9,1},{9,2},{9,3},{9,4},{9,5},{9,6},{9,7},{9,8},{9,9}
!   };
  
! static void
! uint_to_8_digits(unsigned int a, unsigned char *ach, int n)
!   {
!   unsigned int x;
  
!   switch(n)
      {
      case 8:
!       x = a % 100;
!       ach[6] = digits2[x][0];
!       ach[7] = digits2[x][1];
!       a /= 100;
!       FALLTHROUGH;
  
!     case 7:
!     case 6:
!       x = a % 100;
!       ach[4] = digits2[x][0];
!       ach[5] = digits2[x][1];
!       a /= 100;
!       FALLTHROUGH;
  
!     case 5:
!     case 4:
!       x = a % 100;
!       ach[2] = digits2[x][0];
!       ach[3] = digits2[x][1];
!       a /= 100;
!       FALLTHROUGH;
  
!     case 3:
!     case 2:
!       x = a % 100;
!       ach[0] = digits2[x][0];
!       ach[1] = digits2[x][1];
!       FALLTHROUGH;
!     default:
        break;
+     }
+   }
  
! static
! void
! string_from_combined(const COMBINED &combined)
!   {
!   int ndigits = combined.run;
!   unsigned __int128 value = combined.val128;
  
!   if( ndigits & 0x01 )
!     {
!     combined_string[ndigits-1] = value%10;
!     value /= 10;
!     ndigits -= 1;
!     }
!   while(ndigits >= 8)
!     {
!     unsigned int val = value % 100000000;
!     uint_to_8_digits(val,
!            reinterpret_cast<unsigned char *>(combined_string + ndigits-8), 8);
!     value /= 100000000;
!     ndigits -= 8;
!     }
!   if( ndigits )
!     {
!     const unsigned int pots[8] =
!       {
!       1,
!       10,
!       100,
!       1000,
!       10000,
!       100000,
!       1000000,
!       10000000,
!       };
  
!     unsigned int val = value % pots[ndigits];
!     uint_to_8_digits(val,
!                   reinterpret_cast<unsigned char *>(combined_string), ndigits);
!     value /= 100000000;
!     }
!   char *p = combined_string;
!   const char *pend = p + combined.run;
!   while(p < pend)
!     {
!     *p++ += zero_char;
      }
    }
  
! static bool
! binary_to_string(char *result, int digits, __int128 value)
    {
    bool retval; // True means the value was too big to fit into digits
    if( digits < 39 )
      {
*************** __gg__binary_to_string_ascii(char *resul
*** 291,297 ****
      // mask off the bottom digits to avoid garbage when value is too large
      value %= mask;
  
-     combined.start = 0;
      combined.run = digits;
      combined.val128 = value;
      string_from_combined(combined);
--- 271,276 ----
*************** __gg__binary_to_string_ascii(char *resul
*** 307,313 ****
      // number of digits:
      retval = false;
  
-     combined.start = 0;
      combined.run = digits;
      combined.val128 = value;
      string_from_combined(combined);
--- 286,291 ----
*************** __gg__binary_to_string_ascii(char *resul
*** 316,321 ****
--- 294,315 ----
    return retval;
    }
  
+ extern "C"
+ bool
+ __gg__binary_to_string_ascii(char *result, int digits, __int128 value)
+   {
+   zero_char = ascii_zero;
+   return binary_to_string(result, digits, value);
+   }
+ 
+ extern "C"
+ bool
+ __gg__binary_to_string_ebcdic(char *result, int digits, __int128 value)
+   {
+   zero_char = ebcdic_zero;
+   return binary_to_string(result, digits, value);
+   }
+ 
  bool
  __gg__binary_to_string_encoded( char *result,
                                  size_t digits,
*************** __gg__binary_to_string_encoded( char *re
*** 325,331 ****
    // A non-zero retval means the number was too big to fit into the desired
    // number of digits.
  
!   zero_char = ascii_0;
  
    // Note that this routine does not terminate the generated string with a
    // NUL.  This routine is sometimes used to generate a NumericDisplay string
--- 319,328 ----
    // A non-zero retval means the number was too big to fit into the desired
    // number of digits.
  
!   const charmap_t *charmap = __gg__get_charmap(encoding);
!   int stride = charmap->stride();
! 
!   zero_char = charmap->is_like_ebcdic() ? ebcdic_zero : ascii_0;
  
    // Note that this routine does not terminate the generated string with a
    // NUL.  This routine is sometimes used to generate a NumericDisplay string
*************** __gg__binary_to_string_encoded( char *re
*** 343,364 ****
    // mask off the bottom digits to avoid garbage when value is too large
    value %= mask;
  
-   combined.start = 0;
    combined.run = digits;
    combined.val128 = value;
    string_from_combined(combined);
!   size_t converted_bytes;
!   const char *converted = __gg__iconverter(DEFAULT_SOURCE_ENCODING,
!                                            encoding,
!                                            combined_string,
!                                            digits,
!                                            &converted_bytes);
!   memcpy(result, converted, converted_bytes);
    return retval;
    }
  
! static
! void
  packed_from_combined(const COMBINED &combined)
    {
    /*  The combined.value must be positive at this point.
--- 340,368 ----
    // mask off the bottom digits to avoid garbage when value is too large
    value %= mask;
  
    combined.run = digits;
    combined.val128 = value;
    string_from_combined(combined);
!   if( stride == 1 )
!     {
!     memcpy(result, combined_string, digits);
!     }
!   else
!     {
!     char *p = combined_string;
!     const char *pend = p + digits;
!     char *d = result;
!     while(p < pend)
!       {
!       *d++ = *p++;
!       memset(d, 0, stride-1);
!       d += stride-1;
!       }
!     }
    return retval;
    }
  
! static void
  packed_from_combined(const COMBINED &combined)
    {
    /*  The combined.value must be positive at this point.
*************** packed_from_combined(const COMBINED &com
*** 383,490 ****
      0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
      } ;
  
!   COMBINED left;
!   COMBINED right;
  
!   switch(combined.run)
      {
!     case 1:
!       // We know that val8 has two digits.
!       combined_string[combined.start] = bin2pd[combined.val8];
!       break;
! 
!     case 2:
!       // We know that val16 has four digits.
!       combined_string[combined.start  ] = bin2pd[combined.val16/100];
!       combined_string[combined.start+1] = bin2pd[combined.val16%100];
!       break;
! 
!     case 3:
!     case 4:
!       // We know that val32 can hold up to eight digits. Break it in half.
!       left.start  = combined.start;
!       left.run    = combined.run - 2;
!       left.val16  = combined.val32 / 10000;
! 
!       right.start = combined.start+left.run;
!       right.run   =                2;
!       right.val16 = combined.val32 % 10000;
! 
!       packed_from_combined(left);
!       packed_from_combined(right);
!       break;
! 
!     case 5:
!     case 6:
!     case 7:
!     case 8:
!       // We know that val64 is holding up to 18 digits.  Break it into two
!       // eight-digit places that can each go into a val23
!       left.start  = combined.start;
!       left.run    = combined.run - 4;
!       left.val32  = combined.val64 / 100000000;
! 
!       right.start = combined.start+left.run;
!       right.run   =                4;
!       right.val32 = combined.val64 % 100000000;
! 
!       packed_from_combined(left);
!       packed_from_combined(right);
!       break;
! 
!     case 9:
!       // We know that val64 is holding 17 or 18 digits.  Break off the
!       // bottom eight.
!       left.start  = combined.start;
!       left.run    = combined.run - 4;
!       left.val64  = combined.val64 / 100000000;
! 
!       right.start = combined.start+left.run;
!       right.run   =                4;
!       right.val32 = combined.val64 % 100000000;
! 
!       packed_from_combined(left);
!       packed_from_combined(right);
!       break;
! 
!     case 10:
!     case 11:
!     case 12:
!     case 13:
!     case 14:
!     case 15:
!     case 16:
!     case 17:
!     case 18:
!       // We know that val64 is holding between 18 and 36 digits.  Break it
!       // two val64:
! 
!       left.start  = combined.start;
!       left.run    = combined.run - 9;
!       left.val64  = combined.val128 / 1000000000000000000ULL;
! 
!       right.start = combined.start+left.run;
!       right.run   =                9;
!       right.val64 = combined.val128 % 1000000000000000000ULL;
! 
!       packed_from_combined(left);
!       packed_from_combined(right);
!       break;
! 
!     default:
!       // For twenty or more digits we peel eighteen digits at a time off the
!       // right side:
!       left.start  = combined.start;
!       left.run    = combined.run - 9;
!       left.val128 = combined.val128 / 1000000000000000000ULL;
! 
!       right.start = combined.start+left.run;
!       right.run   =                9;
!       right.val64 = combined.val128 % 1000000000000000000ULL;
! 
!       packed_from_combined(left);
!       packed_from_combined(right);
!       break;
      }
    }
  
--- 387,419 ----
      0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
      } ;
  
!   char *d = combined_string + combined.run;
  
!   if( combined.run > 9)
      {
!     // Stage 1: pull from int128 until the top half is zero.
!     __int128 value128 = combined.val128;
!     while(value128>>64)
!       {
!       *(--d) = bin2pd[value128%100];
!       value128 /= 100;
!       }
!     // Stage 2: Keep going with the 64-bit bottom half.
!     uint64_t value64 = value128;
!     while(d > combined_string)
!       {
!       *(--d) = bin2pd[value64%100];
!       value64 /= 100;
!       }
!     }
!   else
!     {
!     uint64_t value = combined.val64;
!     while(d > combined_string)
!       {
!       *(--d) = bin2pd[value%100];
!       value /= 100;
!       }
      }
    }
  
*************** __gg__binary_to_packed( unsigned char *r
*** 497,503 ****
    size_t length = (digits+1)/2;
  
    COMBINED combined;
-   combined.start = 0;
    combined.run = length;
    combined.val128 = value;
    packed_from_combined(combined);
--- 426,431 ----
*************** __gg__packed_to_binary(const unsigned ch
*** 671,673 ****
--- 599,602 ----
      }
    return retval;
    }
+ 
diff -Nrcpad gcc-17-20260621/libgfortran/ChangeLog gcc-17-20260628/libgfortran/ChangeLog
*** gcc-17-20260621/libgfortran/ChangeLog	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgfortran/ChangeLog	Sun Jun 28 22:32:17 2026
***************
*** 1,3 ****
--- 1,36 ----
+ 2026-06-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/118793
+ 	* io/file_pos.c (st_rewind): Reset line and column numbers.
+ 	* io/io.h: Add line and column number to the gfc_unit
+ 	structure.
+ 	* io/list_read.c (next_char_default): Increment the column
+ 	position and line number as needed.
+ 	(next_char_internal): Likewise.
+ 	(next_char_utf8): Likewise.
+ 	(nml_err_ret): Build the expanded diagnostic message.
+ 	* io/unit.c (insert_unit): Initialize the line_number.
+ 
+ 2026-06-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/118774
+ 	* io/transfer.c (formatted_transfer_scalar_write): Set nspaces
+ 	to number of skips for FMT_X.
+ 
+ 2026-06-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR libfortran/114618
+ 	* io/transfer.c (formatted_transfer_scalar_write): Determine
+ 	possible new max_pos based on file I/O method and adjust
+ 	accordingly
+ 
+ 2026-06-21  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/82086
+ 	* io/list_read.c (nml_read_obj): Add is_component parameter
+ 	to correctly distribute repeat count across derived-type array
+ 	elements.
+ 
  2026-06-11  Thomas Koenig  <tkoenig@gcc.gnu.org>
  
  	PR fortran/30438
diff -Nrcpad gcc-17-20260621/libgfortran/io/file_pos.c gcc-17-20260628/libgfortran/io/file_pos.c
*** gcc-17-20260621/libgfortran/io/file_pos.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgfortran/io/file_pos.c	Sun Jun 28 22:32:18 2026
*************** st_rewind (st_parameter_filepos *fpp)
*** 480,485 ****
--- 480,487 ----
  	  
  	  u->current_record = 0;
  	  u->strm_pos = 1;
+ 	  u->line_number = 1;
+ 	  u->column_number = 0;
  	  u->read_bad = 0;
  	  u->last_char = EOF - 1;
  	}
diff -Nrcpad gcc-17-20260621/libgfortran/io/io.h gcc-17-20260628/libgfortran/io/io.h
*** gcc-17-20260621/libgfortran/io/io.h	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgfortran/io/io.h	Sun Jun 28 22:32:18 2026
*************** typedef struct gfc_unit
*** 656,661 ****
--- 656,664 ----
  
    int read_bad, current_record, saved_pos, previous_nonadvancing_write;
  
+   /* Position information for better diagnostics.  */
+   int line_number, column_number;
+ 
    enum
    { NO_ENDFILE, AT_ENDFILE, AFTER_ENDFILE }
    endfile;
diff -Nrcpad gcc-17-20260621/libgfortran/io/list_read.c gcc-17-20260628/libgfortran/io/list_read.c
*** gcc-17-20260621/libgfortran/io/list_read.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgfortran/io/list_read.c	Sun Jun 28 22:32:18 2026
*************** next_char_default (st_parameter_dt *dtp)
*** 211,216 ****
--- 211,224 ----
    if (c != EOF && is_stream_io (dtp))
      dtp->u.p.current_unit->strm_pos++;
  
+   if (c == '\n')
+     {
+       dtp->u.p.current_unit->line_number++;
+       dtp->u.p.current_unit->column_number = 0;
+     }
+   else if (c != EOF)
+     dtp->u.p.current_unit->column_number++;
+ 
    dtp->u.p.at_eol = (c == '\n' || c == EOF);
    return c;
  }
*************** next_char_internal (st_parameter_dt *dtp
*** 241,246 ****
--- 249,256 ----
  	  int finished;
  
  	  c = '\n';
+ 	  dtp->u.p.current_unit->line_number++;
+ 	  dtp->u.p.current_unit->column_number = 0;
  	  record = next_array_record (dtp, dtp->u.p.current_unit->ls,
  				      &finished);
  
*************** next_char_internal (st_parameter_dt *dtp
*** 302,307 ****
--- 312,325 ----
      }
    dtp->u.p.current_unit->bytes_left--;
  
+   if (c == '\n')
+     {
+       dtp->u.p.current_unit->line_number++;
+       dtp->u.p.current_unit->column_number = 0;
+     }
+   else if (c != EOF)
+     dtp->u.p.current_unit->column_number++;
+ 
  done:
    dtp->u.p.at_eol = (c == '\n' || c == EOF);
    return c;
*************** next_char_utf8 (st_parameter_dt *dtp)
*** 355,360 ****
--- 373,386 ----
      goto invalid;
  
  utf_done:
+   if (c == '\n')
+     {
+       dtp->u.p.current_unit->line_number++;
+       dtp->u.p.current_unit->column_number = 0;
+     }
+   else if (c != (gfc_char4_t) EOF)
+     dtp->u.p.current_unit->column_number++;
+ 
    dtp->u.p.at_eol = (c == '\n' || c == (gfc_char4_t) EOF);
    return (int) c;
  
*************** nml_err_ret:
*** 3920,3925 ****
    /* All namelist error calls return from here */
    free_saved (dtp);
    free_line (dtp);
!   generate_error (&dtp->common, LIBERROR_READ_VALUE, nml_err_msg);
    return;
  }
--- 3946,4022 ----
    /* All namelist error calls return from here */
    free_saved (dtp);
    free_line (dtp);
! 
!   if (dtp->u.p.current_unit)
!     {
!       int line = dtp->u.p.current_unit->line_number;
!       int col = dtp->u.p.current_unit->column_number;
!       char *filename = dtp->u.p.current_unit->filename;
!       char *detailed_msg;
! 
!       char *line_text = NULL;
!       int line_len = 0;
! 
!       if (is_internal_unit (dtp) && dtp->internal_unit)
! 	{
! 	  GFC_IO_INT recl = dtp->u.p.current_unit->recl;
! 	  line_text = dtp->internal_unit + (line - 1) * recl;
! 	  line_len = recl;
! 	}
!       else if (dtp->u.p.current_unit->fbuf)
! 	{
! 	  struct fbuf *fb = dtp->u.p.current_unit->fbuf;
! 	  ptrdiff_t pos = fb->pos;
! 	  if (pos > 0)
! 	    {
! 	      ptrdiff_t start = pos - 1;
! 	      while (start > 0 && fb->buf[start-1] != '\n')
! 		start--;
! 	      ptrdiff_t end = pos - 1;
! 
! 	      /* Scan the buffer to get a fixed length of the text, but
! 		 don't exceed thr length of the line.  */
! 	      while (end < (ptrdiff_t)fb->act
! 		     && (fb->buf[end] != '\n')
! 		     && (end - start < 128))
! 		end++;
! 	      line_text = fb->buf + start;
! 	      line_len = end - start;
! 	    }
! 	}
! 
!       size_t msg_len = strlen (nml_err_msg) + 200;
!       if (line_text) msg_len += line_len + col + 10;
!       if (filename) msg_len += strlen (filename);
! 
!       detailed_msg = xmalloc (msg_len);
!       int offset;
!       if (filename)
! 	offset = sprintf (detailed_msg, "%s at line %lld, column %lld in file %s",
! 		   nml_err_msg, (long long) line, (long long) col, filename);
!       else
! 	offset = sprintf (detailed_msg, "%s at line %lld, column %lld",
! 		   nml_err_msg, (long long) line, (long long) col);
! 
!       if (line_text && line_len > 0)
! 	{
! 	  detailed_msg[offset++] = '\n';
! 	  memcpy (detailed_msg + offset, line_text, line_len);
! 	  offset += line_len;
! 	  detailed_msg[offset++] = '\n';
! 
! 	  for (int i = 0; i < col - 1; i++)
! 	    detailed_msg[offset++] = ' ';
! 	  detailed_msg[offset++] = '^';
! 	  detailed_msg[offset++] = '\n';
! 	  detailed_msg[offset] = '\0';
! 	}
! 
!       generate_error (&dtp->common, LIBERROR_READ_VALUE, detailed_msg);
!       free (detailed_msg);
!     }
!   else
!     generate_error (&dtp->common, LIBERROR_READ_VALUE, nml_err_msg);
! 
    return;
  }
diff -Nrcpad gcc-17-20260621/libgfortran/io/transfer.c gcc-17-20260628/libgfortran/io/transfer.c
*** gcc-17-20260621/libgfortran/io/transfer.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgfortran/io/transfer.c	Sun Jun 28 22:32:18 2026
*************** formatted_transfer_scalar_write (st_para
*** 2162,2168 ****
  	}
  
        if (is_stream_io(dtp))
! 	bytes_used = dtp->u.p.current_unit->fbuf->act;
        else
  	bytes_used = dtp->u.p.current_unit->recl
  		    - dtp->u.p.current_unit->bytes_left;
--- 2162,2168 ----
  	}
  
        if (is_stream_io(dtp))
! 	bytes_used = dtp->u.p.current_unit->fbuf->pos;
        else
  	bytes_used = dtp->u.p.current_unit->recl
  		    - dtp->u.p.current_unit->bytes_left;
*************** formatted_transfer_scalar_write (st_para
*** 2420,2425 ****
--- 2420,2447 ----
  	  dtp->u.p.skips += f->u.n;
  	  tab_pos = bytes_used + dtp->u.p.skips - 1;
  	  dtp->u.p.pending_spaces = tab_pos - dtp->u.p.max_pos + 1;
+ 	  if (dtp->u.p.pending_spaces < 0 && dtp->u.p.skips > 0)
+ 	    {
+ 	      /* The advance falls within already-written content (e.g. after
+ 		 a backward tab).  FMT_X sets positions to blank per the
+ 		 standard; FMT_TR skips without overwriting existing characters.  */
+ 	      gfc_offset new_max;
+ 	      int nspaces = f->format == FMT_X ? dtp->u.p.skips : 0;
+ 	      write_x (dtp, dtp->u.p.skips, nspaces);
+ 
+ 	      /* Adjust the max position depending on the type of write.  */
+ 	      if (is_stream_io (dtp))
+ 		new_max = dtp->u.p.current_unit->fbuf->act;
+ 	      else
+ 		new_max = dtp->u.p.current_unit->recl
+ 			  - dtp->u.p.current_unit->bytes_left;
+ 
+ 	      dtp->u.p.max_pos = dtp->u.p.max_pos > new_max
+ 				  ? dtp->u.p.max_pos : new_max;
+ 
+ 	      dtp->u.p.skips = dtp->u.p.pending_spaces = 0;
+ 	      break;
+ 	    }
  	  dtp->u.p.pending_spaces = dtp->u.p.pending_spaces < 0
  				    ? f->u.n : dtp->u.p.pending_spaces;
  
diff -Nrcpad gcc-17-20260621/libgfortran/io/unit.c gcc-17-20260628/libgfortran/io/unit.c
*** gcc-17-20260621/libgfortran/io/unit.c	Sun Jun 21 22:32:14 2026
--- gcc-17-20260628/libgfortran/io/unit.c	Sun Jun 28 22:32:18 2026
*************** insert_unit (int n)
*** 238,243 ****
--- 238,244 ----
  {
    gfc_unit *u = xcalloc (1, sizeof (gfc_unit));
    u->unit_number = n;
+   u->line_number = 1;
    u->internal_unit_kind = 0;
  #ifdef __GTHREAD_MUTEX_INIT
    {
diff -Nrcpad gcc-17-20260621/libgomp/ChangeLog gcc-17-20260628/libgomp/ChangeLog
*** gcc-17-20260621/libgomp/ChangeLog	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/ChangeLog	Sun Jun 28 22:32:18 2026
***************
*** 1,3 ****
--- 1,128 ----
+ 2026-06-25  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* libgomp.texi (Implementing MASKED and MASTER construct): Fix
+ 	@end smallexample.
+ 	(Implementing FOR construct): Likewise.
+ 
+ 2026-06-25  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* libgomp.texi (Implementing MASKED and MASTER construct): Update
+ 	pseudocode; describe GOMP_has_masked_thread_num.
+ 	(Implementing ATOMIC construct): Fix stale function names; note
+ 	exclusivity to explicit atomic constructs.
+ 	(Implementing BARRIER construct): Document GOMP_barrier_ext and
+ 	GOMP_barrier_cancel_ext; describe the kind parameter.
+ 	(Implementing REDUCTION clause): Document GOMP_reduction_start and
+ 	GOMP_reduction_end.
+ 	(Implementing FOR construct): Document GOMP_loop_static_worksharing
+ 	and GOMP_distribute_static_worksharing.
+ 
+ 2026-06-25  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* libgomp_g.h (GOMP_reduction_start, GOMP_reduction_end): Sort
+ 	correctly.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* atomic.c (GOMP_reduction_start): New function.
+ 	(GOMP_reduction_end): New function.
+ 	* libgomp.map (GOMP_6.0.2): Export GOMP_reduction_start and
+ 	GOMP_reduction_end.
+ 	* libgomp_g.h (GOMP_reduction_start): New declaration.
+ 	(GOMP_reduction_end): New declaration.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* barrier.c (GOMP_barrier_ext): New function.
+ 	(GOMP_barrier_cancel_ext): Likewise.
+ 	* libgomp_g.h (GOMP_barrier_ext): Declare.
+ 	(GOMP_barrier_cancel_ext): Likewise.
+ 	* libgomp.map (GOMP_6.0.2): Add GOMP_barrier_ext and
+ 	GOMP_barrier_cancel_ext.
+ 	* testsuite/libgomp.c/barrier-1.c: Update GOMP_barrier_ext calls to pass
+ 	GOMP_BARRIER_EXPLICIT.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* config/gcn/teams.c (GOMP_distribute_static_worksharing): New
+ 	function.
+ 	* config/nvptx/teams.c (GOMP_distribute_static_worksharing): Likewise.
+ 	* libgomp.map (GOMP_6.0.2): Export GOMP_loop_static_worksharing and
+ 	GOMP_distribute_static_worksharing.
+ 	* libgomp_g.h (GOMP_loop_static_worksharing): New declaration.
+ 	(GOMP_distribute_static_worksharing): Likewise.
+ 	* parallel.c (GOMP_loop_static_worksharing): New function.
+ 	* teams.c (GOMP_distribute_static_worksharing): Likewise.
+ 
+ 2026-06-24  Paul-Antoine Arras  <parras@baylibre.com>
+ 
+ 	* libgomp.map (GOMP_6.0.2): New symbol version. Export
+ 	GOMP_has_masked_thread_num.
+ 	* libgomp_g.h (GOMP_has_masked_thread_num): New declaration.
+ 	* parallel.c (GOMP_has_masked_thread_num): New function.
+ 
+ 2026-06-24  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/125940
+ 	* Makefile.am (libgomp_la_SOURCES): Add numa.c.
+ 	* Makefile.in: Regenerate.
+ 	* affinity.c (gomp_get_current_numa_node,
+ 	gomp_get_numa_distance): Move to ...
+ 	* numa.c: ... this new file.
+ 	* config/linux/affinity.c (gomp_get_current_numa_node,
+ 	gomp_get_numa_distance): Move to ...
+ 	* config/linux/numa.c: ... this new file.
+ 
+ 2026-06-24  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	PR libgomp/125951
+ 	* target.c (omp_get_device_distances): Handle omp_default_device
+ 	in the fallback code.
+ 
+ 2026-06-22  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* config/gcn/teams.c (omp_get_num_teams_dim,
+ 	omp_get_team_num_dim): New functions.
+ 	* config/nvptx/teams.c (omp_get_num_teams_dim,
+ 	omp_get_team_num_dim): Likewise.
+ 	* fortran.c (omp_get_supported_active_team_dims_,
+ 	omp_get_supported_active_league_dims_): Likewise.
+ 	* icv.c (omp_get_thread_limit_dim): Likewise.
+ 	* libgomp-plugin.h (GOMP_OFFLOAD_get_numa_node): Remove spurious
+ 	const of 'const int' function return type.
+ 	(GOMP_OFFLOAD_supported_teams_dim,
+ 	GOMP_OFFLOAD_supported_threads_dim): Declare.
+ 	* libgomp.h (struct gomp_device_descr): Add supported_teams_dim_func
+ 	and supported_threads_dim_func members.
+ 	* libgomp.map (OMP_6.1): Add new OpenMP routines.
+ 	* libgomp.texi (Multidimensional Support Routines): Add new section.
+ 	(omp_get_device_distances): Fix chapter of spec reference.
+ 	* omp.h.in (omp_get_num_threads_dim, omp_get_thread_num_dim,
+ 	omp_get_thread_limit_dim, omp_get_supported_active_team_dims,
+ 	omp_get_supported_active_league_dims, omp_get_supported_teams_dim,
+ 	omp_get_supported_threads_dim, omp_get_num_teams_dim,
+ 	omp_get_team_num_dim, omp_get_device_distances): Declare.
+ 	* omp_lib.f90.in: Likewise.
+ 	* omp_lib.h.in: Likewise.
+ 	* parallel.c (omp_get_num_threads_dim,
+ 	omp_get_thread_num_dim): New functions.
+ 	* plugin/plugin-gcn.c (limit_worker_threads): Add comment.
+ 	(GOMP_OFFLOAD_supported_teams_dim,
+ 	GOMP_OFFLOAD_supported_threads_dim): New functions.
+ 	* plugin/plugin-nvptx.c (GOMP_OFFLOAD_supported_teams_dim,
+ 	GOMP_OFFLOAD_supported_threads_dim): New functions.
+ 	(nvptx_adjust_launch_bounds): Add comment.
+ 	* target.c (omp_get_supported_active_team_dims,
+ 	omp_get_supported_active_league_dims,
+ 	omp_get_supported_teams_dim,
+ 	omp_get_supported_threads_dim): New functions.
+ 	(gomp_load_plugin_for_device): dlsym added functions.
+ 	* teams.c (omp_get_num_teams_dim,
+ 	omp_get_team_num_dim): New functions.
+ 	* testsuite/libgomp.c/multi-dim-routines.c: New test.
+ 	* testsuite/libgomp.fortran/multi-dim-routines-2.F90: New test.
+ 	* testsuite/libgomp.fortran/multi-dim-routines.F90: New test.
+ 
  2026-06-19  Tobias Burnus  <tburnus@baylibre.com>
  
  	PR libgomp/125877
diff -Nrcpad gcc-17-20260621/libgomp/Makefile.am gcc-17-20260628/libgomp/Makefile.am
*** gcc-17-20260621/libgomp/Makefile.am	Sun Jun 21 22:32:18 2026
--- gcc-17-20260628/libgomp/Makefile.am	Sun Jun 28 22:32:22 2026
*************** libgomp_la_LINK = $(LINK) $(libgomp_la_L
*** 66,76 ****
  libgomp_la_SOURCES = alloc.c atomic.c barrier.c critical.c env.c error.c \
  	icv.c icv-device.c iter.c iter_ull.c loop.c loop_ull.c ordered.c \
  	parallel.c scope.c sections.c single.c task.c team.c work.c lock.c \
! 	mutex.c proc.c sem.c bar.c ptrlock.c time.c fortran.c affinity.c \
! 	target.c splay-tree.c libgomp-plugin.c oacc-parallel.c oacc-host.c \
! 	oacc-init.c oacc-mem.c oacc-async.c oacc-plugin.c oacc-cuda.c \
! 	priority_queue.c affinity-fmt.c teams.c allocator.c simple-allocator.c \
! 	oacc-profiling.c oacc-target.c target-indirect.c target-cxa-dso-dtor.c
  
  include $(top_srcdir)/plugin/Makefrag.am
  
--- 66,77 ----
  libgomp_la_SOURCES = alloc.c atomic.c barrier.c critical.c env.c error.c \
  	icv.c icv-device.c iter.c iter_ull.c loop.c loop_ull.c ordered.c \
  	parallel.c scope.c sections.c single.c task.c team.c work.c lock.c \
! 	mutex.c numa.c proc.c sem.c bar.c ptrlock.c time.c fortran.c \
! 	affinity.c target.c splay-tree.c libgomp-plugin.c oacc-parallel.c \
! 	oacc-host.c oacc-init.c oacc-mem.c oacc-async.c oacc-plugin.c \
! 	oacc-cuda.c priority_queue.c affinity-fmt.c teams.c allocator.c \
! 	simple-allocator.c oacc-profiling.c oacc-target.c target-indirect.c \
! 	target-cxa-dso-dtor.c
  
  include $(top_srcdir)/plugin/Makefrag.am
  
diff -Nrcpad gcc-17-20260621/libgomp/Makefile.in gcc-17-20260628/libgomp/Makefile.in
*** gcc-17-20260621/libgomp/Makefile.in	Sun Jun 21 22:32:18 2026
--- gcc-17-20260628/libgomp/Makefile.in	Sun Jun 28 22:32:22 2026
*************** am_libgomp_la_OBJECTS = alloc.lo atomic.
*** 219,225 ****
  	env.lo error.lo icv.lo icv-device.lo iter.lo iter_ull.lo \
  	loop.lo loop_ull.lo ordered.lo parallel.lo scope.lo \
  	sections.lo single.lo task.lo team.lo work.lo lock.lo mutex.lo \
! 	proc.lo sem.lo bar.lo ptrlock.lo time.lo fortran.lo \
  	affinity.lo target.lo splay-tree.lo libgomp-plugin.lo \
  	oacc-parallel.lo oacc-host.lo oacc-init.lo oacc-mem.lo \
  	oacc-async.lo oacc-plugin.lo oacc-cuda.lo priority_queue.lo \
--- 219,225 ----
  	env.lo error.lo icv.lo icv-device.lo iter.lo iter_ull.lo \
  	loop.lo loop_ull.lo ordered.lo parallel.lo scope.lo \
  	sections.lo single.lo task.lo team.lo work.lo lock.lo mutex.lo \
! 	numa.lo proc.lo sem.lo bar.lo ptrlock.lo time.lo fortran.lo \
  	affinity.lo target.lo splay-tree.lo libgomp-plugin.lo \
  	oacc-parallel.lo oacc-host.lo oacc-init.lo oacc-mem.lo \
  	oacc-async.lo oacc-plugin.lo oacc-cuda.lo priority_queue.lo \
*************** libgomp_la_LINK = $(LINK) $(libgomp_la_L
*** 554,566 ****
  libgomp_la_SOURCES = alloc.c atomic.c barrier.c critical.c env.c \
  	error.c icv.c icv-device.c iter.c iter_ull.c loop.c loop_ull.c \
  	ordered.c parallel.c scope.c sections.c single.c task.c team.c \
! 	work.c lock.c mutex.c proc.c sem.c bar.c ptrlock.c time.c \
! 	fortran.c affinity.c target.c splay-tree.c libgomp-plugin.c \
! 	oacc-parallel.c oacc-host.c oacc-init.c oacc-mem.c \
! 	oacc-async.c oacc-plugin.c oacc-cuda.c priority_queue.c \
! 	affinity-fmt.c teams.c allocator.c simple-allocator.c \
! 	oacc-profiling.c oacc-target.c target-indirect.c \
! 	target-cxa-dso-dtor.c $(am__append_3)
  
  # Nvidia PTX OpenACC plugin.
  @PLUGIN_NVPTX_TRUE@libgomp_plugin_nvptx_version_info = -version-info $(libtool_VERSION)
--- 554,566 ----
  libgomp_la_SOURCES = alloc.c atomic.c barrier.c critical.c env.c \
  	error.c icv.c icv-device.c iter.c iter_ull.c loop.c loop_ull.c \
  	ordered.c parallel.c scope.c sections.c single.c task.c team.c \
! 	work.c lock.c mutex.c numa.c proc.c sem.c bar.c ptrlock.c \
! 	time.c fortran.c affinity.c target.c splay-tree.c \
! 	libgomp-plugin.c oacc-parallel.c oacc-host.c oacc-init.c \
! 	oacc-mem.c oacc-async.c oacc-plugin.c oacc-cuda.c \
! 	priority_queue.c affinity-fmt.c teams.c allocator.c \
! 	simple-allocator.c oacc-profiling.c oacc-target.c \
! 	target-indirect.c target-cxa-dso-dtor.c $(am__append_3)
  
  # Nvidia PTX OpenACC plugin.
  @PLUGIN_NVPTX_TRUE@libgomp_plugin_nvptx_version_info = -version-info $(libtool_VERSION)
*************** distclean-compile:
*** 771,776 ****
--- 771,777 ----
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loop_ull.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mutex.Plo@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numa.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oacc-async.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oacc-cuda.Plo@am__quote@
  @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oacc-host.Plo@am__quote@
diff -Nrcpad gcc-17-20260621/libgomp/affinity.c gcc-17-20260628/libgomp/affinity.c
*** gcc-17-20260621/libgomp/affinity.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/affinity.c	Sun Jun 28 22:32:18 2026
*************** gomp_display_affinity_place (char *buffe
*** 152,170 ****
    gomp_display_string (buffer, size, ret, buf, strlen (buf));
  }
  
- int
- gomp_get_current_numa_node ()
- {
-   return -1;
- }
- 
- int
- gomp_get_numa_distance (int node1, int node2)
- {
-   (void) node1;
-   (void) node2;
-   return -1;
- }
- 
  ialias(omp_get_place_num_procs)
  ialias(omp_get_place_proc_ids)
--- 152,156 ----
diff -Nrcpad gcc-17-20260621/libgomp/atomic.c gcc-17-20260628/libgomp/atomic.c
*** gcc-17-20260621/libgomp/atomic.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/atomic.c	Sun Jun 28 22:32:18 2026
*************** GOMP_atomic_end (void)
*** 48,53 ****
--- 48,65 ----
    gomp_mutex_unlock (&atomic_lock);
  }
  
+ void
+ GOMP_reduction_start (void)
+ {
+   gomp_mutex_lock (&atomic_lock);
+ }
+ 
+ void
+ GOMP_reduction_end (void)
+ {
+   gomp_mutex_unlock (&atomic_lock);
+ }
+ 
  #if !GOMP_MUTEX_INIT_0
  static void __attribute__((constructor))
  initialize_atomic (void)
diff -Nrcpad gcc-17-20260621/libgomp/barrier.c gcc-17-20260628/libgomp/barrier.c
*** gcc-17-20260621/libgomp/barrier.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/barrier.c	Sun Jun 28 22:32:18 2026
***************
*** 27,32 ****
--- 27,34 ----
  
  #include "libgomp.h"
  
+ /* GOMP_barrier is no longer called by new code; it is only kept for
+    backward compatibility. New code uses GOMP_barrier_ext.  */
  
  void
  GOMP_barrier (void)
*************** GOMP_barrier (void)
*** 41,51 ****
--- 43,81 ----
    gomp_team_barrier_wait (&team->barrier);
  }
  
+ void
+ GOMP_barrier_ext (int kind __attribute__ ((unused)))
+ {
+   struct gomp_thread *thr = gomp_thread ();
+   struct gomp_team *team = thr->ts.team;
+ 
+   /* It is legal to have orphaned barriers.  */
+   if (team == NULL)
+     return;
+ 
+   gomp_team_barrier_wait (&team->barrier);
+ }
+ 
+ /* GOMP_barrier_cancel is no longer called by new code; it is only kept for
+    backward compatibility. New code uses GOMP_barrier_cancel_ext.  */
+ 
  bool
  GOMP_barrier_cancel (void)
  {
    struct gomp_thread *thr = gomp_thread ();
    struct gomp_team *team = thr->ts.team;
+ 
+   /* The compiler transforms to barrier_cancel when it sees that the
+      barrier is within a construct that can cancel.  Thus we should
+      never have an orphaned cancellable barrier.  */
+   return gomp_team_barrier_wait_cancel (&team->barrier);
+ }
+ 
+ bool
+ GOMP_barrier_cancel_ext (int kind __attribute__ ((unused)))
+ {
+   struct gomp_thread *thr = gomp_thread ();
+   struct gomp_team *team = thr->ts.team;
  
    /* The compiler transforms to barrier_cancel when it sees that the
       barrier is within a construct that can cancel.  Thus we should
diff -Nrcpad gcc-17-20260621/libgomp/config/gcn/teams.c gcc-17-20260628/libgomp/config/gcn/teams.c
*** gcc-17-20260621/libgomp/config/gcn/teams.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/config/gcn/teams.c	Sun Jun 28 22:32:18 2026
*************** GOMP_teams_reg (void (*fn) (void *), voi
*** 38,43 ****
--- 38,55 ----
    (void) thread_limit;
  }
  
+ /* For a distribute construct with static schedule, return the team ID and
+    number of teams packed into a single complexvalue.  */
+ 
+ _Complex int
+ GOMP_distribute_static_worksharing (void)
+ {
+   int __lds *gomp_team_num = (int __lds *) GOMP_TEAM_NUM;
+   unsigned tid = *gomp_team_num;
+   unsigned nteams = gomp_num_teams_var + 1;
+   return nteams + tid * 1I;
+ }
+ 
  int
  omp_get_num_teams (void)
  {
*************** omp_get_num_teams (void)
*** 45,55 ****
--- 57,85 ----
  }
  
  int
+ omp_get_num_teams_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_num_teams ();
+   return 1;
+ }
+ 
+ int
  omp_get_team_num (void)
  {
    int __lds *gomp_team_num = (int __lds *) GOMP_TEAM_NUM;
    return *gomp_team_num;
  }
  
+ int
+ omp_get_team_num_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_team_num ();
+   return 0;
+ }
+ 
  ialias (omp_get_num_teams)
+ ialias (omp_get_num_teams_dim)
  ialias (omp_get_team_num)
+ ialias (omp_get_team_num_dim)
diff -Nrcpad gcc-17-20260621/libgomp/config/linux/affinity.c gcc-17-20260628/libgomp/config/linux/affinity.c
*** gcc-17-20260621/libgomp/config/linux/affinity.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/config/linux/affinity.c	Sun Jun 28 22:32:18 2026
***************
*** 30,43 ****
  #endif
  #include "libgomp.h"
  #include "proc.h"
- #include <dirent.h>
  #include <errno.h>
  #include <stdlib.h>
  #include <stdio.h>
  #include <string.h>
  #include <unistd.h>
  #include <limits.h>
- #include <sys/syscall.h>
  
  #ifdef HAVE_PTHREAD_AFFINITY_NP
  
--- 30,41 ----
*************** ialias(omp_get_place_proc_ids)
*** 626,694 ****
  #include "../../affinity.c"
  
  #endif
- 
- static int num_numa_nodes = 0;
- static int *numa_distances = NULL;
- 
- int
- gomp_get_current_numa_node ()
- {
-   int node;
-   syscall (SYS_getcpu, NULL /* cpu */, &node, NULL /* no longer used */);
-   return node;
- }
- 
- int
- gomp_get_numa_distance (int node1, int node2)
- {
-   if (node1 < 0 || node2 < 0 || num_numa_nodes < 0)
-     return -1;
- 
-   if (numa_distances == NULL)
-     {
-       num_numa_nodes = -1;
-       DIR *dir = opendir ("/sys/devices/system/node");
-       if (!dir)
-         return -1;
-       struct dirent *dp;
-       int cnt = 0;
-       errno = 0;
-       while ((dp = readdir(dir)) != NULL)
- 	if (strncmp ("node", dp->d_name, 4 /* strlen ("node") */) == 0)
- 	  cnt++;
- 	else if (errno)
- 	  {
- 	    closedir (dir);
- 	    return -1;
- 	  }
-       closedir (dir);
-       numa_distances = (int *) gomp_malloc (sizeof (int) * cnt * cnt);
- 
-       constexpr int len = sizeof ("/sys/devices/system/node/node12345/"
-                                   "distance");
-       char filename[len];
- 
-       for (int i = 0; i < cnt; i++)
- 	{
- 	  if (len < snprintf (filename, sizeof (filename),
- 			      "/sys/devices/system/node/node%d/distance", i))
- 	    return -1;
- 	  int distance = -1;
- 	  FILE *in = fopen (filename, "r");
- 	  for (int j = 0; j < cnt; j++)
- 	    {
- 	      fscanf (in, "%d", &distance);
- 	      if (distance == -1)
- 		{
- 		  fclose (in);
- 		  free (numa_distances);
- 		  return -1;
- 		}
- 	      numa_distances[i * cnt + j] = distance;
- 	    }
- 	  fclose (in);
- 	}
-       num_numa_nodes = cnt;
-     }
-   return numa_distances[node1 * num_numa_nodes + node2];
- }
--- 624,626 ----
diff -Nrcpad gcc-17-20260621/libgomp/config/linux/numa.c gcc-17-20260628/libgomp/config/linux/numa.c
*** gcc-17-20260621/libgomp/config/linux/numa.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libgomp/config/linux/numa.c	Sun Jun 28 22:32:18 2026
***************
*** 0 ****
--- 1,104 ----
+ /* Copyright (C) 2026 Free Software Foundation, Inc.
+    Contributed by Tobias Burnus <tburnus@baylibre.com>
+ 
+    This file is part of the GNU Offloading and Multi Processing Library
+    (libgomp).
+ 
+    Libgomp 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.
+ 
+    Libgomp 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/>.  */
+ 
+ /* Linux specific version of internally used NUMA information routines.  */
+ 
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
+ #include "libgomp.h"
+ #include <dirent.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/syscall.h>
+ 
+ 
+ static int num_numa_nodes = 0;
+ static int *numa_distances = NULL;
+ 
+ int
+ gomp_get_current_numa_node ()
+ {
+   int node;
+   syscall (SYS_getcpu, NULL /* cpu */, &node, NULL /* no longer used */);
+   return node;
+ }
+ 
+ int
+ gomp_get_numa_distance (int node1, int node2)
+ {
+   if (node1 < 0 || node2 < 0 || num_numa_nodes < 0)
+     return -1;
+ 
+   if (numa_distances == NULL)
+     {
+       num_numa_nodes = -1;
+       DIR *dir = opendir ("/sys/devices/system/node");
+       if (!dir)
+ 	return -1;
+       struct dirent *dp;
+       int cnt = 0;
+       errno = 0;
+       while ((dp = readdir(dir)) != NULL)
+ 	if (strncmp ("node", dp->d_name, 4 /* strlen ("node") */) == 0)
+ 	  cnt++;
+ 	else if (errno)
+ 	  {
+ 	    closedir (dir);
+ 	    return -1;
+ 	  }
+       closedir (dir);
+       numa_distances = (int *) gomp_malloc (sizeof (int) * cnt * cnt);
+ 
+       constexpr int len = sizeof ("/sys/devices/system/node/node12345/"
+ 				  "distance");
+       char filename[len];
+ 
+       for (int i = 0; i < cnt; i++)
+ 	{
+ 	  if (len < snprintf (filename, sizeof (filename),
+ 			      "/sys/devices/system/node/node%d/distance", i))
+ 	    return -1;
+ 	  int distance = -1;
+ 	  FILE *in = fopen (filename, "r");
+ 	  for (int j = 0; j < cnt; j++)
+ 	    {
+ 	      fscanf (in, "%d", &distance);
+ 	      if (distance == -1)
+ 		{
+ 		  fclose (in);
+ 		  free (numa_distances);
+ 		  return -1;
+ 		}
+ 	      numa_distances[i * cnt + j] = distance;
+ 	    }
+ 	  fclose (in);
+ 	}
+       num_numa_nodes = cnt;
+     }
+   return numa_distances[node1 * num_numa_nodes + node2];
+ }
diff -Nrcpad gcc-17-20260621/libgomp/config/nvptx/teams.c gcc-17-20260628/libgomp/config/nvptx/teams.c
*** gcc-17-20260621/libgomp/config/nvptx/teams.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/config/nvptx/teams.c	Sun Jun 28 22:32:18 2026
*************** GOMP_teams_reg (void (*fn) (void *), voi
*** 41,46 ****
--- 41,57 ----
    (void) thread_limit;
  }
  
+ /* For a distribute construct with static schedule, return the team ID and
+    number of teams packed into a single complexvalue.  */
+ 
+ _Complex int
+ GOMP_distribute_static_worksharing (void)
+ {
+   unsigned tid = __gomp_team_num;
+   unsigned nteams = gomp_num_teams_var + 1;
+   return nteams + tid * 1I;
+ }
+ 
  int
  omp_get_num_teams (void)
  {
*************** omp_get_num_teams (void)
*** 48,57 ****
--- 59,86 ----
  }
  
  int
+ omp_get_num_teams_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_num_teams ();
+   return 1;
+ }
+ 
+ int
  omp_get_team_num (void)
  {
    return __gomp_team_num;
  }
  
+ int
+ omp_get_team_num_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_team_num ();
+   return 0;
+ }
+ 
  ialias (omp_get_num_teams)
+ ialias (omp_get_num_teams_dim)
  ialias (omp_get_team_num)
+ ialias (omp_get_team_num_dim)
diff -Nrcpad gcc-17-20260621/libgomp/fortran.c gcc-17-20260628/libgomp/fortran.c
*** gcc-17-20260621/libgomp/fortran.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/fortran.c	Sun Jun 28 22:32:18 2026
*************** ialias_redirect (omp_get_interop_name)
*** 104,109 ****
--- 104,111 ----
  ialias_redirect (omp_get_interop_type_desc)
  ialias_redirect (omp_get_interop_rc_desc)
  ialias_redirect (omp_control_tool)
+ ialias_redirect (omp_get_supported_active_team_dims)
+ ialias_redirect (omp_get_supported_active_league_dims)
  #endif
  
  #ifndef LIBGOMP_GNU_SYMBOL_VERSIONING
*************** omp_get_uid_from_device_8_ (const char *
*** 861,866 ****
--- 863,880 ----
  
  #ifndef LIBGOMP_OFFLOADED_ONLY
  
+ int
+ omp_get_supported_active_team_dims_ (int *device_num, int *native_support)
+ {
+   return omp_get_supported_active_team_dims (*device_num, *native_support);
+ }
+ 
+ int
+ omp_get_supported_active_league_dims_ (int *device_num, int *native_support)
+ {
+   return omp_get_supported_active_league_dims (*device_num, *native_support);
+ }
+ 
  void
  omp_display_env_ (const int32_t *verbose)
  {
diff -Nrcpad gcc-17-20260621/libgomp/icv.c gcc-17-20260628/libgomp/icv.c
*** gcc-17-20260621/libgomp/icv.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/icv.c	Sun Jun 28 22:32:18 2026
*************** omp_get_thread_limit (void)
*** 118,123 ****
--- 118,131 ----
    return icv->thread_limit_var > INT_MAX ? INT_MAX : icv->thread_limit_var;
  }
  
+ int
+ omp_get_thread_limit_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_thread_limit ();
+   return 1;
+ }
+ 
  void
  omp_set_max_active_levels (int max_levels)
  {
*************** ialias (omp_set_schedule)
*** 239,244 ****
--- 247,253 ----
  ialias (omp_get_schedule)
  ialias (omp_get_max_threads)
  ialias (omp_get_thread_limit)
+ ialias (omp_get_thread_limit_dim)
  ialias (omp_set_max_active_levels)
  ialias (omp_get_max_active_levels)
  ialias (omp_get_supported_active_levels)
diff -Nrcpad gcc-17-20260621/libgomp/libgomp-plugin.h gcc-17-20260628/libgomp/libgomp-plugin.h
*** gcc-17-20260621/libgomp/libgomp-plugin.h	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/libgomp-plugin.h	Sun Jun 28 22:32:18 2026
*************** extern void GOMP_PLUGIN_target_rev (uint
*** 159,165 ****
  /* Prototypes for functions implemented by libgomp plugins.  */
  extern const char *GOMP_OFFLOAD_get_name (void);
  extern const char *GOMP_OFFLOAD_get_uid (int);
! extern const int GOMP_OFFLOAD_get_numa_node (int);
  
  extern unsigned int GOMP_OFFLOAD_get_caps (void);
  extern int GOMP_OFFLOAD_get_type (void);
--- 159,167 ----
  /* Prototypes for functions implemented by libgomp plugins.  */
  extern const char *GOMP_OFFLOAD_get_name (void);
  extern const char *GOMP_OFFLOAD_get_uid (int);
! extern int GOMP_OFFLOAD_get_numa_node (int);
! extern int GOMP_OFFLOAD_supported_teams_dim (int, int);
! extern int GOMP_OFFLOAD_supported_threads_dim (int, int);
  
  extern unsigned int GOMP_OFFLOAD_get_caps (void);
  extern int GOMP_OFFLOAD_get_type (void);
diff -Nrcpad gcc-17-20260621/libgomp/libgomp.h gcc-17-20260628/libgomp/libgomp.h
*** gcc-17-20260621/libgomp/libgomp.h	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/libgomp.h	Sun Jun 28 22:32:18 2026
*************** struct gomp_device_descr
*** 1449,1454 ****
--- 1449,1456 ----
    __typeof (GOMP_OFFLOAD_get_name) *get_name_func;
    __typeof (GOMP_OFFLOAD_get_uid) *get_uid_func;
    __typeof (GOMP_OFFLOAD_get_numa_node) *get_numa_node_func;
+   __typeof (GOMP_OFFLOAD_supported_teams_dim) *supported_teams_dim_func;
+   __typeof (GOMP_OFFLOAD_supported_threads_dim) *supported_threads_dim_func;
    __typeof (GOMP_OFFLOAD_get_caps) *get_caps_func;
    __typeof (GOMP_OFFLOAD_get_type) *get_type_func;
    __typeof (GOMP_OFFLOAD_get_num_devices) *get_num_devices_func;
diff -Nrcpad gcc-17-20260621/libgomp/libgomp.map gcc-17-20260628/libgomp/libgomp.map
*** gcc-17-20260621/libgomp/libgomp.map	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/libgomp.map	Sun Jun 28 22:32:18 2026
*************** OMP_6.0 {
*** 250,255 ****
--- 250,266 ----
  OMP_6.1 {
    global:
  	omp_get_device_distances;
+ 	omp_get_num_teams_dim;
+ 	omp_get_num_threads_dim;
+ 	omp_get_supported_active_league_dims;
+ 	omp_get_supported_active_league_dims_;
+ 	omp_get_supported_active_team_dims;
+ 	omp_get_supported_active_team_dims_;
+ 	omp_get_supported_teams_dim;
+ 	omp_get_supported_threads_dim;
+ 	omp_get_team_num_dim;
+ 	omp_get_thread_limit_dim;
+ 	omp_get_thread_num_dim;
  } OMP_6.0;
  
  GOMP_1.0 {
*************** GOMP_6.0.1 {
*** 471,476 ****
--- 482,498 ----
  	omp_target_memset_async;
  } GOMP_6.0;
  
+ GOMP_6.0.2 {
+   global:
+ 	GOMP_has_masked_thread_num;
+ 	GOMP_loop_static_worksharing;
+ 	GOMP_distribute_static_worksharing;
+ 	GOMP_barrier_ext;
+ 	GOMP_barrier_cancel_ext;
+ 	GOMP_reduction_start;
+ 	GOMP_reduction_end;
+ } GOMP_6.0.1;
+ 
  OACC_2.0 {
    global:
  	acc_get_num_devices;
diff -Nrcpad gcc-17-20260621/libgomp/libgomp.texi gcc-17-20260628/libgomp/libgomp.texi
*** gcc-17-20260621/libgomp/libgomp.texi	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/libgomp.texi	Sun Jun 28 22:32:18 2026
*************** specification in version 5.2.
*** 701,706 ****
--- 701,707 ----
  * Thread Team Routines::
  * Thread Affinity Routines::
  * Teams Region Routines::
+ * Multidimensional Support Routines::
  * Tasking Routines::
  * Resource Relinquishing Routines::
  * Device Information Routines::
*************** the program @code{omp_get_num_threads} r
*** 784,790 ****
  
  The default team size may be initialized at startup by the
  @env{OMP_NUM_THREADS} environment variable.  At runtime, the size
! of the current team may be set either by the @code{NUM_THREADS}
  clause or by @code{omp_set_num_threads}.  If none of the above were
  used to define a specific value and @env{OMP_DYNAMIC} is disabled,
  one thread per CPU online is used.
--- 785,791 ----
  
  The default team size may be initialized at startup by the
  @env{OMP_NUM_THREADS} environment variable.  At runtime, the size
! of the current team may be set either by the @code{num_threads}
  clause or by @code{omp_set_num_threads}.  If none of the above were
  used to define a specific value and @env{OMP_DYNAMIC} is disabled,
  one thread per CPU online is used.
*************** one thread per CPU online is used.
*** 800,806 ****
  @end multitable
  
  @item @emph{See also}:
! @ref{omp_get_max_threads}, @ref{omp_set_num_threads}, @ref{OMP_NUM_THREADS}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.2.
--- 801,808 ----
  @end multitable
  
  @item @emph{See also}:
! @ref{omp_get_max_threads}, @ref{omp_set_num_threads},
! @ref{omp_get_num_threads_dim}, @ref{OMP_NUM_THREADS}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.2.
*************** value of the primary thread of a team is
*** 855,861 ****
  @end multitable
  
  @item @emph{See also}:
! @ref{omp_get_num_threads}, @ref{omp_get_ancestor_thread_num}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.4.
--- 857,864 ----
  @end multitable
  
  @item @emph{See also}:
! @ref{omp_get_thread_num_dim}, @ref{omp_get_num_threads},
! @ref{omp_get_ancestor_thread_num}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.4.
*************** Returns the number of teams in the curre
*** 1421,1426 ****
--- 1424,1432 ----
  @item @emph{Interface}: @tab @code{integer function omp_get_num_teams()}
  @end multitable
  
+ @item @emph{See also}:
+ @ref{omp_get_num_teams_dim}, @ref{OMP_NUM_TEAMS}, @ref{omp_get_team_num}
+ 
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.32.
  @end table
*************** Returns the team number of the calling t
*** 1443,1448 ****
--- 1449,1457 ----
  @item @emph{Interface}: @tab @code{integer function omp_get_team_num()}
  @end multitable
  
+ @item @emph{See also}:
+ @ref{omp_get_num_teams_dim}, @ref{OMP_NUM_TEAMS}, @ref{omp_get_num_teams}
+ 
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.33.
  @end table
*************** for each team created by the teams const
*** 1536,1542 ****
  @subsection @code{omp_get_thread_limit} -- Maximum number of threads
  @table @asis
  @item @emph{Description}:
! Return the maximum number of threads of the program.
  
  @item @emph{C/C++}:
  @multitable @columnfractions .20 .80
--- 1545,1553 ----
  @subsection @code{omp_get_thread_limit} -- Maximum number of threads
  @table @asis
  @item @emph{Description}:
! Return the maximal number of threads that are available in the current
! contention group to execute tasks, i.e. the unidimenional value of
! the @var{thread-limit-var} ICV.
  
  @item @emph{C/C++}:
  @multitable @columnfractions .20 .80
*************** Return the maximum number of threads of
*** 1549,1555 ****
  @end multitable
  
  @item @emph{See also}:
! @ref{omp_get_max_threads}, @ref{OMP_THREAD_LIMIT}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.14.
--- 1560,1566 ----
  @end multitable
  
  @item @emph{See also}:
! @ref{omp_get_thread_limit_dim}, @ref{omp_get_max_threads}, @ref{OMP_THREAD_LIMIT}
  
  @item @emph{Reference}:
  @uref{https://www.openmp.org, OpenMP specification v4.5}, Section 3.2.14.
*************** Return the maximum number of threads of
*** 1557,1562 ****
--- 1568,1943 ----
  
  
  
+ @node Multidimensional Support Routines
+ @section Multidimensional Support Routines
+ 
+ Routines that retrieve information about the execution environment with
+ multiple spatial dimensions.  They have C linkage and do not throw exceptions.
+ 
+ The dimensional space is unidimensional, if the number of active spaces
+ is one.  To create a multidimensional space, the @code{dim} modifier must
+ be specified with a dimension greater than one in the @code{num_teams},
+ @code{num_thread_limits}, or @code{num_threads} clause.
+ 
+ The relation between the unidimensional and the spatial values is as
+ follows: For the size, the unidimensional size is the product of the
+ spatial sizes.  For the thread or team number, the unidimensional number
+ is the respective index of dimension 0 plus the index of dimension 1
+ times the size of dimension 0 plus the index of dimension 2 times the
+ size of dimension 1 times the size of dimension 0 etc.  If the active
+ spatial dimensions is one, the spatial dimensional result for dimension
+ zero is the same as returned by the respective unidimensional routine.
+ 
+ Note that there is no means to obtain the number of active dimensions in
+ the general case as the size of an inactive spatial dimension is one,
+ which is also a permitted size for an active spatial dimension.
+ 
+ @menu
+ * omp_get_num_threads_dim::       Size of a dimension of the active team
+ * omp_get_thread_num_dim::        Dimensional ID of the current thread
+ * omp_get_num_teams_dim::         Number of teams along a dimension
+ * omp_get_team_num_dim::          Get team number in a dimension
+ * omp_get_thread_limit_dim::      Maximum number of threads in a dimension
+ * omp_get_supported_active_team_dims::   Number of supported team dimensions
+ * omp_get_supported_active_league_dims:: Number of supported thread dimensions
+ * omp_get_supported_threads_dim:: Get upper limit of threads in a dimension
+ * omp_get_supported_teams_dim::   Get upper limit of teams in a dimension
+ @end menu
+ 
+ 
+ @node omp_get_num_threads_dim
+ @subsection @code{omp_get_num_threads_dim} -- Size of a dimension of the active team
+ @table @asis
+ Returns the size in dimension @var{DIM} of threads in the current team and,
+ therefore, of the parallel region that binds to that team, i.e. the value
+ of the @var{team-size-var} ICV in dimension @var{dim}.  For inactive spatial
+ dimensions, the routine returns 1.  The dimension argument @var{DIM} must be
+ non-negative.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_num_threads_dim(int dim)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_num_threads_dim(dim)}
+ @item                   @tab @code{integer :: dim}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_num_threads}, @ref{omp_get_thread_num_dim},
+ @ref{omp_get_thread_limit_dim}, @ref{omp_get_max_threads},
+ @ref{omp_set_num_threads}, @ref{OMP_NUM_THREADS},
+ @ref{omp_get_supported_active_league_dims}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.1
+ @end table
+ 
+ 
+ 
+ @node omp_get_thread_num_dim
+ @subsection @code{omp_get_thread_num_dim} -- Dimensional ID of the current thread
+ @table @asis
+ @item @emph{Description}:
+ Returns the value of dimension @var{dim} of the multidimensional thread
+ identification number for the invoking thread in the current team, i.e. the
+ value of the @var{thread-num-var} ICV in dimension @var{dim}.  For inactive
+ spatial dimensions, the routine returns 0.  The dimension argument @var{DIM}
+ must be non-negative.
+ 
+ The returned value is between zero and one less than the value returned by
+ @code{omp_get_num_threads} for the dimension @var{dim}.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_thread_num(int dim)}
+ @item                   @tab @code{integer :: dim}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_thread_num(dim)}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_thread_num}, @ref{omp_get_num_threads_dim}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.2
+ @end table
+ 
+ 
+ 
+ @node omp_get_num_teams_dim
+ @subsection @code{omp_get_num_teams_dim} -- Number of teams along a dimension
+ @table @asis
+ @item @emph{description}:
+ Returns the size in dimension @var{DIM} of the number of initial teams, i.e.
+ the value of the @var{league-size-var} ICV in dimension @var{dim}.  For inactive
+ spatial dimensions, the routine returns 1.  The dimension argument @var{DIM}
+ must be non-negative.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{c/c++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{prototype}: @tab @code{int omp_get_num_teams(int dim)}
+ @end multitable
+ 
+ @item @emph{fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{interface}: @tab @code{integer function omp_get_num_teams(dim)}
+ @item                   @tab @code{integer :: dim}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_num_teams}, @ref{OMP_NUM_TEAMS}, @ref{omp_get_team_num_dim}
+ @ref{omp_get_supported_active_team_dims}
+ 
+ 
+ @item @emph{reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.3
+ @end table
+ 
+ 
+ 
+ @node omp_get_team_num_dim
+ @subsection @code{omp_get_team_num_dim} -- Get team number in a dimension
+ @table @asis
+ @item @emph{description}:
+ Returns the value of dimension @var{dim} of the multidimensional team
+ identification number in the current team, i.e.  the value of the
+ @var{team-num-var} ICV in dimension @var{dim}.  For inactive spatial
+ dimensions, the routine returns 0.  The dimension argument @var{DIM}
+ must be non-negative.
+ 
+ The returned value is between zero and one less than the value returned by
+ @code{omp_get_num_teams_dim} for the dimension @var{dim}.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{c/c++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{prototype}: @tab @code{int omp_get_team_num_dim(int dim);}
+ @end multitable
+ 
+ @item @emph{fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{interface}: @tab @code{integer function omp_get_team_num_dim(dim)}
+ @item                   @tab @code{integer :: dim}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_team_num_dim}, @ref{OMP_NUM_TEAMS}, @ref{omp_get_num_teams_dim}
+ 
+ @item @emph{reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.4
+ @end table
+ 
+ 
+ 
+ @node omp_get_thread_limit_dim
+ @subsection @code{omp_get_thread_limit_dim} -- Maximum number of threads in a dimension
+ @table @asis
+ @item @emph{Description}:
+ Return the maximal number of threads in dimension @var{dim} that are available
+ in the current contention group in that dimension, i.e. the value of the
+ @var{thread-limit-var} ICV in dimension @var{dim}.  The routine returns one if
+ the dimension @var{dim} exceeds the number of dimensions for which values have
+ been specified in the @var{thread-limit-var} ICV.  The dimension argument
+ @var{DIM} must be non-negative.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_thread_limit_dim(int dim)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_thread_limit_dim(dim)}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_thread_limit}, @ref{omp_get_thread_limit_dim},
+ @ref{omp_get_max_threads}, @ref{OMP_THREAD_LIMIT}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.5
+ @end table
+ 
+ 
+ 
+ @node omp_get_supported_active_team_dims
+ @subsection @code{omp_get_supported_active_team_dims} -- Number of supported team dimensions
+ @table @asis
+ @item @emph{Description}:
+ The routine returns the number of active spatial dimensions that the device with
+ @var{device_num} supports for teams.  If @var{native_support} is set to true, it
+ returns the maximal number active spatial dimensions that are natively supported
+ by the device.
+ 
+ The effect when the routine is invoked from within a @code{target} region is unspecified.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_supported_active_team_dims(int device_num, int native_support)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_supported_active_team_dims(device_num, native_support)}
+ @item                   @tab @code{integer :: device_num}
+ @item                   @tab @code{logical :: native_support}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_supported_teams_dim}, @ref{omp_get_num_teams_dim}, @ref{OMP_NUM_TEAMS}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.6
+ @end table
+ 
+ 
+ 
+ @node omp_get_supported_active_league_dims
+ @subsection @code{omp_get_supported_active_league_dims} -- Number of supported thread dimensions
+ @table @asis
+ @item @emph{Description}:
+ The routine returns the number of active spatial dimensions that the device with
+ @var{device_num} supports for league spaces, i.e. the number of threads available
+ to each team in the league.  If @var{native_support} is set to true, it returns
+ the maximal number active spatial dimensions that are natively supported by the
+ device.
+ 
+ The effect when the routine is invoked from within a @code{target} region is unspecified.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_supported_active_league_dims(int device_num, int native_support)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_supported_active_league_dims(device_num, native_support)}
+ @item                   @tab @code{integer :: device_num}
+ @item                   @tab @code{logical :: native_support}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_supported_threads_dim}, @ref{omp_get_thread_limit_dim},
+ @ref{omp_get_num_teams_dim}, @ref{OMP_THREAD_LIMIT}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.7
+ @end table
+ 
+ 
+ 
+ @node omp_get_supported_threads_dim
+ @subsection @code{omp_get_supported_threads_dim} -- Get upper limit of threads in a dimension
+ @table @asis
+ @item @emph{Description}:
+ The routine returns an upper bound for the number of threads supported in
+ dimension @var{dim} on device @var{device_num}.  If @var{dim} specifies a number
+ that exceeds the number of supported active spatial dimensions for threads, the
+ routine returns one.
+ 
+ Note: The actually supported number of threads by dimension might be lower,
+ depending on used number of threads in other dimensions, the number of
+ teams, and other parameters like the register use of the code to be executed.
+ 
+ The effect when the routine is invoked from within a @code{target} region is unspecified.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_supported_threads_dim(int device_num, int dim)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_supported_threads_dim(device_num, dim)}
+ @item                   @tab @code{integer :: device_num, dim}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_supported_active_league_dims}, @ref{omp_get_thread_limit_dim},
+ @ref{omp_get_max_threads}, @ref{omp_get_num_teams_dim}, @ref{OMP_THREAD_LIMIT}
+ 
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.8
+ @end table
+ 
+ 
+ 
+ @node omp_get_supported_teams_dim
+ @subsection @code{omp_get_supported_teams_dim} -- Get upper limit of teams in a dimension
+ @table @asis
+ @item @emph{Description}:
+ The routine returns an upper bound for the number of teams supported in
+ dimension @var{dim} on device @var{device_num}.  If @var{dim} specifies a number
+ that exceeds the number of supported active spatial dimensions for teams, the
+ routine returns one.
+ 
+ Note: The actually supported number of teams by dimension might be lower,
+ depending on used number of teams in other dimensions and other parameters.
+ 
+ The effect when the routine is invoked from within a @code{target} region is unspecified.
+ 
+ Fortran note: In GCC, this routine does not support passing default-kind integer
+ arguments with @code{-fdefault-integer-8}.
+ 
+ @item @emph{C/C++}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Prototype}: @tab @code{int omp_get_supported_teams_dim(int device_num, int dim)}
+ @end multitable
+ 
+ @item @emph{Fortran}:
+ @multitable @columnfractions .20 .80
+ @item @emph{Interface}: @tab @code{integer function omp_get_supported_teams_dim(device_num, dim)}
+ @item                   @tab @code{integer :: device_num, dim}
+ @end multitable
+ 
+ @item @emph{See also}:
+ @ref{omp_get_supported_active_team_dims}, @ref{omp_get_num_teams_dim}, @ref{OMP_NUM_TEAMS}
+ 
+ @item @emph{Reference}:
+ @c TODO: Update once OpenMP 6.1 is released
+ @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 29.9
+ @end table
+ 
+ 
+ 
  @node Tasking Routines
  @section Tasking Routines
  
*************** arguments with @code{-fdefault-integer-8
*** 2064,2070 ****
  
  @item @emph{Reference}:
  @c TODO: Update once OpenMP 6.1 is released
! @uref{https://www.openmp.org, OpenMP specification Technical Report 15}, Section 3.16
  @end table
  
  
--- 2445,2451 ----
  
  @item @emph{Reference}:
  @c TODO: Update once OpenMP 6.1 is released
! @uref{https://www.openmp.org, OpenMP Technical Report 15}, Section 31.16
  @end table
  
  
*************** The implementation remark:
*** 7470,7476 ****
  @item OpenMP code that has a @code{requires} directive with @code{self_maps} or
        @code{unified_shared_memory} runs on nvptx devices if and only if
        all of those support the @code{pageableMemoryAccess} property;@footnote{
!       @uref{https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#um-requirements}}
        otherwise, all nvptx device are removed from the list of available
        devices (``host fallback'').
  @item The default per-warp stack size is 128 kiB; see also @code{-msoft-stack}
--- 7851,7857 ----
  @item OpenMP code that has a @code{requires} directive with @code{self_maps} or
        @code{unified_shared_memory} runs on nvptx devices if and only if
        all of those support the @code{pageableMemoryAccess} property;@footnote{
!       @uref{https://docs.nvidia.com/cuda/cuda-programming-guide/}}
        otherwise, all nvptx device are removed from the list of available
        devices (``host fallback'').
  @item The default per-warp stack size is 128 kiB; see also @code{-msoft-stack}
*************** presented by libgomp.  Only maintainers
*** 7642,7651 ****
  @section Implementing MASKED and MASTER construct
  
  @smallexample
! if (omp_get_thread_num () == thread_num)
    block
  @end smallexample
  
  Hereby, @var{thread_num} has the value of the argument to the @code{filter}
  clause or zero if not specified.
  
--- 8023,8040 ----
  @section Implementing MASKED and MASTER construct
  
  @smallexample
! if (GOMP_has_masked_thread_num(thread_num))
    block
  @end smallexample
  
+ @code{GOMP_has_masked_thread_num} encapsulates the following check, so that OMPT
+ can distinguish the compiler-generated code from user-level thread-number
+ queries:
+ 
+ @smallexample
+ omp_get_thread_num() == @var{thread_num}
+ @end smallexample
+ 
  Hereby, @var{thread_num} has the value of the argument to the @code{filter}
  clause or zero if not specified.
  
*************** The target should implement the @code{__
*** 7689,7701 ****
  Failing that we could add
  
  @smallexample
!   void GOMP_atomic_enter (void)
!   void GOMP_atomic_exit (void)
  @end smallexample
  
  which reuses the regular lock code, but with yet another lock
  object private to the library.
  
  
  
  @node Implementing FLUSH construct
--- 8078,8094 ----
  Failing that we could add
  
  @smallexample
!   void GOMP_atomic_start (void)
!   void GOMP_atomic_end (void)
  @end smallexample
  
  which reuses the regular lock code, but with yet another lock
  object private to the library.
  
+ Those two functions are used exclusively for explicit @code{atomic} constructs;
+ reductions use @code{GOMP_reduction_start} and @code{GOMP_reduction_end} instead
+ (see @ref{Implementing REDUCTION clause}).
+ 
  
  
  @node Implementing FLUSH construct
*************** Expands to the @code{__sync_synchronize}
*** 7709,7717 ****
  @section Implementing BARRIER construct
  
  @smallexample
!   void GOMP_barrier (void)
  @end smallexample
  
  
  @node Implementing THREADPRIVATE construct
  @section Implementing THREADPRIVATE construct
--- 8102,8121 ----
  @section Implementing BARRIER construct
  
  @smallexample
!   void GOMP_barrier_ext (int kind)
!   void GOMP_barrier_cancel_ext (int kind)
  @end smallexample
  
+ @var{kind} should be @code{GOMP_BARRIER_EXPLICIT}. Other values are for implicit
+ barriers resulting from parallel or work-sharing constructs.
+ 
+ @code{GOMP_barrier} and @code{GOMP_barrier_cancel} are kept for backward
+ compatibility but new code only calls the @code{_ext} variants.
+ 
+ @code{GOMP_barrier_cancel_ext} should be used when the barrier happens within
+ a cancellable construct.
+ 
+ 
  
  @node Implementing THREADPRIVATE construct
  @section Implementing THREADPRIVATE construct
*************** thread's @var{team_id}.  The thread stor
*** 7790,7795 ****
--- 8194,8210 ----
  array, and after the barrier, the primary thread iterates over the
  array to collect the values.
  
+ In cases where an atomic update cannot be used (e.g. for a reduction involving
+ more than one scalar), a critical section is required. Dedicated entry points
+ are used rather than @code{GOMP_atomic_start} and @code{GOMP_atomic_end} so that
+ OMPT can distinguish reduction critical sections from user-level atomic
+ constructs. The section is bracketed by:
+ 
+ @smallexample
+   void GOMP_reduction_start (void)
+   void GOMP_reduction_end (void)
+ @end smallexample
+ 
  
  @node Implementing PARALLEL construct
  @section Implementing PARALLEL construct
*************** variables.  So the expression should rem
*** 7900,7910 ****
  subfunction.  We can also pull it into a local variable if we like,
  but since its supposed to remain unchanged, we can also not if we like.
  
! If we have SCHEDULE(STATIC), and no ORDERED, then we ought to be
! able to get away with no work-sharing context at all, since we can
! simply perform the arithmetic directly in each thread to divide up
! the iterations.  Which would mean that we wouldn't need to call any
! of these routines.
  
  There are separate routines for handling loops with an ORDERED
  clause.  Bookkeeping for that is non-trivial...
--- 8315,8337 ----
  subfunction.  We can also pull it into a local variable if we like,
  but since its supposed to remain unchanged, we can also not if we like.
  
! For @code{schedule(static)} without @code{ordered}, the compiler uses:
! 
! @smallexample
!   _Complex int GOMP_loop_static_worksharing (void)
! @end smallexample
! 
! which returns the thread id in the real part and the thread count in the imaginary
! part as a single value, avoiding separate @code{omp_get_thread_num} /
! @code{omp_get_num_threads} calls that OMPT cannot distinguish from user queries.
! 
! Similarly, for @code{distribute} constructs:
! 
! @smallexample
!   _Complex int GOMP_distribute_static_worksharing (void)
! @end smallexample
! 
! returns the team id and team count.
  
  There are separate routines for handling loops with an ORDERED
  clause.  Bookkeeping for that is non-trivial...
diff -Nrcpad gcc-17-20260621/libgomp/libgomp_g.h gcc-17-20260628/libgomp/libgomp_g.h
*** gcc-17-20260621/libgomp/libgomp_g.h	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/libgomp_g.h	Sun Jun 28 22:32:18 2026
***************
*** 37,47 ****
--- 37,51 ----
  
  extern void GOMP_atomic_start (void);
  extern void GOMP_atomic_end (void);
+ extern void GOMP_reduction_start (void);
+ extern void GOMP_reduction_end (void);
  
  /* barrier.c */
  
  extern void GOMP_barrier (void);
+ extern void GOMP_barrier_ext (int);
  extern bool GOMP_barrier_cancel (void);
+ extern bool GOMP_barrier_cancel_ext (int);
  
  /* critical.c */
  
*************** extern unsigned GOMP_parallel_reductions
*** 293,298 ****
--- 297,304 ----
  					  unsigned);
  extern bool GOMP_cancel (int, bool);
  extern bool GOMP_cancellation_point (int);
+ extern bool GOMP_has_masked_thread_num (int);
+ extern __complex__ int GOMP_loop_static_worksharing (void);
  
  /* task.c */
  
*************** extern void *GOMP_target_map_indirect_pt
*** 373,378 ****
--- 379,385 ----
  
  extern void GOMP_teams_reg (void (*) (void *), void *, unsigned, unsigned,
  			    unsigned);
+ extern __complex__ int GOMP_distribute_static_worksharing (void);
  
  /* allocator.c */
  
diff -Nrcpad gcc-17-20260621/libgomp/numa.c gcc-17-20260628/libgomp/numa.c
*** gcc-17-20260621/libgomp/numa.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libgomp/numa.c	Sun Jun 28 22:32:18 2026
***************
*** 0 ****
--- 1,40 ----
+ /* Copyright (C) 2026 Free Software Foundation, Inc.
+    Contributed by Tobias Burnus <tburnus@baylibre.com>
+ 
+    This file is part of the GNU Offloading and Multi Processing Library
+    (libgomp).
+ 
+    Libgomp 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.
+ 
+    Libgomp 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/>.  */
+ 
+ /* Stub version of internally used NUMA information routines.  */
+ 
+ int
+ gomp_get_current_numa_node ()
+ {
+   return -1;
+ }
+ 
+ int
+ gomp_get_numa_distance (int node1, int node2)
+ {
+   (void) node1;
+   (void) node2;
+   return -1;
+ }
diff -Nrcpad gcc-17-20260621/libgomp/omp.h.in gcc-17-20260628/libgomp/omp.h.in
*** gcc-17-20260621/libgomp/omp.h.in	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/omp.h.in	Sun Jun 28 22:32:18 2026
*************** extern "C" {
*** 269,276 ****
--- 269,278 ----
  
  extern void omp_set_num_threads (int) __GOMP_NOTHROW;
  extern int omp_get_num_threads (void) __GOMP_NOTHROW;
+ extern int omp_get_num_threads_dim (int) __GOMP_NOTHROW;
  extern int omp_get_max_threads (void) __GOMP_NOTHROW;
  extern int omp_get_thread_num (void) __GOMP_NOTHROW;
+ extern int omp_get_thread_num_dim (int) __GOMP_NOTHROW;
  extern int omp_get_num_procs (void) __GOMP_NOTHROW;
  
  extern int omp_in_parallel (void) __GOMP_NOTHROW;
*************** extern double omp_get_wtick (void) __GOM
*** 303,310 ****
--- 305,317 ----
  extern void omp_set_schedule (omp_sched_t, int) __GOMP_NOTHROW;
  extern void omp_get_schedule (omp_sched_t *, int *) __GOMP_NOTHROW;
  extern int omp_get_thread_limit (void) __GOMP_NOTHROW;
+ extern int omp_get_thread_limit_dim (int) __GOMP_NOTHROW;
  extern void omp_set_max_active_levels (int) __GOMP_NOTHROW;
  extern int omp_get_max_active_levels (void) __GOMP_NOTHROW;
+ extern int omp_get_supported_active_team_dims (int, int) __GOMP_NOTHROW;
+ extern int omp_get_supported_active_league_dims (int, int) __GOMP_NOTHROW;
+ extern int omp_get_supported_teams_dim (int, int) __GOMP_NOTHROW;
+ extern int omp_get_supported_threads_dim (int, int) __GOMP_NOTHROW;
  extern int omp_get_supported_active_levels (void) __GOMP_NOTHROW;
  extern int omp_get_level (void) __GOMP_NOTHROW;
  extern int omp_get_ancestor_thread_num (int) __GOMP_NOTHROW;
*************** extern int omp_get_default_device (void)
*** 328,334 ****
--- 335,343 ----
  extern int omp_get_num_devices (void) __GOMP_NOTHROW;
  extern int omp_get_device_num (void) __GOMP_NOTHROW;
  extern int omp_get_num_teams (void) __GOMP_NOTHROW;
+ extern int omp_get_num_teams_dim (int) __GOMP_NOTHROW;
  extern int omp_get_team_num (void) __GOMP_NOTHROW;
+ extern int omp_get_team_num_dim (int) __GOMP_NOTHROW;
  
  extern int omp_is_initial_device (void) __GOMP_NOTHROW;
  extern int omp_get_initial_device (void) __GOMP_NOTHROW;
*************** extern const char *omp_get_interop_rc_de
*** 449,455 ****
  					    omp_interop_rc_t) __GOMP_NOTHROW;
  
  extern int omp_get_device_from_uid (const char *) __GOMP_NOTHROW;
! extern void omp_get_device_distances(int, const int *, int *) __GOMP_NOTHROW;
  extern const char *omp_get_uid_from_device (int) __GOMP_NOTHROW;
  
  extern omp_control_tool_result_t omp_control_tool (omp_control_tool_t, int,
--- 458,464 ----
  					    omp_interop_rc_t) __GOMP_NOTHROW;
  
  extern int omp_get_device_from_uid (const char *) __GOMP_NOTHROW;
! extern void omp_get_device_distances (int, const int *, int *) __GOMP_NOTHROW;
  extern const char *omp_get_uid_from_device (int) __GOMP_NOTHROW;
  
  extern omp_control_tool_result_t omp_control_tool (omp_control_tool_t, int,
diff -Nrcpad gcc-17-20260621/libgomp/omp_lib.f90.in gcc-17-20260628/libgomp/omp_lib.f90.in
*** gcc-17-20260621/libgomp/omp_lib.f90.in	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/omp_lib.f90.in	Sun Jun 28 22:32:18 2026
***************
*** 389,400 ****
--- 389,418 ----
          end interface
  
          interface
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_num_threads_dim (dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_num_threads_dim
+             integer (c_int), value :: dim
+           end function omp_get_num_threads_dim
+         end interface
+ 
+         interface
            function omp_get_thread_num ()
              integer (4) :: omp_get_thread_num
            end function omp_get_thread_num
          end interface
  
          interface
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_thread_num_dim (dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_thread_num_dim
+             integer (c_int), value :: dim
+           end function omp_get_thread_num_dim
+         end interface
+ 
+         interface
            function omp_test_nest_lock (nvar)
              use omp_lib_kinds
              integer (4) :: omp_test_nest_lock
***************
*** 446,451 ****
--- 464,478 ----
            end function omp_get_thread_limit
          end interface
  
+         interface
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_thread_limit_dim (dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_thread_limit_dim
+             integer (c_int), value :: dim
+           end function omp_get_thread_limit_dim
+         end interface
+ 
          interface omp_set_max_active_levels
            subroutine omp_set_max_active_levels (max_levels)
              integer (4), intent (in) :: max_levels
***************
*** 606,617 ****
--- 633,662 ----
          end interface
  
          interface
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_num_teams_dim (dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_num_teams_dim
+             integer (c_int), value :: dim
+           end function omp_get_num_teams_dim
+         end interface
+ 
+         interface
            function omp_get_team_num ()
              integer (4) :: omp_get_team_num
            end function omp_get_team_num
          end interface
  
          interface
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_team_num_dim (dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_team_num_dim
+             integer (c_int), value :: dim
+           end function omp_get_team_num_dim
+         end interface
+ 
+         interface
            function omp_is_initial_device ()
              logical (4) :: omp_is_initial_device
            end function omp_is_initial_device
***************
*** 1056,1061 ****
--- 1101,1145 ----
            end function omp_get_device_from_uid
          end interface
  
+         interface omp_get_supported_active_team_dims
+           ! Implementation choice: no default-kind-8 integer
+           function omp_get_supported_active_team_dims (device_num, &
+              native_support)
+             use, intrinsic :: iso_c_binding, only : c_int
+            integer (4) :: omp_get_supported_active_team_dims
+            integer (4), intent(in) :: device_num
+            logical (4), intent(in) :: native_support
+           end function omp_get_supported_active_team_dims
+         end interface
+ 
+         interface omp_get_supported_active_league_dims
+           ! Implementation choice: no default-kind-8 integer
+           function omp_get_supported_active_league_dims ( &
+               device_num, native_support)
+             integer (4) :: omp_get_supported_active_league_dims
+             integer (4), intent(in) :: device_num
+             logical (4), intent(in) :: native_support
+           end function omp_get_supported_active_league_dims
+         end interface
+ 
+         interface omp_get_supported_teams_dim
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_supported_teams_dim (device_num, dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_supported_teams_dim
+             integer (c_int), value :: device_num, dim
+           end function omp_get_supported_teams_dim
+         end interface
+ 
+         interface omp_get_supported_threads_dim
+           ! Implementation choice: bind(C) and no default-kind-8 integer
+           function omp_get_supported_threads_dim (device_num, dim) bind(C)
+             use, intrinsic :: iso_c_binding, only : c_int
+             integer (c_int) :: omp_get_supported_threads_dim
+             integer (c_int), value :: device_num, dim
+           end function omp_get_supported_threads_dim
+         end interface
+ 
          interface omp_get_uid_from_device
            ! Deviation from OpenMP 6.0: VALUE added.
            character(:) function omp_get_uid_from_device (device_num)
diff -Nrcpad gcc-17-20260621/libgomp/omp_lib.h.in gcc-17-20260628/libgomp/omp_lib.h.in
*** gcc-17-20260621/libgomp/omp_lib.h.in	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/omp_lib.h.in	Sun Jun 28 22:32:18 2026
***************
*** 337,342 ****
--- 337,387 ----
        integer(4) omp_get_default_device, omp_get_num_devices
        integer(4) omp_get_num_teams, omp_get_team_num
  
+       interface
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_num_threads_dim (dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_num_threads_dim
+           integer (c_int), value :: dim
+         end function omp_get_num_threads_dim
+       end interface
+ 
+       interface
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_thread_num_dim (dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_thread_num_dim
+           integer (c_int), value :: dim
+         end function omp_get_thread_num_dim
+       end interface
+ 
+       interface
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_thread_limit_dim (dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_thread_limit_dim
+           integer (c_int), value :: dim
+         end function omp_get_thread_limit_dim
+       end interface
+ 
+       interface
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_num_teams_dim (dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_num_teams_dim
+           integer (c_int), value :: dim
+         end function omp_get_num_teams_dim
+       end interface
+ 
+       interface
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_team_num_dim (dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_team_num_dim
+           integer (c_int), value :: dim
+         end function omp_get_team_num_dim
+       end interface
+ 
        external omp_is_initial_device
        logical(4) omp_is_initial_device
        external omp_get_initial_device
***************
*** 687,692 ****
--- 732,777 ----
          end function omp_get_uid_from_device_8
        end interface omp_get_uid_from_device
  
+       interface omp_get_supported_active_team_dims
+ !       Implementation choice: no default-kind-8 integer
+         function omp_get_supported_active_team_dims (device_num,                &
+      &     native_support)
+           use, intrinsic :: iso_c_binding, only : c_int
+          integer (4) :: omp_get_supported_active_team_dims
+          integer (4), intent(in) :: device_num
+          logical (4), intent(in) :: native_support
+         end function omp_get_supported_active_team_dims
+       end interface
+ 
+       interface omp_get_supported_active_league_dims
+ !       Implementation choice: no default-kind-8 integer
+         function omp_get_supported_active_league_dims (                         &
+      &      device_num, native_support)
+           integer (4) :: omp_get_supported_active_league_dims
+           integer (4), intent(in) :: device_num
+           logical (4), intent(in) :: native_support
+         end function omp_get_supported_active_league_dims
+       end interface
+ 
+       interface omp_get_supported_teams_dim
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_supported_teams_dim (device_num, dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_supported_teams_dim
+           integer (c_int), value :: device_num, dim
+         end function omp_get_supported_teams_dim
+       end interface
+ 
+       interface omp_get_supported_threads_dim
+ !       Implementation choice: bind(C) and no default-kind-8 integer
+         function omp_get_supported_threads_dim (device_num, dim) bind(C)
+           use, intrinsic :: iso_c_binding, only : c_int
+           integer (c_int) :: omp_get_supported_threads_dim
+           integer (c_int), value :: device_num, dim
+         end function omp_get_supported_threads_dim
+       end interface
+ 
+ 
        interface
  !       This function only supports integer(4) for simplicity.
  !       Contrary to OpenMP 6.1, it also uses bind(C) and value
diff -Nrcpad gcc-17-20260621/libgomp/parallel.c gcc-17-20260628/libgomp/parallel.c
*** gcc-17-20260621/libgomp/parallel.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/parallel.c	Sun Jun 28 22:32:18 2026
*************** GOMP_cancel (int which, bool do_cancel)
*** 270,275 ****
--- 270,296 ----
    gomp_team_barrier_cancel (team);
    return true;
  }
+ 
+ /* For a worksharing-loop construct with static schedule, return the thread ID
+    and number of threads packed into a single complex value.  */
+ 
+ _Complex int
+ GOMP_loop_static_worksharing (void)
+ {
+   struct gomp_team *team = gomp_thread ()->ts.team;
+   unsigned tid = gomp_thread ()->ts.team_id;
+   unsigned nthreads = team ? team->nthreads : 1;
+   return nthreads + tid * 1I;
+ }
+ 
+ /* Return true if the current thread number equals TID.
+    Used to implement the masked construct's filter clause.  */
+ 
+ bool
+ GOMP_has_masked_thread_num (int tid)
+ {
+   return tid == gomp_thread ()->ts.team_id;
+ }
  
  /* The public OpenMP API for thread and team related inquiries.  */
  
*************** omp_get_num_threads (void)
*** 281,291 ****
--- 302,328 ----
  }
  
  int
+ omp_get_num_threads_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_num_threads ();
+   return 1;
+ }
+ 
+ int
  omp_get_thread_num (void)
  {
    return gomp_thread ()->ts.team_id;
  }
  
+ int
+ omp_get_thread_num_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_thread_num ();
+   return 0;
+ }
+ 
  /* This wasn't right for OpenMP 2.5.  Active region used to be non-zero
     when the IF clause doesn't evaluate to false, starting with OpenMP 3.0
     it is non-zero with more than one thread in the team.  */
*************** omp_get_active_level (void)
*** 334,340 ****
--- 371,379 ----
  }
  
  ialias (omp_get_num_threads)
+ ialias (omp_get_num_threads_dim)
  ialias (omp_get_thread_num)
+ ialias (omp_get_thread_num_dim)
  ialias (omp_in_parallel)
  ialias (omp_get_level)
  ialias (omp_get_ancestor_thread_num)
diff -Nrcpad gcc-17-20260621/libgomp/plugin/plugin-gcn.c gcc-17-20260628/libgomp/plugin/plugin-gcn.c
*** gcc-17-20260621/libgomp/plugin/plugin-gcn.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/plugin/plugin-gcn.c	Sun Jun 28 22:32:18 2026
*************** limit_worker_threads (int threads)
*** 1264,1269 ****
--- 1264,1270 ----
    /* FIXME Do something more intelligent here.
       GCN can always run 4 threads within a Compute Unit, but
       more than that depends on register usage.  */
+   /* Keep in sync with GOMP_OFFLOAD_supported_threads_dim.  */
    if (threads > 16)
      threads = 16;
    return threads;
*************** GOMP_OFFLOAD_get_numa_node (int ord)
*** 3773,3778 ****
--- 3774,3804 ----
    return numa_node;
  }
  
+ /* Number of teams supported (by dimension) as reported by OpenMP.
+    For dim < 0 (invalid) and for dim > supported dims, return 1. */
+ 
+ int
+ GOMP_OFFLOAD_supported_teams_dim (int ord, int dim)
+ {
+   if (dim > 0 /* max supported dims */ || dim < 0)
+     return 1;
+   struct agent_info *agent = get_agent_info (ord);
+   return limit_teams (__INT_MAX__, agent);
+ }
+ 
+ /* Number of threads supported (by dimension) as reported by OpenMP.
+    For dim < 0 (invalid) and for dim > supported dims, return 1. */
+ 
+ int
+ GOMP_OFFLOAD_supported_threads_dim (int ord, int dim)
+ {
+   (void) ord;
+   if (dim > 0 /* max supported dims */ || dim < 0)
+     return 1;
+ 
+   return limit_worker_threads (__INT_MAX__);
+ }
+ 
  /* Return the specific capabilities the HSA accelerator have.  */
  
  unsigned int
diff -Nrcpad gcc-17-20260621/libgomp/plugin/plugin-nvptx.c gcc-17-20260628/libgomp/plugin/plugin-nvptx.c
*** gcc-17-20260621/libgomp/plugin/plugin-nvptx.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/plugin/plugin-nvptx.c	Sun Jun 28 22:32:18 2026
*************** GOMP_OFFLOAD_get_numa_node (int ord)
*** 1383,1388 ****
--- 1383,1431 ----
    return numa_node;
  }
  
+ /* Number of teams supported (by dimension) as reported by OpenMP.
+    For dim < 0 (invalid) and for dim > supported dims, return 1. */
+ 
+ int
+ GOMP_OFFLOAD_supported_teams_dim (int ord, int dim)
+ {
+   if (dim > 0 /* max supported dims */ || dim < 0)
+     return 1;
+ 
+   struct ptx_device *ptx_dev = ptx_devices[ord];
+ 
+   /* Keep in sync with nvptx_adjust_launch_bounds; assume 1 for the
+      following as upper bound.  */
+   int num_threads = 1, regs_per_thread = 1;
+ 
+   int regs_per_block = regs_per_thread * 32 * num_threads;
+ 
+   int max_blocks = ptx_dev->regs_per_sm / regs_per_block * ptx_dev->num_sms;
+   /* This is an estimate of how many blocks the device can host simultaneously.
+      Actual limit, which may be lower, can be queried with "occupancy control"
+      driver interface (since CUDA 6.0).  */
+   return max_blocks;
+ }
+ 
+ /* Number of threads supported (by dimension) as reported by OpenMP.
+    For dim < 0 (invalid) and for dim > supported dims, return 1. */
+ 
+ int
+ GOMP_OFFLOAD_supported_threads_dim (int ord, int dim)
+ {
+   if (dim > 0 /* max supported dims */ || dim < 0)
+     return 1;
+ 
+   /* Keep in sync with nvptx_adjust_launch_bounds.  */
+   struct ptx_device *ptx_dev = ptx_devices[ord];
+ 
+   int max_warps_block = ptx_dev->max_threads_per_block / 32;
+   /* Maximum 32 warps per block is an implementation limit in NVPTX backend
+      and libgcc, which matches documented limit of all GPUs as of 2015.  */
+ 
+   return max_warps_block;
+ }
+ 
  unsigned int
  GOMP_OFFLOAD_get_caps (void)
  {
*************** GOMP_OFFLOAD_openacc_get_property (int n
*** 2644,2650 ****
  
  /* Adjust launch dimensions: pick good values for number of blocks and warps
     and ensure that number of warps does not exceed CUDA limits as well as GCC's
!    own limits.  */
  
  static void
  nvptx_adjust_launch_bounds (struct targ_fn_descriptor *fn,
--- 2687,2695 ----
  
  /* Adjust launch dimensions: pick good values for number of blocks and warps
     and ensure that number of warps does not exceed CUDA limits as well as GCC's
!    own limits.
!    Keep in sync with GOMP_OFFLOAD_supported_teams_dims and
!    GOMP_OFFLOAD_supported_threads_dim.  */
  
  static void
  nvptx_adjust_launch_bounds (struct targ_fn_descriptor *fn,
diff -Nrcpad gcc-17-20260621/libgomp/target.c gcc-17-20260628/libgomp/target.c
*** gcc-17-20260621/libgomp/target.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/target.c	Sun Jun 28 22:32:18 2026
*************** GOMP_interop (int device_num, int n_init
*** 6032,6037 ****
--- 6032,6085 ----
      }
  }
  
+ /* Query device-related data.  */
+ 
+ int
+ omp_get_supported_active_team_dims (int device_num, int native_support)
+ {
+   (void) device_num;
+   (void) native_support;
+   return 1;
+ }
+ 
+ int
+ omp_get_supported_active_league_dims (int device_num, int native_support)
+ {
+   (void) device_num;
+   (void) native_support;
+   return 1;
+ }
+ 
+ int
+ omp_get_supported_teams_dim (int device_num, int dim)
+ {
+   if (device_num == omp_default_device)
+     device_num = gomp_get_default_device ();
+   if (device_num == omp_initial_device
+       || device_num == gomp_get_num_devices ())
+     return dim == 0 ? INT_MAX : 1;
+ 
+   struct gomp_device_descr *devicep = resolve_device (device_num, false);
+   if (devicep == NULL || !devicep->supported_teams_dim_func)
+     return -1;
+   return devicep->supported_teams_dim_func (devicep->target_id, dim);
+ }
+ 
+ int
+ omp_get_supported_threads_dim (int device_num, int dim)
+ {
+   if (device_num == omp_default_device)
+     device_num = gomp_get_default_device ();
+   if (device_num == omp_initial_device
+       || device_num == gomp_get_num_devices ())
+     return dim == 0 ? INT_MAX : 1;
+ 
+   struct gomp_device_descr *devicep = resolve_device (device_num, false);
+   if (devicep == NULL || !devicep->supported_threads_dim_func)
+     return -1;
+   return devicep->supported_threads_dim_func (devicep->target_id, dim);
+ }
+ 
  static const char *
  gomp_get_uid_for_device (struct gomp_device_descr *devicep, int device_num)
  {
*************** omp_get_device_distances (int ndevs, con
*** 6105,6116 ****
    if (node < 0) /* Not supported. */
      {
        for (int i = 0; i < ndevs; i++)
! 	if (devs[i] < omp_initial_device || devs[i] > num_devices)
! 	  distances[i] = -1;  /* invalid */
! 	else if (devs[i] == omp_initial_device || devs[i] == num_devices)
! 	  distances[i] = 0;
! 	else
! 	  distances[i] = 10;
        return;
      }
    for (int i = 0; i < ndevs; i++)
--- 6153,6169 ----
    if (node < 0) /* Not supported. */
      {
        for (int i = 0; i < ndevs; i++)
! 	{
! 	  int device_num = (devs[i] == omp_default_device
! 			    ? gomp_get_default_device () : devs[i]);
! 	  if (device_num < omp_initial_device || device_num > num_devices)
! 	    distances[i] = -1;  /* invalid */
! 	  else if (device_num == omp_initial_device
! 		   || device_num == num_devices)
! 	    distances[i] = 0;
! 	  else
! 	    distances[i] = 10;
! 	}
        return;
      }
    for (int i = 0; i < ndevs; i++)
*************** omp_get_device_distances (int ndevs, con
*** 6136,6141 ****
--- 6189,6198 ----
      }
  }
  
+ ialias (omp_get_supported_active_team_dims)
+ ialias (omp_get_supported_active_league_dims)
+ ialias (omp_get_supported_threads_dim)
+ ialias (omp_get_supported_teams_dim)
  ialias (omp_get_uid_from_device)
  ialias (omp_get_device_from_uid)
  ialias (omp_get_device_distances)
*************** gomp_load_plugin_for_device (struct gomp
*** 6184,6189 ****
--- 6241,6248 ----
    DLSYM (get_name);
    DLSYM_OPT (get_uid, get_uid);
    DLSYM_OPT (get_numa_node, get_numa_node);
+   DLSYM_OPT (supported_threads_dim, supported_threads_dim);
+   DLSYM_OPT (supported_teams_dim, supported_teams_dim);
    DLSYM (get_caps);
    DLSYM (get_type);
    DLSYM (get_num_devices);
diff -Nrcpad gcc-17-20260621/libgomp/teams.c gcc-17-20260628/libgomp/teams.c
*** gcc-17-20260621/libgomp/teams.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/teams.c	Sun Jun 28 22:32:18 2026
*************** GOMP_teams_reg (void (*fn) (void *), voi
*** 58,63 ****
--- 58,75 ----
      }
  }
  
+ /* For a distribute construct with static schedule, return the team ID and
+    number of teams packed into a single complex value.  */
+ 
+ _Complex int
+ GOMP_distribute_static_worksharing (void)
+ {
+   struct gomp_thread *thr = gomp_thread ();
+   unsigned tid = thr->team_num;
+   unsigned nteams = thr->num_teams + 1;
+   return nteams + tid * 1I;
+ }
+ 
  int
  omp_get_num_teams (void)
  {
*************** omp_get_num_teams (void)
*** 66,76 ****
--- 78,106 ----
  }
  
  int
+ omp_get_num_teams_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_num_teams ();
+   return 1;
+ }
+ 
+ int
  omp_get_team_num (void)
  {
    struct gomp_thread *thr = gomp_thread ();
    return thr->team_num;
  }
  
+ int
+ omp_get_team_num_dim (int dim)
+ {
+   if (dim == 0)
+     return omp_get_team_num ();
+   return 0;
+ }
+ 
  ialias (omp_get_num_teams)
+ ialias (omp_get_num_teams_dim)
  ialias (omp_get_team_num)
+ ialias (omp_get_team_num_dim)
diff -Nrcpad gcc-17-20260621/libgomp/testsuite/libgomp.c/barrier-1.c gcc-17-20260628/libgomp/testsuite/libgomp.c/barrier-1.c
*** gcc-17-20260621/libgomp/testsuite/libgomp.c/barrier-1.c	Sun Jun 21 22:32:15 2026
--- gcc-17-20260628/libgomp/testsuite/libgomp.c/barrier-1.c	Sun Jun 28 22:32:18 2026
***************
*** 5,11 ****
  #include <unistd.h>
  #include <assert.h>
  #include "libgomp_g.h"
! 
  
  struct timeval stamps[3][3];
  
--- 5,11 ----
  #include <unistd.h>
  #include <assert.h>
  #include "libgomp_g.h"
! #include <gomp-constants.h>
  
  struct timeval stamps[3][3];
  
*************** static void function(void *dummy)
*** 17,23 ****
    if (iam == 0)
      usleep (10);
  
!   GOMP_barrier ();
  
    if (iam == 0)
      {
--- 17,23 ----
    if (iam == 0)
      usleep (10);
  
!   GOMP_barrier_ext (GOMP_BARRIER_EXPLICIT);
  
    if (iam == 0)
      {
*************** static void function(void *dummy)
*** 25,32 ****
        usleep (10);
      }
  
!   GOMP_barrier ();
!   
    gettimeofday (&stamps[iam][2], NULL);
  }
  
--- 25,32 ----
        usleep (10);
      }
  
!   GOMP_barrier_ext (GOMP_BARRIER_EXPLICIT);
! 
    gettimeofday (&stamps[iam][2], NULL);
  }
  
diff -Nrcpad gcc-17-20260621/libgomp/testsuite/libgomp.c/multi-dim-routines.c gcc-17-20260628/libgomp/testsuite/libgomp.c/multi-dim-routines.c
*** gcc-17-20260621/libgomp/testsuite/libgomp.c/multi-dim-routines.c	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libgomp/testsuite/libgomp.c/multi-dim-routines.c	Sun Jun 28 22:32:18 2026
***************
*** 0 ****
--- 1,135 ----
+ #include <omp.h>
+ 
+ int
+ main ()
+ {
+   /* Supported active teams/league dimension - the assumed result for either,
+      once implemented, is:
+      - Host: native == 1, but supporting (emulating) any dimension
+      - Non-host: native == 3 and not supporting higher dimension,
+        i.e. expected that no one implements this.  */
+ 
+   /* Always true: All devices support at least one dimension,
+      with native_support set to true or to false.  */
+ 
+   if (omp_get_supported_active_team_dims (omp_initial_device, true) < 1)
+     __builtin_abort ();
+   if (omp_get_supported_active_team_dims (omp_initial_device, false) < 1)
+     __builtin_abort ();
+   if (omp_get_supported_active_league_dims (omp_initial_device, true) < 1)
+     __builtin_abort ();
+   if (omp_get_supported_active_league_dims (omp_initial_device, false) < 1)
+     __builtin_abort ();
+   for (int dev = 0; dev < omp_get_num_devices (); dev++)
+     {
+       if (omp_get_supported_active_team_dims (dev, true) < 1)
+       __builtin_abort ();
+       if (omp_get_supported_active_team_dims (dev, false) < 1)
+       __builtin_abort ();
+       if (omp_get_supported_active_league_dims (dev, true) < 1)
+       __builtin_abort ();
+       if (omp_get_supported_active_league_dims (dev, false) < 1)
+       __builtin_abort ();
+     }
+ 
+   /* For each supported dimension, expect that it supports more than
+      one team and thread. - And for each unsupported dimension, expect
+      that exactly one thread and team is reported as supported.  */
+ 
+   for (int dev = 0; dev < omp_get_num_devices (); dev++)
+     {
+       int max_dims = omp_get_supported_active_team_dims (dev, false);
+       int test_size = max_dims == __INT_MAX__ ? 64 : max_dims;
+       for (int dim = 1; dim <= test_size; dim++)
+ 	if (omp_get_supported_teams_dim (dev, dim) < 1)
+ 	  __builtin_abort ();
+       int test_end = __INT_MAX__ - 12 > test_size ? test_size + 12 : __INT_MAX__;
+       if (max_dims < __INT_MAX__)
+ 	for (int dim = test_size + 1; dim < test_end; dim++)
+ 	  if (omp_get_supported_teams_dim (dev, dim) != 1)
+ 	    __builtin_abort ();
+ 
+       max_dims = omp_get_supported_active_league_dims (dev, false);
+       test_size = max_dims == __INT_MAX__ ? 64 : max_dims;
+       for (int dim = 1; dim <= test_size; dim++)
+ 	if (omp_get_supported_threads_dim (dev, dim) < 1)
+ 	  __builtin_abort ();
+       test_end = __INT_MAX__ - 12 > test_size ? test_size + 12 : __INT_MAX__;
+       if (max_dims < __INT_MAX__)
+ 	for (int dim = test_size + 1; dim < test_end; dim++)
+ 	  if (omp_get_supported_threads_dim (dev, dim) != 1)
+ 	    __builtin_abort ();
+       if (max_dims == __INT_MAX__)
+ 	for (int dim = __INT_MAX__ - 12; dim < __INT_MAX__; dim++)
+ 	  if (omp_get_supported_threads_dim (dev, dim) != 1)
+ 	    __builtin_abort ();
+     }
+ 
+   /* Implementation specific to GCC:
+      Currently, exactly one dimension is supported on the host and
+      on the device, both natively and emulated.  */ 
+ 
+   if (omp_get_supported_active_team_dims (omp_initial_device, true) != 1)
+     __builtin_abort ();
+   if (omp_get_supported_active_team_dims (omp_initial_device, false) != 1)
+     __builtin_abort ();
+   if (omp_get_supported_active_league_dims (omp_initial_device, true) != 1)
+     __builtin_abort ();
+   if (omp_get_supported_active_league_dims (omp_initial_device, false) != 1)
+     __builtin_abort ();
+   for (int dev = 0; dev < omp_get_num_devices (); dev++)
+     {
+       if (omp_get_supported_active_team_dims (dev, true) != 1)
+       __builtin_abort ();
+       if (omp_get_supported_active_team_dims (dev, false) != 1)
+       __builtin_abort ();
+       if (omp_get_supported_active_league_dims (dev, true) != 1)
+       __builtin_abort ();
+       if (omp_get_supported_active_league_dims (dev, false) != 1)
+       __builtin_abort ();
+     }
+ 
+   /* TODO: Once implemented, add a check for 'dim(N)', N > 1 below.  */
+ 
+ 
+   /* The following should always pass as only a single spacial dimension
+      is used.  */
+ 
+   for (int dev = omp_initial_device; dev < omp_get_num_devices (); dev++)
+     {
+       #pragma omp target teams device(dev) num_teams(10) thread_limit(8)
+ 	{
+ 	  if (omp_get_num_teams () != 10
+ 	      || omp_get_num_teams_dim (0) != 10)
+ 	    __builtin_abort ();
+ 	  if (omp_get_team_num () != omp_get_team_num_dim (0)
+ 	      || omp_get_team_num_dim (0) < 0
+ 	      || omp_get_team_num_dim (0) >= 10)
+ 	    __builtin_abort ();
+ 	  for (int dim = 1; dim <= 12; dim++)
+ 	    if (omp_get_num_teams_dim (dim) != 1
+ 		|| omp_get_team_num_dim (dim) != 0)
+ 	      __builtin_abort ();
+           #pragma omp parallel num_threads(8)
+           // FIXME: Assumes 'num_threads(strict:', add once modifier is supported
+ 	  {
+ 	    if (omp_get_thread_limit_dim (0) != 8)
+ 		__builtin_abort ();
+ 	    for (int dim = 1; dim <= 12; dim++)
+ 	      if (omp_get_thread_limit_dim (dim) != 1)
+ 		__builtin_abort ();
+ 	    if (omp_get_num_threads () != 8
+ 		|| omp_get_num_threads_dim (0) != 8)
+ 	      __builtin_abort ();
+ 	    if (omp_get_team_num () != omp_get_team_num_dim (0)
+ 		|| omp_get_thread_num_dim (0) < 0
+ 		|| omp_get_thread_num_dim (0) >= 8)
+ 	      __builtin_abort ();
+ 	    for (int dim = 1; dim <= 12; dim++)
+ 	      if (omp_get_num_threads_dim (dim) != 1
+ 		  || omp_get_thread_num_dim (dim) != 0)
+ 		__builtin_abort ();
+ 	  }
+         }
+     }
+ }
diff -Nrcpad gcc-17-20260621/libgomp/testsuite/libgomp.fortran/multi-dim-routines-2.F90 gcc-17-20260628/libgomp/testsuite/libgomp.fortran/multi-dim-routines-2.F90
*** gcc-17-20260621/libgomp/testsuite/libgomp.fortran/multi-dim-routines-2.F90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libgomp/testsuite/libgomp.fortran/multi-dim-routines-2.F90	Sun Jun 28 22:32:18 2026
***************
*** 0 ****
--- 1,2 ----
+ #define USE_OMP_HEADER 1
+ #include "multi-dim-routines.F90"
diff -Nrcpad gcc-17-20260621/libgomp/testsuite/libgomp.fortran/multi-dim-routines.F90 gcc-17-20260628/libgomp/testsuite/libgomp.fortran/multi-dim-routines.F90
*** gcc-17-20260621/libgomp/testsuite/libgomp.fortran/multi-dim-routines.F90	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libgomp/testsuite/libgomp.fortran/multi-dim-routines.F90	Sun Jun 28 22:32:18 2026
***************
*** 0 ****
--- 1,149 ----
+ program main
+ #ifndef USE_OMP_HEADER
+   use omp_lib
+ #endif
+   implicit none (type, external)
+ 
+ #ifdef USE_OMP_HEADER
+   include "omp_lib.h"
+ #endif
+ 
+   integer :: dev, dim
+ 
+   ! Supported active teams/league dimension - the assumed result for either,
+   ! once implemented, is:
+   ! - Host: native == 1, but supporting (emulating) any dimension
+   ! - Non-host: native == 3 and not supporting higher dimension,
+   !   i.e. expected that no one implements this.
+ 
+   ! Always true: All devices support at least one dimension,
+   ! with native_support set to true or to false.
+ 
+   if (omp_get_supported_active_team_dims (omp_initial_device, .true.) < 1) &
+     stop 1
+   if (omp_get_supported_active_team_dims (omp_initial_device, .false.) < 1) &
+     stop 2
+   if (omp_get_supported_active_league_dims (omp_initial_device, .true.) < 1) &
+     stop 3
+   if (omp_get_supported_active_league_dims (omp_initial_device, .false.) < 1) &
+     stop 4
+   do dev = 0, omp_get_num_devices () - 1
+     if (omp_get_supported_active_team_dims (dev, .true.) < 1) &
+       stop 5
+     if (omp_get_supported_active_team_dims (dev, .false.) < 1) &
+       stop 6
+     if (omp_get_supported_active_league_dims (dev, .true.) < 1) &
+       stop 7
+     if (omp_get_supported_active_league_dims (dev, .false.) < 1) &
+       stop 8
+   end do
+ 
+   ! For each supported dimension, expect that it supports more than
+   ! one team and thread. - And for each unsupported dimension, expect
+   ! that exactly one thread and team is reported as supported.
+ 
+   do dev = 0, omp_get_num_devices () - 1
+   block
+     integer :: max_dims, test_size, test_end
+     max_dims = omp_get_supported_active_team_dims (dev, .false.)
+     test_size = (max_dims == huge(max_dims) ? 64 : max_dims)
+     do dim = 1, test_size
+       if (omp_get_supported_teams_dim (dev, dim) < 1) &
+         stop 9
+     end do
+     test_end = (huge (test_size) - 12 > test_size ? test_size + 12 : huge(test_size))
+     if (max_dims < huge(max_dims)) then
+       do dim = test_size + 1, test_end - 1
+         if (omp_get_supported_teams_dim (dev, dim) /= 1) &
+           stop 10
+       end do
+     end if
+ 
+     max_dims = omp_get_supported_active_league_dims (dev, .false.)
+     test_size = (max_dims == huge(max_dims) ? 64 : max_dims)
+     do dim = 1, test_size
+       if (omp_get_supported_threads_dim (dev, dim) < 1) &
+         stop 11
+     end do
+     test_end = (huge(test_size) - 12 > test_size ? test_size + 12 : huge(test_size))
+     if (max_dims < huge(max_dims)) then
+       do dim = test_size + 1, test_end - 1
+         if (omp_get_supported_threads_dim (dev, dim) /= 1) &
+           stop 12
+       end do
+     else
+       do dim = huge (max_dims) - 12, huge (max_dims) - 1
+         if (omp_get_supported_threads_dim (dev, dim) /= 1) &
+           stop 13
+       end do
+     end if
+   end block
+   end do
+ 
+   ! Implementation specific to GCC:
+   ! Currently, exactly one dimension is supported on the host and
+   ! on the device, both natively and emulated.
+ 
+   if (omp_get_supported_active_team_dims (omp_initial_device, .true.) /= 1) &
+     stop 14
+   if (omp_get_supported_active_team_dims (omp_initial_device, .false.) /= 1) &
+     stop 15
+   if (omp_get_supported_active_league_dims (omp_initial_device, .true.) /= 1) &
+     stop 16
+   if (omp_get_supported_active_league_dims (omp_initial_device, .false.) /= 1) &
+     stop 17
+   do dev = 0, omp_get_num_devices () - 1
+     if (omp_get_supported_active_team_dims (dev, .true.) /= 1) &
+       stop 18
+     if (omp_get_supported_active_team_dims (dev, .false.) /= 1) &
+       stop 19
+     if (omp_get_supported_active_league_dims (dev, .true.) /= 1) &
+       stop 20
+     if (omp_get_supported_active_league_dims (dev, .false.) /= 1) &
+       stop 21
+   end do
+ 
+   ! TODO: Once implemented, add a check for 'dim(N)', N > 1 below.
+ 
+ 
+   ! The following should always pass as only a single spacial dimension
+   ! is used.
+ 
+   do dev = omp_initial_device, omp_get_num_devices () - 1
+     !$omp target teams device(dev) num_teams(10) thread_limit(8)
+       if (omp_get_num_teams () /= 10  &
+           .or. omp_get_num_teams_dim (0) /= 10) &
+         stop 22
+       if (omp_get_team_num () /= omp_get_team_num_dim (0) &
+           .or. omp_get_team_num_dim (0) < 0 &
+           .or. omp_get_team_num_dim (0) >= 10) &
+         stop 23
+       do dim = 1, 12
+         if (omp_get_num_teams_dim (dim) /= 1 &
+             .or. omp_get_team_num_dim (dim) /= 0) &
+           stop 24
+       end do
+       !$omp parallel num_threads(8)
+             ! FIXME: Assumes 'num_threads(strict:', add once modifier is supported
+         if (omp_get_thread_limit_dim (0) /= 8) &
+           stop 25
+         do dim = 1, 12
+           if (omp_get_thread_limit_dim (dim) /= 1) &
+             stop 26
+         end do
+         if (omp_get_num_threads () /= 8 &
+             .or. omp_get_num_threads_dim (0) /= 8) &
+           stop 27
+         if (omp_get_team_num () /= omp_get_team_num_dim (0) &
+             .or. omp_get_thread_num_dim (0) < 0 &
+             .or. omp_get_thread_num_dim (0) >= 8) &
+           stop 28
+         do dim = 1, 12
+           if (omp_get_num_threads_dim (dim) /= 1 &
+               .or. omp_get_thread_num_dim (dim) /= 0) &
+             stop 29
+         end do
+       !$omp end parallel
+     !$omp end target teams
+   end do
+ end program
diff -Nrcpad gcc-17-20260621/libstdc++-v3/ChangeLog gcc-17-20260628/libstdc++-v3/ChangeLog
*** gcc-17-20260621/libstdc++-v3/ChangeLog	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/ChangeLog	Sun Jun 28 22:32:19 2026
***************
*** 1,3 ****
--- 1,246 ----
+ 2026-06-26  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/27_io/filesystem/operations/status.cc: Check
+ 	handling of directory symlink.
+ 	* testsuite/27_io/filesystem/operations/symlink_status.cc:
+ 	Likewise.
+ 
+ 2026-06-26  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/bits/stl_bvector.h: Add _GLIBCXX_RESOLVE_LIB_DEFECTS
+ 	comment for 3638.
+ 	(vector<bool, _Alloc>::operator=(bool) const)
+ 	[__glibcxx_ranges_zip]: Adjust guard.
+ 	(vector<bool, _Alloc>::swap): Add deprected attribute via
+ 	_GLIBCXX26_DEPRECATED_SUGGEST.
+ 	* include/std/bitset (bitset::operator=(bool) const)
+ 	[__glibcxx_ranges_zip]: Define.
+ 	(bistset::reference::swap) [__cplusplus >= 201103L]: Define.
+ 	* testsuite/20_util/bitset/access/range_proxy.cc: New test.
+ 	* testsuite/20_util/bitset/access/ref_swap.cc: New test.
+ 	* testsuite/23_containers/vector/bool/element_access/range_proxy.cc:
+ 	New test.
+ 	* testsuite/23_containers/vector/bool/element_access/ref_swap.cc:
+ 	New test.
+ 	* testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc:
+ 	Check for deprecated warning on static swap.
+ 
+ 2026-06-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/version.def (stds): Add C++29 value and adjust
+ 	C++23 and C++26 values.
+ 	* include/bits/version.h: Regenerate.
+ 	* testsuite/lib/libstdc++.exp (v3_max_std): Update to 29.
+ 
+ 2026-06-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* acinclude.m4 (GLIBCXX_CHECK_STDIO_LOCKING): Remove trailing
+ 	whitespace.
+ 
+ 2026-06-25  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure.ac: Update AC_FOREACH to m4_foreach_w.
+ 
+ 2026-06-25  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* configure: Regenerate.
+ 	* configure.ac: Update AM_PROG_LIBTOOL to LT_INIT.
+ 
+ 2026-06-25  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4 (GLIBCXX_CHECK_COMPILER_FEATURES): Replace
+ 	AC_LANG_SAVE AC_LANG_CPLUSPLUS (...) AC_LANG_RESTORE with
+ 	AC_LANG_PUSH([C++]) (...) AC_LANG_POP([C++]).
+ 	(GLIBCXX_CHECK_SETRLIMIT): Likewise.
+ 	(GLIBCXX_CHECK_S_ISREG_OR_S_IFREG): Likewise.
+ 	(GLIBCXX_CHECK_POLL): Likewise.
+ 	(GLIBCXX_CHECK_WRITEV): Likewise.
+ 	(GLIBCXX_CHECK_LFS): Likewise.
+ 	(GLIBCXX_ENABLE_C99): Likewise.
+ 	(GLIBCXX_ENABLE_LIBSTDCXX_TIME): Likewise.
+ 	(GLIBCXX_CHECK_GETTIMEOFDAY): Likewise.
+ 	(GLIBCXX_CHECK_C99_TR1): Likewise.
+ 	(GLIBCXX_CHECK_UCHAR_H): Likewise.
+ 	(GLIBCXX_CHECK_STDIO_PROTO): Likewise.
+ 	(GLIBCXX_CHECK_MATH11_PROTO): Likewise.
+ 	(GLIBCXX_ENABLE_FLOAT128): Likewise.
+ 	(GLIBCXX_ENABLE_WCHAR_T): Likewise.
+ 	(GLIBCXX_ENABLE_PCH): Likewise.
+ 	(GLIBCXX_ENABLE_ATOMIC_BUILTINS): Likewise.
+ 	(GLIBCXX_ENABLE_LOCK_POLICY): Likewise.
+ 	(GLIBCXX_CHECK_GTHREADS): Likewise.
+ 	(GLIBCXX_CHECK_GET_NPROCS): Likewise.
+ 	(GLIBCXX_CHECK_SC_NPROCESSORS_ONLN): Likewise.
+ 	(GLIBCXX_CHECK_SC_NPROC_ONLN): Likewise.
+ 	(GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP): Likewise.
+ 	(GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT): Likewise.
+ 	(GLIBCXX_CHECK_PTHREAD_MUTEX_CLOCKLOCK): Likewise.
+ 	(GLIBCXX_CHECK_PTHREAD_RWLOCK_CLOCKLOCK): Likewise.
+ 	(GLIBCXX_CHECK_SYSCTL_HW_NCPU): Likewise.
+ 	(GLIBCXX_CHECK_TMPNAM): Likewise.
+ 	(GLIBCXX_CHECK_SDT_H): Likewise.
+ 	(GLIBCXX_CHECK_FILESYSTEM_DEPS): Likewise.
+ 	(GLIBCXX_CHECK_GETENTROPY): Likewise.
+ 	(GLIBCXX_CHECK_ARC4RANDOM): Likewise.
+ 	(GLIBCXX_ENABLE_BACKTRACE): Likewise.
+ 	(GLIBCXX_STRUCT_TM_TM_ZONE): Likewise.
+ 	(GLIBCXX_CHECK_ALIGNAS_CACHELINE): Likewise.
+ 	(GLIBCXX_CHECK_INIT_PRIORITY): Likewise.
+ 	(GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES): Likewise.
+ 	(GLIBCXX_CHECK_TEXT_ENCODING): Likewise.
+ 	(GLIBCXX_CHECK_DEBUGGING): Likewise.
+ 	(GLIBCXX_CHECK_STDIO_LOCKING): Likewise.
+ 	* configure: Regenerate.
+ 	* crossconfig.m4 (GLIBCXX_CHECK_MATH_DECL): Replace
+ 	AC_LANG_SAVE AC_LANG_C with AC_LANG_PUSH([C]).
+ 	* linkage.m4 (GLIBCXX_CHECK_MATH_DECL_1): Replace
+ 	AC_LANG_SAVE AC_LANG_CPLUSPLUS (...) AC_LANG_RESTORE with
+ 	AC_LANG_PUSH([C++]) (...) AC_LANG_POP([C++]).
+ 	(GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1) Likewise.
+ 	(GLIBCXX_CHECK_MATH_DECL_2): Likewise.
+ 	(GLIBCXX_CHECK_MATH_DECL_3): Likewise.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1): Likewise.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2): Likewise.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3): Likewise.
+ 
+ 2026-06-25  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4 (GLIBCXX_CHECK_COMPILER_FEATURES): Update
+ 	AC_TRY_COMPILE to AC_COMPILE_IFELSE.
+ 	(GLIBCXX_CHECK_SETRLIMIT_ancilliary): Likewise.
+ 	(GLIBCXX_CHECK_SETRLIMIT): Likewise.
+ 	(GLIBCXX_ENABLE_C99): Likewise.
+ 	(GLIBCXX_ENABLE_LIBSTDCXX_TIME): Likewise.
+ 	(GLIBCXX_CHECK_C99_TR1): Likewise.
+ 	(GLIBCXX_CHECK_UCHAR_H): Likewise.
+ 	(GLIBCXX_ENABLE_CLOCALE): Likewise.
+ 	(GLIBCXX_ENABLE_WCHAR_T): Likewise.
+ 	(GLIBCXX_ENABLE_ATOMIC_BUILTINS): Likewise.
+ 	(GLIBCXX_ENABLE_LOCK_POLICY): Likewise.
+ 	(GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY): Likewise.
+ 	(GLIBCXX_ENABLE_SYMVERS): Likewise.
+ 	(GLIBCXX_CHECK_GTHREADS): Likewise.
+ 	(GLIBCXX_CHECK_X86_RDRAND): Likewise.
+ 	(GLIBCXX_CHECK_X86_RDSEED): Likewise.
+ 	(GLIBCXX_CHECK_SIZE_T_MANGLING): Likewise.
+ 	(GLIBCXX_CHECK_EXCEPTION_PTR_SYMVER): Likewise.
+ 	(GLIBCXX_CHECK_ALIGNAS_CACHELINE): Likewise.
+ 	(GLIBCXX_CHECK_INIT_PRIORITY): Likewise.
+ 	(GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES): Likewise.
+ 	(GLIBCXX_CHECK_TEXT_ENCODING): Likewise.
+ 	(GLIBCXX_CHECK_DEBUGGING): Likewise.
+ 	(GLIBCXX_CHECK_STDIO_LOCKING): Likewise.
+ 	* configure: Regenerate.
+ 	* configure.ac: Update AC_TRY_COMPILE to AC_COMPILE_IFELSE.
+ 	* crossconfig.m4 (GLIBCXX_CHECK_MATH_DECL): Likewise.
+ 	* linkage.m4 (GLIBCXX_CHECK_MATH_DECL_1): Likewise.
+ 	(GLIBCXX_CHECK_MATH_DECLS_AND_LINKAGES_1): Likewise.
+ 	(GLIBCXX_CHECK_MATH_DECL_2): Likewise.
+ 	(GLIBCXX_CHECK_MATH_DECL_3): Likewise.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0): Delete.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1): Update
+ 	AC_TRY_COMPILE to AC_COMPILE_IFELSE.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_2): Likewise.
+ 	(GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_3): Likewise.
+ 
+ 2026-06-25  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4 (GLIBCXX_CHECK_LINKER_FEATURES): Update
+ 	AC_TRY_LINK to AC_LINK_IFELSE.
+ 	(GLIBCXX_ENABLE_LIBSTDCXX_TIME): Likewise.
+ 	(GLIBCXX_ENABLE_ATOMIC_BUILTINS): Likewise.
+ 	(GLIBCXX_ENABLE_BACKTRACE): Likewise.
+ 
+ 2026-06-25  Pietro Monteiro  <pietro@sociotechnical.xyz>
+ 
+ 	PR bootstrap/103459
+ 	* acinclude.m4 (GLIBCXX_EXPORT_INSTALL_INFO): Update
+ 	AC_HELP_STRING to AS_HELP_STRING.
+ 	(GLIBCXX_ENABLE): Likewise.
+ 	(GLIBCXX_ENABLE_CLOCALE): Likewise.
+ 	(GLIBCXX_ENABLE_HOSTED): Likewise.
+ 	(GLIBCXX_ENABLE_VERBOSE): Likewise.
+ 	(GLIBCXX_ENABLE_LOCK_POLICY): Likewise.
+ 	(GLIBCXX_EMERGENCY_EH_ALLOC): Likewise.
+ 	(GLIBCXX_ZONEINFO_DIR): Likewise.
+ 
+ 2026-06-25  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/125956
+ 	* src/c++20/format.cc [_GLIBCXX_HAVE_ICONV] (iconv_input): New
+ 	concept.
+ 	(__encoding::conv) [_GLIBCXX_HAVE_ICONV]: Use iconv_input to
+ 	decide which type to cast the input pointer to.
+ 
+ 2026-06-25  Jakub Jelinek  <jakub@redhat.com>
+ 
+ 	* src/c++23/Makefile.am (stamp-modules-bits): Use abs_builddir instead
+ 	of abs_srcdir.
+ 	* src/c++23/Makefile.in: Regenerate.
+ 
+ 2026-06-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/27_io/filesystem/operations/copy_symlink/1.cc: Add
+ 	dg-require-target-fs-symlinks.
+ 	* testsuite/27_io/filesystem/operations/copy_symlink/2.cc:
+ 	Likewise.
+ 	* testsuite/27_io/filesystem/operations/copy_symlink/3.cc:
+ 	Likewise.
+ 	* testsuite/27_io/filesystem/operations/copy_symlink/4.cc:
+ 	Likewise.
+ 
+ 2026-06-24  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/118158
+ 	* testsuite/27_io/filesystem/operations/pr118158.cc: Add
+ 	dg-require-mkfifo.
+ 
+ 2026-06-24  Tomasz Kamiński  <tkaminsk@redhat.com>
+ 
+ 	* include/std/format (__do_vformat_to): Change the preprocessor
+ 	check for __do_vformat_to.
+ 
+ 2026-06-24  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* src/c++23/Makefile.am (libstdc++.modules.json): Rewrite
+ 	without abspath make function.
+ 	(stamp-modules-bits): Likewise.
+ 	* src/c++23/Makefile.in: Rebuilt.
+ 
+ 2026-06-24  Alexandre Oliva  <oliva@adacore.com>
+ 
+ 	* acinclude.m4 (GLIBXX_ENABLE_LIBSTDCXX_TIME) [vxworks*]:
+ 	Enable __gthread_yield.
+ 	* configure: Rebuilt.
+ 
+ 2026-06-23  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/125684
+ 	* src/c++11/random.cc (bad_seed, which_source): Change void*
+ 	parameters to const void *.
+ 
+ 2026-06-23  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/bits/chrono.h (std::chrono_literals): Fix typo in
+ 	comment.
+ 
+ 2026-06-23  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/manual/debug_mode.xml: Remove 404 link to stlport
+ 	website and modernise some text about debug modes in other
+ 	implementations.
+ 	* doc/html/manual/debug_mode_design.html: Regenerate.
+ 
+ 2026-06-23  Nathan Myers  <ncm@cantrip.org>
+ 
+ 	PR libstdc++/125890
+ 	* testsuite/20_util/polymorphic_allocator/at_least.cc: New test.
+ 
  2026-06-17  Marek Polacek  <polacek@redhat.com>
  
  	* src/c++17/string-inst.cc (basic_string::data): Remove noexcept.
diff -Nrcpad gcc-17-20260621/libstdc++-v3/acinclude.m4 gcc-17-20260628/libstdc++-v3/acinclude.m4
*** gcc-17-20260621/libstdc++-v3/acinclude.m4	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/acinclude.m4	Sun Jun 28 22:32:19 2026
*************** AC_DEFUN([GLIBCXX_CONFIGURE], [
*** 70,88 ****
    # We use these options to decide which functions to include.  They are
    # set from the top level.
    AC_ARG_WITH([target-subdir],
!     AC_HELP_STRING([--with-target-subdir=SUBDIR],
  		   [configuring in a subdirectory]))
  
    AC_ARG_WITH([cross-host],
!     AC_HELP_STRING([--with-cross-host=HOST],
  		   [configuring with a cross compiler]))
  
    AC_ARG_WITH([newlib],
!     AC_HELP_STRING([--with-newlib],
  		   [assume newlib as a system C library]))
  
    AC_ARG_WITH([picolibc],
!     AC_HELP_STRING([--with-picolibc],
  		   [assume picolibc as a system C library]))
  
    # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
--- 70,88 ----
    # We use these options to decide which functions to include.  They are
    # set from the top level.
    AC_ARG_WITH([target-subdir],
!     AS_HELP_STRING([--with-target-subdir=SUBDIR],
  		   [configuring in a subdirectory]))
  
    AC_ARG_WITH([cross-host],
!     AS_HELP_STRING([--with-cross-host=HOST],
  		   [configuring with a cross compiler]))
  
    AC_ARG_WITH([newlib],
!     AS_HELP_STRING([--with-newlib],
  		   [assume newlib as a system C library]))
  
    AC_ARG_WITH([picolibc],
!     AS_HELP_STRING([--with-picolibc],
  		   [assume picolibc as a system C library]))
  
    # Will set LN_S to either 'ln -s', 'ln', or 'cp -p' (if linking isn't
*************** AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURE
*** 139,153 ****
    # All these tests are for C++; save the language and the compiler flags.
    # The CXXFLAGS thing is suspicious, but based on similar bits previously
    # found in GLIBCXX_CONFIGURE.
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_test_CXXFLAGS="${CXXFLAGS+set}"
    ac_save_CXXFLAGS="$CXXFLAGS"
  
    # Check for -ffunction-sections -fdata-sections
    AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
    CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
!   AC_TRY_COMPILE([int foo; void bar() { };],, [ac_fdsections=yes], [ac_fdsections=no])
    if test "$ac_test_CXXFLAGS" = set; then
      CXXFLAGS="$ac_save_CXXFLAGS"
    else
--- 139,154 ----
    # All these tests are for C++; save the language and the compiler flags.
    # The CXXFLAGS thing is suspicious, but based on similar bits previously
    # found in GLIBCXX_CONFIGURE.
!   AC_LANG_PUSH([C++])
    ac_test_CXXFLAGS="${CXXFLAGS+set}"
    ac_save_CXXFLAGS="$CXXFLAGS"
  
    # Check for -ffunction-sections -fdata-sections
    AC_MSG_CHECKING([for g++ that supports -ffunction-sections -fdata-sections])
    CXXFLAGS='-g -Werror -ffunction-sections -fdata-sections'
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[int foo; void bar() { };]],[[]])],
!     [ac_fdsections=yes],
!     [ac_fdsections=no])
    if test "$ac_test_CXXFLAGS" = set; then
      CXXFLAGS="$ac_save_CXXFLAGS"
    else
*************** AC_DEFUN([GLIBCXX_CHECK_COMPILER_FEATURE
*** 159,165 ****
    fi
    AC_MSG_RESULT($ac_fdsections)
  
!   AC_LANG_RESTORE
    AC_SUBST(SECTION_FLAGS)
  ])
  
--- 160,166 ----
    fi
    AC_MSG_RESULT($ac_fdsections)
  
!   AC_LANG_POP([C++])
    AC_SUBST(SECTION_FLAGS)
  ])
  
*************** AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES]
*** 254,262 ****
  
      # Check for -Wl,--gc-sections
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_TRY_LINK([ int one(void) { return 1; }
       int two(void) { return 2; }
! 	], [ two(); ] , [ac_gcsections=yes], [ac_gcsections=no])
      if test "$ac_gcsections" = "yes"; then
        rm -f conftest.c
        touch conftest.c
--- 255,263 ----
  
      # Check for -Wl,--gc-sections
      AC_MSG_CHECKING([for ld that supports -Wl,--gc-sections])
!     AC_LINK_IFELSE([AC_LANG_PROGRAM([[ int one(void) { return 1; }
       int two(void) { return 2; }
! 	]], [[ two(); ]])] , [ac_gcsections=yes], [ac_gcsections=no])
      if test "$ac_gcsections" = "yes"; then
        rm -f conftest.c
        touch conftest.c
*************** dnl  various HAVE_LIMIT_* for individual
*** 323,334 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
    AC_MSG_CHECKING([for RLIMIT_$1])
!   AC_TRY_COMPILE(
!     [#include <unistd.h>
       #include <sys/time.h>
       #include <sys/resource.h>
!     ],
!     [ int f = RLIMIT_$1 ; ],
      [glibcxx_mresult=1], [glibcxx_mresult=0])
    AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
  		     [Only used in build directory testsuite_hooks.h.])
--- 324,335 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancilliary], [
    AC_MSG_CHECKING([for RLIMIT_$1])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
!     [[#include <unistd.h>
       #include <sys/time.h>
       #include <sys/resource.h>
!     ]],
!     [[ int f = RLIMIT_$1 ; ]])],
      [glibcxx_mresult=1], [glibcxx_mresult=0])
    AC_DEFINE_UNQUOTED(HAVE_LIMIT_$1, $glibcxx_mresult,
  		     [Only used in build directory testsuite_hooks.h.])
*************** AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT_ancill
*** 337,344 ****
  ])
  
  AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    setrlimit_have_headers=yes
    AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
  		   [],
--- 338,344 ----
  ])
  
  AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
!   AC_LANG_PUSH([C++])
    setrlimit_have_headers=yes
    AC_CHECK_HEADERS(unistd.h sys/time.h sys/resource.h,
  		   [],
*************** AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
*** 356,368 ****
      # Check for rlimit, setrlimit.
      AC_CACHE_CHECK([for testsuite resource limits support],
        glibcxx_cv_setrlimit, [
!       AC_TRY_COMPILE(
! 	[#include <unistd.h>
  	 #include <sys/time.h>
  	 #include <sys/resource.h>
! 	],
! 	[struct rlimit r;
! 	 setrlimit(0, &r);],
  	[glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
      ])
  
--- 356,368 ----
      # Check for rlimit, setrlimit.
      AC_CACHE_CHECK([for testsuite resource limits support],
        glibcxx_cv_setrlimit, [
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <sys/time.h>
  	 #include <sys/resource.h>
! 	]],
! 	[[struct rlimit r;
! 	 setrlimit(0, &r);]])],
  	[glibcxx_cv_setrlimit=yes], [glibcxx_cv_setrlimit=no])
      ])
  
*************** AC_DEFUN([GLIBCXX_CHECK_SETRLIMIT], [
*** 372,378 ****
  		"make check"])
      fi
    fi
!   AC_LANG_RESTORE
  ])
  
  
--- 372,378 ----
  		"make check"])
      fi
    fi
!   AC_LANG_POP([C++])
  ])
  
  
*************** dnl Define HAVE_S_ISREG / HAVE_S_IFREG a
*** 382,389 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 382,388 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFREG], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_S_ISREG_OR_S_IFR
*** 419,425 ****
    AC_MSG_RESULT($res)
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  
--- 418,424 ----
    AC_MSG_RESULT($res)
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  
*************** dnl Check whether poll is available in <
*** 428,435 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_POLL], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 427,433 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_POLL], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_POLL], [
*** 447,453 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  
--- 445,451 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  
*************** dnl Check whether writev is available in
*** 456,463 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 454,460 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_WRITEV], [
*** 474,480 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  
--- 471,477 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  
*************** dnl
*** 482,489 ****
  dnl Check whether LFS support is available.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_LFS], [
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    AC_CACHE_CHECK([for LFS support], glibcxx_cv_LFS, [
--- 479,485 ----
  dnl Check whether LFS support is available.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_LFS], [
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    AC_CACHE_CHECK([for LFS support], glibcxx_cv_LFS, [
*************** AC_DEFUN([GLIBCXX_CHECK_LFS], [
*** 522,528 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  
--- 518,524 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  
*************** AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO],
*** 741,747 ****
  
    AC_MSG_CHECKING([for gxx-include-dir])
    AC_ARG_WITH([gxx-include-dir],
!     AC_HELP_STRING([--with-gxx-include-dir=DIR],
  		   [installation directory for include files]),
      [case "$withval" in
        yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
--- 737,743 ----
  
    AC_MSG_CHECKING([for gxx-include-dir])
    AC_ARG_WITH([gxx-include-dir],
!     AS_HELP_STRING([--with-gxx-include-dir=DIR],
  		   [installation directory for include files]),
      [case "$withval" in
        yes) AC_MSG_ERROR([Missing directory for --with-gxx-include-dir]) ;;
*************** AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO],
*** 753,759 ****
  
    AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
    AC_ARG_ENABLE([version-specific-runtime-libs],
!     AC_HELP_STRING([--enable-version-specific-runtime-libs],
  		   [Specify that runtime libraries should be installed in a compiler-specific directory]),
      [case "$enableval" in
        yes) version_specific_libs=yes ;;
--- 749,755 ----
  
    AC_MSG_CHECKING([for --enable-version-specific-runtime-libs])
    AC_ARG_ENABLE([version-specific-runtime-libs],
!     AS_HELP_STRING([--enable-version-specific-runtime-libs],
  		   [Specify that runtime libraries should be installed in a compiler-specific directory]),
      [case "$enableval" in
        yes) version_specific_libs=yes ;;
*************** dnl documentation.
*** 835,841 ****
  dnl
  m4_define([GLIBCXX_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AC_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE([$1],m4_dquote(_g_help),
    m4_bmatch([$5],
     [^permit ],
--- 831,837 ----
  dnl
  m4_define([GLIBCXX_ENABLE],[dnl
  m4_define([_g_switch],[--enable-$1])dnl
! m4_define([_g_help],[AS_HELP_STRING([_g_switch$3],[$4 @<:@default=$2@:>@])])dnl
   AC_ARG_ENABLE([$1],m4_dquote(_g_help),
    m4_bmatch([$5],
     [^permit ],
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 874,881 ****
    GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
  
    if test x"$enable_c99" = x"yes"; then
!     AC_LANG_SAVE
!     AC_LANG_CPLUSPLUS
  
      # Use -std=c++98 (instead of -std=gnu++98) because leaving __STRICT_ANSI__
      # undefined may cause fake C99 facilities, like pre-standard snprintf,
--- 870,876 ----
    GLIBCXX_ENABLE(c99,$1,,[turns on ISO/IEC 9899:1999 support])
  
    if test x"$enable_c99" = x"yes"; then
!     AC_LANG_PUSH([C++])
  
      # Use -std=c++98 (instead of -std=gnu++98) because leaving __STRICT_ANSI__
      # undefined may cause fake C99 facilities, like pre-standard snprintf,
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1048,1085 ****
         test x"$ac_has_wctype_h" = xyes; then
        AC_CACHE_CHECK([for ISO C99 support in <wchar.h> for C++98],
  	glibcxx_cv_c99_wchar_cxx98, [
!         AC_TRY_COMPILE([#include <wchar.h>
            namespace test
            {
              using ::wcstold;
              using ::wcstoll;
              using ::wcstoull;
            }
!         ], [], [glibcxx_cv_c99_wchar_cxx98=yes], [glibcxx_cv_c99_wchar_cxx98=no])
        ])
  
        # Checks for wide character functions that may not be present.
        # Injection of these is wrapped with guard macros.
        # NB: only put functions here, instead of immediately above, if
        # absolutely necessary.
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::vfwscanf; }], [],
          [AC_DEFINE(HAVE_VFWSCANF, 1, [Defined if vfwscanf exists.])], [])
  
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::vswscanf; }], [],
          [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
  
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::vwscanf; }], [],
          [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
  
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::wcstof; }], [],
          [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
  
!       AC_TRY_COMPILE([#include <wctype.h>],
!         [wint_t t; int i = iswblank(t);],
          [AC_DEFINE(HAVE_ISWBLANK, 1, [Defined if iswblank exists.])], [])
  
        if test x"$glibcxx_cv_c99_wchar_cxx98" = x"yes"; then
--- 1043,1080 ----
         test x"$ac_has_wctype_h" = xyes; then
        AC_CACHE_CHECK([for ISO C99 support in <wchar.h> for C++98],
  	glibcxx_cv_c99_wchar_cxx98, [
!         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
            namespace test
            {
              using ::wcstold;
              using ::wcstoll;
              using ::wcstoull;
            }
!         ]], [[]])], [glibcxx_cv_c99_wchar_cxx98=yes], [glibcxx_cv_c99_wchar_cxx98=no])
        ])
  
        # Checks for wide character functions that may not be present.
        # Injection of these is wrapped with guard macros.
        # NB: only put functions here, instead of immediately above, if
        # absolutely necessary.
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::vfwscanf; }]], [[]])],
          [AC_DEFINE(HAVE_VFWSCANF, 1, [Defined if vfwscanf exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::vswscanf; }]], [[]])],
          [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::vwscanf; }]], [[]])],
          [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::wcstof; }]], [[]])],
          [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wctype.h>]],
!         [[wint_t t; int i = iswblank(t);]])],
          [AC_DEFINE(HAVE_ISWBLANK, 1, [Defined if iswblank exists.])], [])
  
        if test x"$glibcxx_cv_c99_wchar_cxx98" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1105,1114 ****
      gcc_no_link="$ac_save_gcc_no_link"
      LIBS="$ac_save_LIBS"
      CXXFLAGS="$ac_save_CXXFLAGS"
!     AC_LANG_RESTORE
  
!     AC_LANG_SAVE
!     AC_LANG_CPLUSPLUS
  
      # Use -std=c++11 and test again for C99 library feature in C++11 mode.
      # For the reasons given above we use -std=c++11 not -std=gnu++11.
--- 1100,1108 ----
      gcc_no_link="$ac_save_gcc_no_link"
      LIBS="$ac_save_LIBS"
      CXXFLAGS="$ac_save_CXXFLAGS"
!     AC_LANG_POP([C++])
  
!     AC_LANG_PUSH([C++])
  
      # Use -std=c++11 and test again for C99 library feature in C++11 mode.
      # For the reasons given above we use -std=c++11 not -std=gnu++11.
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1130,1139 ****
      # Check for the existence of <stdint.h> types.
      AC_CACHE_CHECK([for ISO C99 support in <stdint.h> for C++11],
      glibcxx_cv_c99_stdint, [
!     AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
  		    #define __STDC_CONSTANT_MACROS
! 		    #include <stdint.h>],
! 		   [typedef int8_t          my_int8_t;
  		    my_int8_t               i8 = INT8_MIN;
  		    i8 = INT8_MAX;
  		    typedef int16_t         my_int16_t;
--- 1124,1133 ----
      # Check for the existence of <stdint.h> types.
      AC_CACHE_CHECK([for ISO C99 support in <stdint.h> for C++11],
      glibcxx_cv_c99_stdint, [
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define __STDC_LIMIT_MACROS
  		    #define __STDC_CONSTANT_MACROS
! 		    #include <stdint.h>]],
! 		   [[typedef int8_t          my_int8_t;
  		    my_int8_t               i8 = INT8_MIN;
  		    i8 = INT8_MAX;
  		    typedef int16_t         my_int16_t;
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1217,1224 ****
  		    typedef uintptr_t       my_uintptr_t;
  		    my_uintptr_t            uip = UINTPTR_MAX;
  		    uip = UINTPTR_MAX;
! 		   ],[glibcxx_cv_c99_stdint=yes],
! 		     [glibcxx_cv_c99_stdint=no])
      ])
      if test x"$glibcxx_cv_c99_stdint" = x"yes"; then
        AC_DEFINE(_GLIBCXX_USE_C99_STDINT, 1,
--- 1211,1218 ----
  		    typedef uintptr_t       my_uintptr_t;
  		    my_uintptr_t            uip = UINTPTR_MAX;
  		    uip = UINTPTR_MAX;
! 		   ]])],[glibcxx_cv_c99_stdint=yes],
! 		        [glibcxx_cv_c99_stdint=no])
      ])
      if test x"$glibcxx_cv_c99_stdint" = x"yes"; then
        AC_DEFINE(_GLIBCXX_USE_C99_STDINT, 1,
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1231,1245 ****
      ac_c99_inttypes=no;
      if test x"$glibcxx_cv_c99_stdint" = x"yes"; then
        AC_MSG_CHECKING([for ISO C99 support for C++11 in <inttypes.h>])
!       AC_TRY_COMPILE([#include <inttypes.h>],
! 		     [intmax_t i, numer, denom, base;
  		      const char* s;
  		      char** endptr;
  		      intmax_t ret = imaxabs(i);
  		      imaxdiv_t dret = imaxdiv(numer, denom);
  		      ret = strtoimax(s, endptr, base);
  		      uintmax_t uret = strtoumax(s, endptr, base);
! 		     ],[ac_c99_inttypes=yes], [ac_c99_inttypes=no])
        AC_MSG_RESULT($ac_c99_inttypes)
      fi
      if test x"$ac_c99_inttypes" = x"yes"; then
--- 1225,1239 ----
      ac_c99_inttypes=no;
      if test x"$glibcxx_cv_c99_stdint" = x"yes"; then
        AC_MSG_CHECKING([for ISO C99 support for C++11 in <inttypes.h>])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <inttypes.h>]],
! 		     [[intmax_t i, numer, denom, base;
  		      const char* s;
  		      char** endptr;
  		      intmax_t ret = imaxabs(i);
  		      imaxdiv_t dret = imaxdiv(numer, denom);
  		      ret = strtoimax(s, endptr, base);
  		      uintmax_t uret = strtoumax(s, endptr, base);
! 		     ]])],[ac_c99_inttypes=yes], [ac_c99_inttypes=no])
        AC_MSG_RESULT($ac_c99_inttypes)
      fi
      if test x"$ac_c99_inttypes" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1253,1266 ****
      ac_c99_inttypes_wchar_t=no;
      if test x"$glibcxx_cv_c99_stdint" = x"yes"; then
        AC_MSG_CHECKING([for wchar_t ISO C99 support for C++11 in <inttypes.h>])
!       AC_TRY_COMPILE([#include <inttypes.h>],
! 		     [intmax_t base;
  		      const wchar_t* s;
  		      wchar_t** endptr;
  		      intmax_t ret = wcstoimax(s, endptr, base);
  		      uintmax_t uret = wcstoumax(s, endptr, base);
! 		     ],[ac_c99_inttypes_wchar_t=yes],
! 		       [ac_c99_inttypes_wchar_t=no])
        AC_MSG_RESULT($ac_c99_inttypes_wchar_t)
      fi
      if test x"$ac_c99_inttypes_wchar_t" = x"yes"; then
--- 1247,1260 ----
      ac_c99_inttypes_wchar_t=no;
      if test x"$glibcxx_cv_c99_stdint" = x"yes"; then
        AC_MSG_CHECKING([for wchar_t ISO C99 support for C++11 in <inttypes.h>])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <inttypes.h>]],
! 		     [[intmax_t base;
  		      const wchar_t* s;
  		      wchar_t** endptr;
  		      intmax_t ret = wcstoimax(s, endptr, base);
  		      uintmax_t uret = wcstoumax(s, endptr, base);
! 		     ]])],[ac_c99_inttypes_wchar_t=yes],
! 		          [ac_c99_inttypes_wchar_t=no])
        AC_MSG_RESULT($ac_c99_inttypes_wchar_t)
      fi
      if test x"$ac_c99_inttypes_wchar_t" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1300,1310 ****
      # Check for the existence of <math.h> typedefs.
      AC_CACHE_CHECK([for ISO C99 float types for C++11 in <math.h>],
      glibcxx_cv_c99_flt_eval_types, [
!     AC_TRY_COMPILE([#include <math.h>],
! 		   [// Types
  		    typedef double_t  my_double_t;
  		    typedef float_t   my_float_t;
! 		   ],
  		   [glibcxx_cv_c99_flt_eval_types=yes],
  		   [glibcxx_cv_c99_flt_eval_types=no])
      ])
--- 1294,1304 ----
      # Check for the existence of <math.h> typedefs.
      AC_CACHE_CHECK([for ISO C99 float types for C++11 in <math.h>],
      glibcxx_cv_c99_flt_eval_types, [
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
! 		   [[// Types
  		    typedef double_t  my_double_t;
  		    typedef float_t   my_float_t;
! 		   ]])],
  		   [glibcxx_cv_c99_flt_eval_types=yes],
  		   [glibcxx_cv_c99_flt_eval_types=no])
      ])
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1317,1324 ****
      # Check for the existence of <math.h> functions.
      AC_CACHE_CHECK([for ISO C99 function support for C++11 in <math.h>],
      glibcxx_cv_c99_math_funcs, [
!     AC_TRY_COMPILE([#include <math.h>],
! 		   [
  		    // Hyperbolic
  		    acosh(0.0);
  		    acoshf(0.0f);
--- 1311,1318 ----
      # Check for the existence of <math.h> functions.
      AC_CACHE_CHECK([for ISO C99 function support for C++11 in <math.h>],
      glibcxx_cv_c99_math_funcs, [
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
! 		   [[
  		    // Hyperbolic
  		    acosh(0.0);
  		    acoshf(0.0f);
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1435,1441 ****
  		    fma(0.0, 0.0, 0.0);
  		    fmaf(0.0f, 0.0f, 0.0f);
  		    fmal(0.0l, 0.0l, 0.0l);
! 		   ],
  		   [glibcxx_cv_c99_math_funcs=yes],
  		   [glibcxx_cv_c99_math_funcs=no])
      ])
--- 1429,1435 ----
  		    fma(0.0, 0.0, 0.0);
  		    fmaf(0.0f, 0.0f, 0.0f);
  		    fmal(0.0l, 0.0l, 0.0l);
! 		   ]])],
  		   [glibcxx_cv_c99_math_funcs=yes],
  		   [glibcxx_cv_c99_math_funcs=no])
      ])
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1448,1461 ****
  	darwin*)
  	  AC_CACHE_CHECK([for ISO C99 rounding functions in <math.h>],
  	    glibcxx_cv_c99_math_llround, [
! 	    AC_TRY_COMPILE([#include <math.h>],
! 		   [llrint(0.0);
  		    llrintf(0.0f);
  		    llrintl(0.0l);
  		    llround(0.0);
  		    llroundf(0.0f);
  		    llroundl(0.0l);
! 		   ],
  		   [glibcxx_cv_c99_math_llround=yes],
  		   [glibcxx_cv_c99_math_llround=no])
  	    ])
--- 1442,1455 ----
  	darwin*)
  	  AC_CACHE_CHECK([for ISO C99 rounding functions in <math.h>],
  	    glibcxx_cv_c99_math_llround, [
! 	    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
! 		   [[llrint(0.0);
  		    llrintf(0.0f);
  		    llrintl(0.0l);
  		    llround(0.0);
  		    llroundf(0.0f);
  		    llroundl(0.0l);
! 		   ]])],
  		   [glibcxx_cv_c99_math_llround=yes],
  		   [glibcxx_cv_c99_math_llround=no])
  	    ])
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1541,1548 ****
      ac_c99_complex_arc=no;
      if test x"$ac_has_complex_h" = x"yes"; then
        AC_MSG_CHECKING([for ISO C99 support for inverse trig functions in <complex.h>])
!       AC_TRY_COMPILE([#include <complex.h>],
! 		     [typedef __complex__ float float_type; float_type tmpf;
  		      cacosf(tmpf);
  		      casinf(tmpf);
  		      catanf(tmpf);
--- 1535,1542 ----
      ac_c99_complex_arc=no;
      if test x"$ac_has_complex_h" = x"yes"; then
        AC_MSG_CHECKING([for ISO C99 support for inverse trig functions in <complex.h>])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <complex.h>]],
! 		     [[typedef __complex__ float float_type; float_type tmpf;
  		      cacosf(tmpf);
  		      casinf(tmpf);
  		      catanf(tmpf);
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1563,1569 ****
  		      cacoshl(tmpld);
  		      casinhl(tmpld);
  		      catanhl(tmpld);
! 		     ],[ac_c99_complex_arc=yes], [ac_c99_complex_arc=no])
      fi
      AC_MSG_RESULT($ac_c99_complex_arc)
      if test x"$ac_c99_complex_arc" = x"yes"; then
--- 1557,1563 ----
  		      cacoshl(tmpld);
  		      casinhl(tmpld);
  		      catanhl(tmpld);
! 		     ]])],[ac_c99_complex_arc=yes], [ac_c99_complex_arc=no])
      fi
      AC_MSG_RESULT($ac_c99_complex_arc)
      if test x"$ac_c99_complex_arc" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1629,1666 ****
         test x"$ac_has_wctype_h" = xyes; then
        AC_CACHE_CHECK([for ISO C99 support in <wchar.h> for C++11],
  	glibcxx_cv_c99_wchar_cxx11, [
!         AC_TRY_COMPILE([#include <wchar.h>
            namespace test
            {
              using ::wcstold;
              using ::wcstoll;
              using ::wcstoull;
            }
!         ], [], [glibcxx_cv_c99_wchar_cxx11=yes], [glibcxx_cv_c99_wchar_cxx11=no])
        ])
  
        # Checks for wide character functions that may not be present.
        # Injection of these is wrapped with guard macros.
        # NB: only put functions here, instead of immediately above, if
        # absolutely necessary.
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::vfwscanf; }], [],
          [AC_DEFINE(HAVE_VFWSCANF, 1, [Defined if vfwscanf exists.])], [])
  
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::vswscanf; }], [],
          [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
  
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::vwscanf; }], [],
          [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
  
!       AC_TRY_COMPILE([#include <wchar.h>
!         namespace test { using ::wcstof; }], [],
          [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
  
!       AC_TRY_COMPILE([#include <wctype.h>],
!         [wint_t t; int i = iswblank(t);],
          [AC_DEFINE(HAVE_ISWBLANK, 1, [Defined if iswblank exists.])], [])
  
        if test x"$glibcxx_cv_c99_wchar_cxx11" = x"yes"; then
--- 1623,1660 ----
         test x"$ac_has_wctype_h" = xyes; then
        AC_CACHE_CHECK([for ISO C99 support in <wchar.h> for C++11],
  	glibcxx_cv_c99_wchar_cxx11, [
!         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
            namespace test
            {
              using ::wcstold;
              using ::wcstoll;
              using ::wcstoull;
            }
!         ]], [[]])], [glibcxx_cv_c99_wchar_cxx11=yes], [glibcxx_cv_c99_wchar_cxx11=no])
        ])
  
        # Checks for wide character functions that may not be present.
        # Injection of these is wrapped with guard macros.
        # NB: only put functions here, instead of immediately above, if
        # absolutely necessary.
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::vfwscanf; }]], [[]])],
          [AC_DEFINE(HAVE_VFWSCANF, 1, [Defined if vfwscanf exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::vswscanf; }]], [[]])],
          [AC_DEFINE(HAVE_VSWSCANF, 1, [Defined if vswscanf exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::vwscanf; }]], [[]])],
          [AC_DEFINE(HAVE_VWSCANF, 1, [Defined if vwscanf exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
!         namespace test { using ::wcstof; }]], [[]])],
          [AC_DEFINE(HAVE_WCSTOF, 1, [Defined if wcstof exists.])], [])
  
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wctype.h>]],
!         [[wint_t t; int i = iswblank(t);]])],
          [AC_DEFINE(HAVE_ISWBLANK, 1, [Defined if iswblank exists.])], [])
  
        if test x"$glibcxx_cv_c99_wchar_cxx11" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1673,1684 ****
      # Check for the existence of <ctype.h> functions.
      AC_CACHE_CHECK([for ISO C99 support for C++11 in <ctype.h>],
      glibcxx_cv_c99_ctype, [
!     AC_TRY_COMPILE([#include <ctype.h>],
! 		   [int ch;
  		    int ret;
  		    ret = isblank(ch);
! 		   ],[glibcxx_cv_c99_ctype=yes],
! 		     [glibcxx_cv_c99_ctype=no])
      ])
      if test x"$glibcxx_cv_c99_ctype" = x"yes"; then
        AC_DEFINE(_GLIBCXX_USE_C99_CTYPE, 1,
--- 1667,1678 ----
      # Check for the existence of <ctype.h> functions.
      AC_CACHE_CHECK([for ISO C99 support for C++11 in <ctype.h>],
      glibcxx_cv_c99_ctype, [
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <ctype.h>]],
! 		   [[int ch;
  		    int ret;
  		    ret = isblank(ch);
! 		   ]])],[glibcxx_cv_c99_ctype=yes],
! 		        [glibcxx_cv_c99_ctype=no])
      ])
      if test x"$glibcxx_cv_c99_ctype" = x"yes"; then
        AC_DEFINE(_GLIBCXX_USE_C99_CTYPE, 1,
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1691,1698 ****
      ac_c99_fenv=no;
      if test x"$ac_has_fenv_h" = x"yes"; then
        AC_MSG_CHECKING([for ISO C99 support for C++11 in <fenv.h>])
!       AC_TRY_COMPILE([#include <fenv.h>],
! 		     [int except, mode;
  		      fexcept_t* pflag;
  		      fenv_t* penv;
  		      int ret;
--- 1685,1692 ----
      ac_c99_fenv=no;
      if test x"$ac_has_fenv_h" = x"yes"; then
        AC_MSG_CHECKING([for ISO C99 support for C++11 in <fenv.h>])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <fenv.h>]],
! 		     [[int except, mode;
  		      fexcept_t* pflag;
  		      fenv_t* penv;
  		      int ret;
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1707,1713 ****
  		      ret = feholdexcept(penv);
  		      ret = fesetenv(penv);
  		      ret = feupdateenv(penv);
! 		     ],[ac_c99_fenv=yes], [ac_c99_fenv=no])
        AC_MSG_RESULT($ac_c99_fenv)
      fi
      if test x"$ac_c99_fenv" = x"yes"; then
--- 1701,1707 ----
  		      ret = feholdexcept(penv);
  		      ret = fesetenv(penv);
  		      ret = feupdateenv(penv);
! 		     ]])],[ac_c99_fenv=yes], [ac_c99_fenv=no])
        AC_MSG_RESULT($ac_c99_fenv)
      fi
      if test x"$ac_c99_fenv" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_C99], [
*** 1719,1725 ****
      gcc_no_link="$ac_save_gcc_no_link"
      LIBS="$ac_save_LIBS"
      CXXFLAGS="$ac_save_CXXFLAGS"
!     AC_LANG_RESTORE
    fi
  
    AC_MSG_CHECKING([for fully enabled ISO C99 support])
--- 1713,1719 ----
      gcc_no_link="$ac_save_gcc_no_link"
      LIBS="$ac_save_LIBS"
      CXXFLAGS="$ac_save_CXXFLAGS"
!     AC_LANG_POP([C++])
    fi
  
    AC_MSG_CHECKING([for fully enabled ISO C99 support])
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1757,1764 ****
      [use KIND for check type],
      [permit yes|no|rt])
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
--- 1751,1757 ----
      [use KIND for check type],
      [permit yes|no|rt])
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1788,1793 ****
--- 1781,1787 ----
          ac_has_clock_monotonic=yes
          ac_has_clock_realtime=yes
          ac_has_nanosleep=yes
+         ac_has_sched_yield=yes
          ;;
        gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
          # Don't use link test for freestanding library, in case gcc_no_link=yes
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1861,1901 ****
  
      if test x"$ac_has_unistd_h" = x"yes"; then
        AC_MSG_CHECKING([for monotonic clock])
!       AC_TRY_LINK(
! 	[#include <unistd.h>
  	 #include <time.h>
! 	],
! 	[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_MONOTONIC, &tp);
! 	], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
  
        AC_MSG_RESULT($ac_has_clock_monotonic)
  
        AC_MSG_CHECKING([for realtime clock])
!       AC_TRY_LINK(
! 	[#include <unistd.h>
  	 #include <time.h>
! 	],
! 	[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_REALTIME, &tp);
! 	], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
  
        AC_MSG_RESULT($ac_has_clock_realtime)
  
        AC_MSG_CHECKING([for nanosleep])
!       AC_TRY_LINK(
! 	[#include <unistd.h>
  	 #include <time.h>
! 	],
! 	[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  nanosleep(&tp, 0);
! 	], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
  
        AC_MSG_RESULT($ac_has_nanosleep)
      fi
--- 1855,1895 ----
  
      if test x"$ac_has_unistd_h" = x"yes"; then
        AC_MSG_CHECKING([for monotonic clock])
!       AC_LINK_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <time.h>
! 	]],
! 	[[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_MONOTONIC, &tp);
! 	]])], [ac_has_clock_monotonic=yes], [ac_has_clock_monotonic=no])
  
        AC_MSG_RESULT($ac_has_clock_monotonic)
  
        AC_MSG_CHECKING([for realtime clock])
!       AC_LINK_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <time.h>
! 	]],
! 	[[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  clock_gettime(CLOCK_REALTIME, &tp);
! 	]])], [ac_has_clock_realtime=yes], [ac_has_clock_realtime=no])
  
        AC_MSG_RESULT($ac_has_clock_realtime)
  
        AC_MSG_CHECKING([for nanosleep])
!       AC_LINK_IFELSE([AC_LANG_PROGRAM(
! 	[[#include <unistd.h>
  	 #include <time.h>
! 	]],
! 	[[#if _POSIX_TIMERS > 0
  	  timespec tp;
  	 #endif
  	  nanosleep(&tp, 0);
! 	]])], [ac_has_nanosleep=yes], [ac_has_nanosleep=no])
  
        AC_MSG_RESULT($ac_has_nanosleep)
      fi
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1905,1921 ****
      case ${target_os} in
        linux* | uclinux*)
  	AC_MSG_CHECKING([for clock_gettime syscall])
! 	AC_TRY_COMPILE(
! 	  [#include <unistd.h>
  	   #include <time.h>
  	   #include <sys/syscall.h>
! 	  ],
! 	  [#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	    timespec tp;
  	   #endif
  	   syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
  	   syscall(SYS_clock_gettime, CLOCK_REALTIME, &tp);
! 	  ], [ac_has_clock_gettime_syscall=yes], [ac_has_clock_gettime_syscall=no])
  	AC_MSG_RESULT($ac_has_clock_gettime_syscall)
  	if test x"$ac_has_clock_gettime_syscall" = x"yes"; then
  	  AC_DEFINE(_GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, 1,
--- 1899,1915 ----
      case ${target_os} in
        linux* | uclinux*)
  	AC_MSG_CHECKING([for clock_gettime syscall])
! 	AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 	  [[#include <unistd.h>
  	   #include <time.h>
  	   #include <sys/syscall.h>
! 	  ]],
! 	  [[#if _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK)
  	    timespec tp;
  	   #endif
  	   syscall(SYS_clock_gettime, CLOCK_MONOTONIC, &tp);
  	   syscall(SYS_clock_gettime, CLOCK_REALTIME, &tp);
! 	  ]])], [ac_has_clock_gettime_syscall=yes], [ac_has_clock_gettime_syscall=no])
  	AC_MSG_RESULT($ac_has_clock_gettime_syscall)
  	if test x"$ac_has_clock_gettime_syscall" = x"yes"; then
  	  AC_DEFINE(_GLIBCXX_USE_CLOCK_GETTIME_SYSCALL, 1,
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1923,1933 ****
  	  ac_has_clock_monotonic=yes
  	  ac_has_clock_realtime=yes
  	  AC_MSG_CHECKING([for struct timespec that matches syscall])
! 	  AC_TRY_COMPILE(
! 	    [#include <time.h>
  	     #include <sys/syscall.h>
! 	    ],
! 	    [#ifdef SYS_clock_gettime64
  	     #if SYS_clock_gettime64 != SYS_clock_gettime
  	     // We need to use SYS_clock_gettime and libc appears to
  	     // also know about the SYS_clock_gettime64 syscall.
--- 1917,1927 ----
  	  ac_has_clock_monotonic=yes
  	  ac_has_clock_realtime=yes
  	  AC_MSG_CHECKING([for struct timespec that matches syscall])
! 	  AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 	    [[#include <time.h>
  	     #include <sys/syscall.h>
! 	    ]],
! 	    [[#ifdef SYS_clock_gettime64
  	     #if SYS_clock_gettime64 != SYS_clock_gettime
  	     // We need to use SYS_clock_gettime and libc appears to
  	     // also know about the SYS_clock_gettime64 syscall.
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1936,1942 ****
  	       "struct timespec must be compatible with SYS_clock_gettime");
  	     #endif
  	     #endif
! 	    ],
  	    [ac_timespec_matches_syscall=yes],
  	    [ac_timespec_matches_syscall=no])
  	  AC_MSG_RESULT($ac_timespec_matches_syscall)
--- 1930,1936 ----
  	       "struct timespec must be compatible with SYS_clock_gettime");
  	     #endif
  	     #endif
! 	    ]])],
  	    [ac_timespec_matches_syscall=yes],
  	    [ac_timespec_matches_syscall=no])
  	  AC_MSG_RESULT($ac_timespec_matches_syscall)
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1970,1986 ****
        [Defined if Sleep exists.])
    else
        AC_MSG_CHECKING([for sleep])
!       AC_TRY_COMPILE([#include <unistd.h>],
!                      [sleep(1)],
                       [ac_has_sleep=yes],[ac_has_sleep=no])
        if test x"$ac_has_sleep" = x"yes"; then
          AC_DEFINE(HAVE_SLEEP,1, [Defined if sleep exists.])
        fi
        AC_MSG_RESULT($ac_has_sleep)
        AC_MSG_CHECKING([for usleep])
!       AC_TRY_COMPILE([#include <unistd.h>],
!                      [sleep(1);
!                       usleep(100);],
                       [ac_has_usleep=yes],[ac_has_usleep=no])
        if test x"$ac_has_usleep" = x"yes"; then
          AC_DEFINE(HAVE_USLEEP,1, [Defined if usleep exists.])
--- 1964,1980 ----
        [Defined if Sleep exists.])
    else
        AC_MSG_CHECKING([for sleep])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
!                      [[sleep(1)]])],
                       [ac_has_sleep=yes],[ac_has_sleep=no])
        if test x"$ac_has_sleep" = x"yes"; then
          AC_DEFINE(HAVE_SLEEP,1, [Defined if sleep exists.])
        fi
        AC_MSG_RESULT($ac_has_sleep)
        AC_MSG_CHECKING([for usleep])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
!                      [[sleep(1);
!                       usleep(100);]])],
                       [ac_has_usleep=yes],[ac_has_usleep=no])
        if test x"$ac_has_usleep" = x"yes"; then
          AC_DEFINE(HAVE_USLEEP,1, [Defined if usleep exists.])
*************** AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME]
*** 1996,2002 ****
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 1990,1996 ----
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
*** 2007,2014 ****
  
    AC_MSG_CHECKING([for gettimeofday])
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 2001,2007 ----
  
    AC_MSG_CHECKING([for gettimeofday])
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_GETTIMEOFDAY], [
*** 2029,2035 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 2022,2028 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl facilities in Chapter 8, "C compatib
*** 2038,2045 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    # Use -std=c++98 because -std=gnu++98 leaves __STRICT_ANSI__
    # undefined and fake C99 facilities may be spuriously enabled.
--- 2031,2037 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
  
!   AC_LANG_PUSH([C++])
  
    # Use -std=c++98 because -std=gnu++98 leaves __STRICT_ANSI__
    # undefined and fake C99 facilities may be spuriously enabled.
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2052,2059 ****
    ac_c99_complex_tr1=no;
    if test x"$ac_has_complex_h" = x"yes"; then
      AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
!     AC_TRY_COMPILE([#include <complex.h>],
! 		   [typedef __complex__ float float_type; float_type tmpf;
  		    cacosf(tmpf);
  		    casinf(tmpf);
  		    catanf(tmpf);
--- 2044,2051 ----
    ac_c99_complex_tr1=no;
    if test x"$ac_has_complex_h" = x"yes"; then
      AC_MSG_CHECKING([for ISO C99 support to TR1 in <complex.h>])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <complex.h>]],
! 		   [[typedef __complex__ float float_type; float_type tmpf;
  		    cacosf(tmpf);
  		    casinf(tmpf);
  		    catanf(tmpf);
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2074,2080 ****
  		    cacoshl(tmpld);
  		    casinhl(tmpld);
  		    catanhl(tmpld);
! 		   ],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
    fi
    AC_MSG_RESULT($ac_c99_complex_tr1)
    if test x"$ac_c99_complex_tr1" = x"yes"; then
--- 2066,2072 ----
  		    cacoshl(tmpld);
  		    casinhl(tmpld);
  		    catanhl(tmpld);
! 		   ]])],[ac_c99_complex_tr1=yes], [ac_c99_complex_tr1=no])
    fi
    AC_MSG_RESULT($ac_c99_complex_tr1)
    if test x"$ac_c99_complex_tr1" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2087,2098 ****
    # Check for the existence of <ctype.h> functions.
    AC_CACHE_CHECK([for ISO C99 support to TR1 in <ctype.h>],
    glibcxx_cv_c99_ctype_tr1, [
!   AC_TRY_COMPILE([#include <ctype.h>],
! 		 [int ch;
  		  int ret;
  		  ret = isblank(ch);
! 		 ],[glibcxx_cv_c99_ctype_tr1=yes],
! 		   [glibcxx_cv_c99_ctype_tr1=no])
    ])
    if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
      AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
--- 2079,2090 ----
    # Check for the existence of <ctype.h> functions.
    AC_CACHE_CHECK([for ISO C99 support to TR1 in <ctype.h>],
    glibcxx_cv_c99_ctype_tr1, [
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <ctype.h>]],
! 		 [[int ch;
  		  int ret;
  		  ret = isblank(ch);
! 		 ]])],[glibcxx_cv_c99_ctype_tr1=yes],
! 		      [glibcxx_cv_c99_ctype_tr1=no])
    ])
    if test x"$glibcxx_cv_c99_ctype_tr1" = x"yes"; then
      AC_DEFINE(_GLIBCXX_USE_C99_CTYPE_TR1, 1,
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2105,2112 ****
    ac_c99_fenv_tr1=no;
    if test x"$ac_has_fenv_h" = x"yes"; then
      AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
!     AC_TRY_COMPILE([#include <fenv.h>],
! 		   [int except, mode;
  		    fexcept_t* pflag;
  		    fenv_t* penv;
  		    int ret;
--- 2097,2104 ----
    ac_c99_fenv_tr1=no;
    if test x"$ac_has_fenv_h" = x"yes"; then
      AC_MSG_CHECKING([for ISO C99 support to TR1 in <fenv.h>])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <fenv.h>]],
! 		   [[int except, mode;
  		    fexcept_t* pflag;
  		    fenv_t* penv;
  		    int ret;
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2121,2127 ****
  		    ret = feholdexcept(penv);
  		    ret = fesetenv(penv);
  		    ret = feupdateenv(penv);
! 		   ],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
      AC_MSG_RESULT($ac_c99_fenv_tr1)
    fi
    if test x"$ac_c99_fenv_tr1" = x"yes"; then
--- 2113,2119 ----
  		    ret = feholdexcept(penv);
  		    ret = fesetenv(penv);
  		    ret = feupdateenv(penv);
! 		   ]])],[ac_c99_fenv_tr1=yes], [ac_c99_fenv_tr1=no])
      AC_MSG_RESULT($ac_c99_fenv_tr1)
    fi
    if test x"$ac_c99_fenv_tr1" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2133,2142 ****
    # Check for the existence of <stdint.h> types.
    AC_CACHE_CHECK([for ISO C99 support to TR1 in <stdint.h>],
    glibcxx_cv_c99_stdint_tr1, [
!   AC_TRY_COMPILE([#define __STDC_LIMIT_MACROS
  		  #define __STDC_CONSTANT_MACROS
! 		  #include <stdint.h>],
! 		 [typedef int8_t          my_int8_t;
  		  my_int8_t               i8 = INT8_MIN;
  		  i8 = INT8_MAX;
  		  typedef int16_t         my_int16_t;
--- 2125,2134 ----
    # Check for the existence of <stdint.h> types.
    AC_CACHE_CHECK([for ISO C99 support to TR1 in <stdint.h>],
    glibcxx_cv_c99_stdint_tr1, [
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define __STDC_LIMIT_MACROS
  		  #define __STDC_CONSTANT_MACROS
! 		  #include <stdint.h>]],
! 		 [[typedef int8_t          my_int8_t;
  		  my_int8_t               i8 = INT8_MIN;
  		  i8 = INT8_MAX;
  		  typedef int16_t         my_int16_t;
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2220,2227 ****
  		  typedef uintptr_t       my_uintptr_t;
  		  my_uintptr_t            uip = UINTPTR_MAX;
  		  uip = UINTPTR_MAX;
! 		 ],[glibcxx_cv_c99_stdint_tr1=yes],
! 		   [glibcxx_cv_c99_stdint_tr1=no])
    ])
    if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
      AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
--- 2212,2219 ----
  		  typedef uintptr_t       my_uintptr_t;
  		  my_uintptr_t            uip = UINTPTR_MAX;
  		  uip = UINTPTR_MAX;
! 		 ]])],[glibcxx_cv_c99_stdint_tr1=yes],
! 		      [glibcxx_cv_c99_stdint_tr1=no])
    ])
    if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
      AC_DEFINE(_GLIBCXX_USE_C99_STDINT_TR1, 1,
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2232,2239 ****
    # Check for the existence of <math.h> functions.
    AC_CACHE_CHECK([for ISO C99 support to TR1 in <math.h>],
    glibcxx_cv_c99_math_tr1, [
!   AC_TRY_COMPILE([#include <math.h>],
! 		 [typedef double_t  my_double_t;
  		  typedef float_t   my_float_t;
  		  acosh(0.0);
  		  acoshf(0.0f);
--- 2224,2231 ----
    # Check for the existence of <math.h> functions.
    AC_CACHE_CHECK([for ISO C99 support to TR1 in <math.h>],
    glibcxx_cv_c99_math_tr1, [
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
! 		 [[typedef double_t  my_double_t;
  		  typedef float_t   my_float_t;
  		  acosh(0.0);
  		  acoshf(0.0f);
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2342,2348 ****
  		  trunc(0.0);
  		  truncf(0.0f);
  		  truncl(0.0l);
! 		 ],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
    ])
    if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
      AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
--- 2334,2340 ----
  		  trunc(0.0);
  		  truncf(0.0f);
  		  truncl(0.0l);
! 		 ]])],[glibcxx_cv_c99_math_tr1=yes], [glibcxx_cv_c99_math_tr1=no])
    ])
    if test x"$glibcxx_cv_c99_math_tr1" = x"yes"; then
      AC_DEFINE(_GLIBCXX_USE_C99_MATH_TR1, 1,
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2355,2369 ****
    ac_c99_inttypes_tr1=no;
    if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
      AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
!     AC_TRY_COMPILE([#include <inttypes.h>],
! 		   [intmax_t i, numer, denom, base;
  		    const char* s;
  		    char** endptr;
  		    intmax_t ret = imaxabs(i);
  		    imaxdiv_t dret = imaxdiv(numer, denom);
  		    ret = strtoimax(s, endptr, base);
  		    uintmax_t uret = strtoumax(s, endptr, base);
! 		   ],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
      AC_MSG_RESULT($ac_c99_inttypes_tr1)
    fi
    if test x"$ac_c99_inttypes_tr1" = x"yes"; then
--- 2347,2361 ----
    ac_c99_inttypes_tr1=no;
    if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
      AC_MSG_CHECKING([for ISO C99 support to TR1 in <inttypes.h>])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <inttypes.h>]],
! 		   [[intmax_t i, numer, denom, base;
  		    const char* s;
  		    char** endptr;
  		    intmax_t ret = imaxabs(i);
  		    imaxdiv_t dret = imaxdiv(numer, denom);
  		    ret = strtoimax(s, endptr, base);
  		    uintmax_t uret = strtoumax(s, endptr, base);
! 		   ]])],[ac_c99_inttypes_tr1=yes], [ac_c99_inttypes_tr1=no])
      AC_MSG_RESULT($ac_c99_inttypes_tr1)
    fi
    if test x"$ac_c99_inttypes_tr1" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2377,2390 ****
    ac_c99_inttypes_wchar_t_tr1=no;
    if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
      AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
!     AC_TRY_COMPILE([#include <inttypes.h>],
! 		   [intmax_t base;
  		    const wchar_t* s;
  		    wchar_t** endptr;
  		    intmax_t ret = wcstoimax(s, endptr, base);
  		    uintmax_t uret = wcstoumax(s, endptr, base);
! 		   ],[ac_c99_inttypes_wchar_t_tr1=yes],
! 		     [ac_c99_inttypes_wchar_t_tr1=no])
      AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
    fi
    if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
--- 2369,2382 ----
    ac_c99_inttypes_wchar_t_tr1=no;
    if test x"$glibcxx_cv_c99_stdint_tr1" = x"yes"; then
      AC_MSG_CHECKING([for wchar_t ISO C99 support to TR1 in <inttypes.h>])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <inttypes.h>]],
! 		   [[intmax_t base;
  		    const wchar_t* s;
  		    wchar_t** endptr;
  		    intmax_t ret = wcstoimax(s, endptr, base);
  		    uintmax_t uret = wcstoumax(s, endptr, base);
! 		   ]])],[ac_c99_inttypes_wchar_t_tr1=yes],
! 		        [ac_c99_inttypes_wchar_t_tr1=no])
      AC_MSG_RESULT($ac_c99_inttypes_wchar_t_tr1)
    fi
    if test x"$ac_c99_inttypes_wchar_t_tr1" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_CHECK_C99_TR1], [
*** 2400,2406 ****
    AC_CHECK_HEADERS(stdalign.h)
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 2392,2398 ----
    AC_CHECK_HEADERS(stdalign.h)
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
*** 2411,2424 ****
    # Test uchar.h.
    AC_CHECK_HEADERS(uchar.h, ac_has_uchar_h=yes, ac_has_uchar_h=no)
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -std=c++11"
  
    if test x"$ac_has_uchar_h" = x"yes"; then
      AC_MSG_CHECKING([for ISO C11 support for <uchar.h>])
!     AC_TRY_COMPILE([#include <uchar.h>
  		    #ifdef __STDC_UTF_16__
  		    long i = __STDC_UTF_16__;
  		    #endif
--- 2403,2415 ----
    # Test uchar.h.
    AC_CHECK_HEADERS(uchar.h, ac_has_uchar_h=yes, ac_has_uchar_h=no)
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -std=c++11"
  
    if test x"$ac_has_uchar_h" = x"yes"; then
      AC_MSG_CHECKING([for ISO C11 support for <uchar.h>])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <uchar.h>
  		    #ifdef __STDC_UTF_16__
  		    long i = __STDC_UTF_16__;
  		    #endif
*************** AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
*** 2432,2439 ****
  		      using ::mbrtoc16;
  		      using ::mbrtoc32;
  		    }
! 		   ],
! 		   [], [ac_c11_uchar_cxx11=yes], [ac_c11_uchar_cxx11=no])
      AC_MSG_RESULT($ac_c11_uchar_cxx11)
    else
      ac_c11_uchar_cxx11=no
--- 2423,2430 ----
  		      using ::mbrtoc16;
  		      using ::mbrtoc32;
  		    }
! 		   ]],
! 		   [[]])], [ac_c11_uchar_cxx11=yes], [ac_c11_uchar_cxx11=no])
      AC_MSG_RESULT($ac_c11_uchar_cxx11)
    else
      ac_c11_uchar_cxx11=no
*************** AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
*** 2447,2461 ****
    CXXFLAGS="$CXXFLAGS -fchar8_t"
    if test x"$ac_has_uchar_h" = x"yes"; then
      AC_MSG_CHECKING([for c8rtomb and mbrtoc8 in <uchar.h> with -fchar8_t])
!     AC_TRY_COMPILE([#include <uchar.h>
  		    namespace test
  		    {
  		      using ::c8rtomb;
  		      using ::mbrtoc8;
  		    }
! 		   ],
! 		   [], [ac_uchar_c8rtomb_mbrtoc8_fchar8_t=yes],
! 		       [ac_uchar_c8rtomb_mbrtoc8_fchar8_t=no])
      AC_MSG_RESULT($ac_uchar_c8rtomb_mbrtoc8_fchar8_t)
    else
      ac_uchar_c8rtomb_mbrtoc8_fchar8_t=no
--- 2438,2452 ----
    CXXFLAGS="$CXXFLAGS -fchar8_t"
    if test x"$ac_has_uchar_h" = x"yes"; then
      AC_MSG_CHECKING([for c8rtomb and mbrtoc8 in <uchar.h> with -fchar8_t])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <uchar.h>
  		    namespace test
  		    {
  		      using ::c8rtomb;
  		      using ::mbrtoc8;
  		    }
! 		   ]],
! 		   [[]])], [ac_uchar_c8rtomb_mbrtoc8_fchar8_t=yes],
! 		           [ac_uchar_c8rtomb_mbrtoc8_fchar8_t=no])
      AC_MSG_RESULT($ac_uchar_c8rtomb_mbrtoc8_fchar8_t)
    else
      ac_uchar_c8rtomb_mbrtoc8_fchar8_t=no
*************** AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
*** 2469,2483 ****
    CXXFLAGS="$CXXFLAGS -std=c++20"
    if test x"$ac_has_uchar_h" = x"yes"; then
      AC_MSG_CHECKING([for c8rtomb and mbrtoc8 in <uchar.h> with -std=c++20])
!     AC_TRY_COMPILE([#include <uchar.h>
  		    namespace test
  		    {
  		      using ::c8rtomb;
  		      using ::mbrtoc8;
  		    }
! 		   ],
! 		   [], [ac_uchar_c8rtomb_mbrtoc8_cxx20=yes],
! 		       [ac_uchar_c8rtomb_mbrtoc8_cxx20=no])
      AC_MSG_RESULT($ac_uchar_c8rtomb_mbrtoc8_cxx20)
    else
      ac_uchar_c8rtomb_mbrtoc8_cxx20=no
--- 2460,2474 ----
    CXXFLAGS="$CXXFLAGS -std=c++20"
    if test x"$ac_has_uchar_h" = x"yes"; then
      AC_MSG_CHECKING([for c8rtomb and mbrtoc8 in <uchar.h> with -std=c++20])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <uchar.h>
  		    namespace test
  		    {
  		      using ::c8rtomb;
  		      using ::mbrtoc8;
  		    }
! 		   ]],
! 		   [[]])], [ac_uchar_c8rtomb_mbrtoc8_cxx20=yes],
! 		           [ac_uchar_c8rtomb_mbrtoc8_cxx20=no])
      AC_MSG_RESULT($ac_uchar_c8rtomb_mbrtoc8_cxx20)
    else
      ac_uchar_c8rtomb_mbrtoc8_cxx20=no
*************** AC_DEFUN([GLIBCXX_CHECK_UCHAR_H], [
*** 2489,2495 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  
--- 2480,2486 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  
*************** dnl Check whether required C++ overloads
*** 2562,2569 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    # Use C++11 because a conforming <stdio.h> won't define gets for C++14,
    # and we don't need a declaration for C++14 anyway.
    ac_save_CXXFLAGS="$CXXFLAGS"
--- 2553,2559 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
  
!   AC_LANG_PUSH([C++])
    # Use C++11 because a conforming <stdio.h> won't define gets for C++14,
    # and we don't need a declaration for C++14 anyway.
    ac_save_CXXFLAGS="$CXXFLAGS"
*************** AC_DEFUN([GLIBCXX_CHECK_STDIO_PROTO], [
*** 2586,2592 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 2576,2582 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl types are present in <math.h>.
*** 2595,2602 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_MATH11_PROTO], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -std=c++11"
  
--- 2585,2591 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_MATH11_PROTO], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -std=c++11"
  
*************** AC_DEFUN([GLIBCXX_CHECK_MATH11_PROTO], [
*** 2732,2738 ****
    esac
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 2721,2727 ----
    esac
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
*** 2791,2797 ****
    # default to on for easier handling.
    USE_NLS=no
    AC_ARG_ENABLE(nls,
!     AC_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
      [],
      [enable_nls=yes])
  
--- 2780,2786 ----
    # default to on for easier handling.
    USE_NLS=no
    AC_ARG_ENABLE(nls,
!     AS_HELP_STRING([--enable-nls],[use Native Language Support (default)]),
      [],
      [enable_nls=yes])
  
*************** AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
*** 2844,2861 ****
      CFLAGS="-Wimplicit-function-declaration -Werror"
  
      # Use strxfrm_l if available.
!     AC_TRY_COMPILE([#define _GNU_SOURCE 1
       		    #include <string.h>
! 		    #include <locale.h>],
! 		    [char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);],
  		    AC_DEFINE(HAVE_STRXFRM_L, 1,
  		    [Define if strxfrm_l is available in <string.h>.]),)
  
      # Use strerror_l if available.
!     AC_TRY_COMPILE([#define _GNU_SOURCE 1
  		    #include <string.h>
! 		    #include <locale.h>],
! 		    [__locale_t loc; strerror_l(5, loc);],
  		    AC_DEFINE(HAVE_STRERROR_L, 1,
  		    [Define if strerror_l is available in <string.h>.]),)
  
--- 2833,2850 ----
      CFLAGS="-Wimplicit-function-declaration -Werror"
  
      # Use strxfrm_l if available.
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE 1
       		    #include <string.h>
! 		    #include <locale.h>]],
! 		    [[char s[128]; __locale_t loc; strxfrm_l(s, "C", 5, loc);]])],
  		    AC_DEFINE(HAVE_STRXFRM_L, 1,
  		    [Define if strxfrm_l is available in <string.h>.]),)
  
      # Use strerror_l if available.
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE 1
  		    #include <string.h>
! 		    #include <locale.h>]],
! 		    [[__locale_t loc; strerror_l(5, loc);]])],
  		    AC_DEFINE(HAVE_STRERROR_L, 1,
  		    [Define if strerror_l is available in <string.h>.]),)
  
*************** AC_DEFUN([GLIBCXX_ENABLE_CLOCALE], [
*** 2865,2874 ****
    # Perhaps use strerror_r if available, and strerror_l isn't.
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS="-Wimplicit-function-declaration -Werror"
!   AC_TRY_COMPILE([#define _GNU_SOURCE 1
  	     	  #include <string.h>
! 		  #include <locale.h>],
! 		  [char s[128]; strerror_r(5, s, 128);],
  		  AC_DEFINE(HAVE_STRERROR_R, 1,
  		  [Define if strerror_r is available in <string.h>.]),)
    CFLAGS="$ac_save_CFLAGS"
--- 2854,2863 ----
    # Perhaps use strerror_r if available, and strerror_l isn't.
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS="-Wimplicit-function-declaration -Werror"
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#define _GNU_SOURCE 1
  	     	  #include <string.h>
! 		  #include <locale.h>]],
! 		  [[char s[128]; strerror_r(5, s, 128);]])],
  		  AC_DEFINE(HAVE_STRERROR_R, 1,
  		  [Define if strerror_r is available in <string.h>.]),)
    CFLAGS="$ac_save_CFLAGS"
*************** dnl  _GLIBCXX_HOSTED   (always defined,
*** 3372,3378 ****
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
    AC_ARG_ENABLE([hosted-libstdcxx],
!     AC_HELP_STRING([--disable-hosted-libstdcxx],
  		   [only build freestanding C++ runtime support]),
      [enable_hosted_libstdcxx_was_given=yes],
      [case "$host" in
--- 3361,3367 ----
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
    AC_ARG_ENABLE([hosted-libstdcxx],
!     AS_HELP_STRING([--disable-hosted-libstdcxx],
  		   [only build freestanding C++ runtime support]),
      [enable_hosted_libstdcxx_was_given=yes],
      [case "$host" in
*************** AC_DEFUN([GLIBCXX_ENABLE_HOSTED], [
*** 3390,3396 ****
    # Because most configure args are --enable-libstdcxx-foo add an alias
    # of that form for --enable-hosted-libstdcxx.
    AC_ARG_ENABLE([libstdcxx-hosted],
!     AC_HELP_STRING([--disable-libstdcxx-hosted],
  		   [alias for --disable-hosted-libstdcxx]),
      [if test "$enable_hosted_libstdcxx_was_given" = yes; then
        if test "$enable_hosted_libstdcxx" != "$enableval"; then
--- 3379,3385 ----
    # Because most configure args are --enable-libstdcxx-foo add an alias
    # of that form for --enable-hosted-libstdcxx.
    AC_ARG_ENABLE([libstdcxx-hosted],
!     AS_HELP_STRING([--disable-libstdcxx-hosted],
  		   [alias for --disable-hosted-libstdcxx]),
      [if test "$enable_hosted_libstdcxx_was_given" = yes; then
        if test "$enable_hosted_libstdcxx" != "$enableval"; then
*************** dnl  _GLIBCXX_VERBOSE (always defined, e
*** 3434,3440 ****
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_VERBOSE], [
    AC_ARG_ENABLE([libstdcxx-verbose],
!     AC_HELP_STRING([--disable-libstdcxx-verbose],
  		   [disable termination messages to standard error]),,
  		   [enable_libstdcxx_verbose=yes])
    if test x"$enable_libstdcxx_verbose" = xyes; then
--- 3423,3429 ----
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_VERBOSE], [
    AC_ARG_ENABLE([libstdcxx-verbose],
!     AS_HELP_STRING([--disable-libstdcxx-verbose],
  		   [disable termination messages to standard error]),,
  		   [enable_libstdcxx_verbose=yes])
    if test x"$enable_libstdcxx_verbose" = xyes; then
*************** dnl  _GLIBCXX_USE_DECIMAL_FLOAT
*** 3481,3487 ****
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
  
!   # Fake what AC_TRY_COMPILE does, without linking as this is
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
--- 3470,3476 ----
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_DECIMAL_FLOAT], [
  
!   # Fake what AC_COMPILE_IFELSE does, without linking as this is
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
*************** dnl  ENABLE_FLOAT128
*** 3517,3526 ****
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_FLOAT128], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
!   # Fake what AC_TRY_COMPILE does, without linking as this is
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
--- 3506,3514 ----
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_FLOAT128], [
  
!   AC_LANG_PUSH([C++])
  
!   # Fake what AC_COMPILE_IFELSE does, without linking as this is
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
*************** EOF
*** 3549,3555 ****
      GLIBCXX_CONDITIONAL(ENABLE_FLOAT128, test $enable_float128 = yes)
      rm -f conftest*
  
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 3537,3543 ----
      GLIBCXX_CONDITIONAL(ENABLE_FLOAT128, test $enable_float128 = yes)
      rm -f conftest*
  
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
*** 3568,3575 ****
    # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
    AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
    AC_MSG_CHECKING([for mbstate_t])
!   AC_TRY_COMPILE([#include <wchar.h>],
!   [mbstate_t teststate;],
    have_mbstate_t=yes, have_mbstate_t=no)
    AC_MSG_RESULT($have_mbstate_t)
    if test x"$have_mbstate_t" = xyes; then
--- 3556,3563 ----
    # Test wchar.h for mbstate_t, which is needed for char_traits and fpos.
    AC_CHECK_HEADERS(wchar.h, ac_has_wchar_h=yes, ac_has_wchar_h=no)
    AC_MSG_CHECKING([for mbstate_t])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>]],
!   [[mbstate_t teststate;]])],
    have_mbstate_t=yes, have_mbstate_t=no)
    AC_MSG_RESULT($have_mbstate_t)
    if test x"$have_mbstate_t" = xyes; then
*************** AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
*** 3582,3593 ****
  
    if test x"$enable_wchar_t" = x"yes"; then
  
!     AC_LANG_SAVE
!     AC_LANG_CPLUSPLUS
  
      if test x"$ac_has_wchar_h" = xyes &&
         test x"$ac_has_wctype_h" = xyes; then
!       AC_TRY_COMPILE([#include <wchar.h>
  		      #include <stddef.h>
  		      wint_t i;
  		      long l = WEOF;
--- 3570,3580 ----
  
    if test x"$enable_wchar_t" = x"yes"; then
  
!     AC_LANG_PUSH([C++])
  
      if test x"$ac_has_wchar_h" = xyes &&
         test x"$ac_has_wctype_h" = xyes; then
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <wchar.h>
  		      #include <stddef.h>
  		      wint_t i;
  		      long l = WEOF;
*************** AC_DEFUN([GLIBCXX_ENABLE_WCHAR_T], [
*** 3648,3659 ****
  			using ::wprintf;
  			using ::wscanf;
  		      }
! 		     ],[],[], [enable_wchar_t=no])
      else
        enable_wchar_t=no
      fi
  
!     AC_LANG_RESTORE
    fi
  
    if test x"$enable_wchar_t" = x"yes"; then
--- 3635,3646 ----
  			using ::wprintf;
  			using ::wscanf;
  		      }
! 		     ]],[[]])],[], [enable_wchar_t=no])
      else
        enable_wchar_t=no
      fi
  
!     AC_LANG_POP([C++])
    fi
  
    if test x"$enable_wchar_t" = x"yes"; then
*************** AC_DEFUN([GLIBCXX_ENABLE_PCH], [
*** 3687,3694 ****
        [glibcxx_cv_prog_CXX_pch],
        [ac_save_CXXFLAGS="$CXXFLAGS"
         CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
!        AC_LANG_SAVE
!        AC_LANG_CPLUSPLUS
         echo '#include <math.h>' > conftest.h
         if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
  			  -o conftest.h.gch 1>&5 2>&1 &&
--- 3674,3680 ----
        [glibcxx_cv_prog_CXX_pch],
        [ac_save_CXXFLAGS="$CXXFLAGS"
         CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
!        AC_LANG_PUSH([C++])
         echo '#include <math.h>' > conftest.h
         if $CXX $CXXFLAGS $CPPFLAGS -x c++-header conftest.h \
  			  -o conftest.h.gch 1>&5 2>&1 &&
*************** AC_DEFUN([GLIBCXX_ENABLE_PCH], [
*** 3702,3708 ****
         fi
         rm -f conftest*
         CXXFLAGS=$ac_save_CXXFLAGS
!        AC_LANG_RESTORE
        ])
      enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
    fi
--- 3688,3694 ----
         fi
         rm -f conftest*
         CXXFLAGS=$ac_save_CXXFLAGS
!        AC_LANG_POP([C++])
        ])
      enable_libstdcxx_pch=$glibcxx_cv_prog_CXX_pch
    fi
*************** dnl Note:
*** 3740,3747 ****
  dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    old_CXXFLAGS="$CXXFLAGS"
  
    # Do link tests if possible, otherwise asm tests. Limited to some platforms
--- 3726,3732 ----
  dnl libgomp and libgfortran use a link test, see CHECK_SYNC_FETCH_AND_ADD.
  dnl
  AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [
!   AC_LANG_PUSH([C++])
    old_CXXFLAGS="$CXXFLAGS"
  
    # Do link tests if possible, otherwise asm tests. Limited to some platforms
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3774,3782 ****
  
      AC_CACHE_CHECK([for atomic builtins for _Atomic_word],
  	glibcxx_cv_atomic_word,
! 	[AC_TRY_LINK([#include "atomic_word.h"],
! 		     [_Atomic_word a = 0, b;
! 		      b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);],
  		     [glibcxx_cv_atomic_word=yes],
  		     [glibcxx_cv_atomic_word=no])])
  
--- 3759,3767 ----
  
      AC_CACHE_CHECK([for atomic builtins for _Atomic_word],
  	glibcxx_cv_atomic_word,
! 	[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include "atomic_word.h"]],
! 		     [[_Atomic_word a = 0, b;
! 		      b = __atomic_fetch_add(&a, 1, __ATOMIC_ACQ_REL);]])],
  		     [glibcxx_cv_atomic_word=yes],
  		     [glibcxx_cv_atomic_word=no])])
  
*************** AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS
*** 3786,3792 ****
      # Compile unoptimized.
      CXXFLAGS='-O0 -S'
  
!     # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
  [#]line __oline__ "configure"
--- 3771,3777 ----
      # Compile unoptimized.
      CXXFLAGS='-O0 -S'
  
!     # Fake what AC_COMPILE_IFELSE does.
  
      cat > conftest.$ac_ext << EOF
  [#]line __oline__ "configure"
*************** EOF
*** 3813,3819 ****
    rm -f ./atomic_word.h
  
    CXXFLAGS="$old_CXXFLAGS"
!   AC_LANG_RESTORE
  
    # Set atomicity_dir to builtins if the test above passes,
    # or if the builtins were already chosen (e.g. by configure.host).
--- 3798,3804 ----
    rm -f ./atomic_word.h
  
    CXXFLAGS="$old_CXXFLAGS"
!   AC_LANG_POP([C++])
  
    # Set atomicity_dir to builtins if the test above passes,
    # or if the builtins were already chosen (e.g. by configure.host).
*************** dnl
*** 3866,3872 ****
  AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
  
    AC_ARG_WITH([libstdcxx-lock-policy],
!     AC_HELP_STRING([--with-libstdcxx-lock-policy={atomic,mutex,auto}],
        [synchronization policy for shared_ptr reference counting [default=auto]]),
                [libstdcxx_atomic_lock_policy=$withval],
                [libstdcxx_atomic_lock_policy=auto])
--- 3851,3857 ----
  AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
  
    AC_ARG_WITH([libstdcxx-lock-policy],
!     AS_HELP_STRING([--with-libstdcxx-lock-policy={atomic,mutex,auto}],
        [synchronization policy for shared_ptr reference counting [default=auto]]),
                [libstdcxx_atomic_lock_policy=$withval],
                [libstdcxx_atomic_lock_policy=auto])
*************** AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
*** 3878,3891 ****
    AC_MSG_CHECKING([for lock policy for shared_ptr reference counts])
  
    if test x"$libstdcxx_atomic_lock_policy" = x"auto"; then
!     AC_LANG_SAVE
!     AC_LANG_CPLUSPLUS
      ac_save_CXXFLAGS="$CXXFLAGS"
  
      dnl Why do we care about 2-byte CAS on targets with 4-byte _Atomic_word?!
      dnl Why don't we check 8-byte CAS for sparc64, where _Atomic_word is long?!
      dnl New targets should only check for CAS for the _Atomic_word type.
!     AC_TRY_COMPILE([
      #if defined __AMDGCN__ || defined __nvptx__
      /* Yes, please.  */
      #elif defined __riscv
--- 3863,3875 ----
    AC_MSG_CHECKING([for lock policy for shared_ptr reference counts])
  
    if test x"$libstdcxx_atomic_lock_policy" = x"auto"; then
!     AC_LANG_PUSH([C++])
      ac_save_CXXFLAGS="$CXXFLAGS"
  
      dnl Why do we care about 2-byte CAS on targets with 4-byte _Atomic_word?!
      dnl Why don't we check 8-byte CAS for sparc64, where _Atomic_word is long?!
      dnl New targets should only check for CAS for the _Atomic_word type.
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
      #if defined __AMDGCN__ || defined __nvptx__
      /* Yes, please.  */
      #elif defined __riscv
*************** AC_DEFUN([GLIBCXX_ENABLE_LOCK_POLICY], [
*** 3895,3904 ****
      #elif ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
      # error "No 4-byte compare-and-swap"
      #endif
!     ],,
      [libstdcxx_atomic_lock_policy=atomic],
      [libstdcxx_atomic_lock_policy=mutex])
!     AC_LANG_RESTORE
      CXXFLAGS="$ac_save_CXXFLAGS"
    fi
  
--- 3879,3888 ----
      #elif ! defined __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4
      # error "No 4-byte compare-and-swap"
      #endif
!     ]],[])],
      [libstdcxx_atomic_lock_policy=atomic],
      [libstdcxx_atomic_lock_policy=mutex])
!     AC_LANG_POP([C++])
      CXXFLAGS="$ac_save_CXXFLAGS"
    fi
  
*************** if test x$enable_libstdcxx_visibility =
*** 3930,3938 ****
  		 glibcxx_cv_have_attribute_visibility, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_TRY_COMPILE([void __attribute__((visibility("hidden"))) foo(void) { }],
! 		 [], glibcxx_cv_have_attribute_visibility=yes,
! 		 glibcxx_cv_have_attribute_visibility=no)
    CFLAGS="$save_CFLAGS"])
    if test $glibcxx_cv_have_attribute_visibility = no; then
      enable_libstdcxx_visibility=no
--- 3914,3923 ----
  		 glibcxx_cv_have_attribute_visibility, [
    save_CFLAGS="$CFLAGS"
    CFLAGS="$CFLAGS -Werror"
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[void __attribute__((visibility("hidden"))) foo(void) { }]],
! 		 [[]])],
! 		 [glibcxx_cv_have_attribute_visibility=yes],
! 		 [glibcxx_cv_have_attribute_visibility=no])
    CFLAGS="$save_CFLAGS"])
    if test $glibcxx_cv_have_attribute_visibility = no; then
      enable_libstdcxx_visibility=no
*************** if test $enable_symvers = gnu ||
*** 4041,4047 ****
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes, glibcxx_shared_libgcc=no)
    CFLAGS="$ac_save_CFLAGS"
    if test $glibcxx_shared_libgcc = no; then
      cat > conftest.c <<EOF
--- 4026,4036 ----
    AC_MSG_CHECKING([for shared libgcc])
    ac_save_CFLAGS="$CFLAGS"
    CFLAGS=' -lgcc_s'
!   AC_LINK_IFELSE([AC_LANG_PROGRAM(
!     [[]],
!     [[return 0;]])],
!     [glibcxx_shared_libgcc=yes],
!     [glibcxx_shared_libgcc=no])
    CFLAGS="$ac_save_CFLAGS"
    if test $glibcxx_shared_libgcc = no; then
      cat > conftest.c <<EOF
*************** changequote([,])dnl
*** 4056,4062 ****
      rm -f conftest.c conftest.so
      if test x${glibcxx_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
!       AC_TRY_LINK(, [return 0;], glibcxx_shared_libgcc=yes)
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
--- 4045,4051 ----
      rm -f conftest.c conftest.so
      if test x${glibcxx_libgcc_s_suffix+set} = xset; then
        CFLAGS=" -lgcc_s$glibcxx_libgcc_s_suffix"
!       AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[return 0;]])], [glibcxx_shared_libgcc=yes])
        CFLAGS="$ac_save_CFLAGS"
      fi
    fi
*************** fi
*** 4135,4143 ****
  
  AC_CACHE_CHECK([whether the target supports .symver directive],
  	       glibcxx_cv_have_as_symver_directive, [
!   AC_TRY_COMPILE([void foo (void); __asm (".symver foo, bar@SYMVER");],
! 		 [], glibcxx_cv_have_as_symver_directive=yes,
! 		 glibcxx_cv_have_as_symver_directive=no)])
  if test $glibcxx_cv_have_as_symver_directive = yes; then
    AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
      [Define to 1 if the target assembler supports .symver directive.])
--- 4124,4134 ----
  
  AC_CACHE_CHECK([whether the target supports .symver directive],
  	       glibcxx_cv_have_as_symver_directive, [
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
! 		    [[void foo (void); __asm (".symver foo, bar@SYMVER");]],
! 		    [[]])],
! 		    [glibcxx_cv_have_as_symver_directive=yes],
! 		    [glibcxx_cv_have_as_symver_directive=no])])
  if test $glibcxx_cv_have_as_symver_directive = yes; then
    AC_DEFINE(HAVE_AS_SYMVER_DIRECTIVE, 1,
      [Define to 1 if the target assembler supports .symver directive.])
*************** fi
*** 4173,4179 ****
  AC_MSG_CHECKING([for size_t as unsigned int])
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS="-Werror"
! AC_TRY_COMPILE(, [__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;],
  		 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
  CFLAGS=$ac_save_CFLAGS
  if test "$glibcxx_size_t_is_i" = yes; then
--- 4164,4170 ----
  AC_MSG_CHECKING([for size_t as unsigned int])
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS="-Werror"
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[__SIZE_TYPE__* stp; unsigned int* uip; stp = uip;]])],
  		 [glibcxx_size_t_is_i=yes], [glibcxx_size_t_is_i=no])
  CFLAGS=$ac_save_CFLAGS
  if test "$glibcxx_size_t_is_i" = yes; then
*************** AC_MSG_RESULT([$glibcxx_size_t_is_i])
*** 4184,4190 ****
  AC_MSG_CHECKING([for ptrdiff_t as int])
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS="-Werror"
! AC_TRY_COMPILE(, [__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;],
  		 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
  CFLAGS=$ac_save_CFLAGS
  if test "$glibcxx_ptrdiff_t_is_i" = yes; then
--- 4175,4181 ----
  AC_MSG_CHECKING([for ptrdiff_t as int])
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS="-Werror"
! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[__PTRDIFF_TYPE__* ptp; int* ip; ptp = ip;]])],
  		 [glibcxx_ptrdiff_t_is_i=yes], [glibcxx_ptrdiff_t_is_i=no])
  CFLAGS=$ac_save_CFLAGS
  if test "$glibcxx_ptrdiff_t_is_i" = yes; then
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4229,4236 ****
    if test x$enable_libstdcxx_threads = xauto ||
       test x$enable_libstdcxx_threads = xyes; then
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions \
--- 4220,4226 ----
    if test x$enable_libstdcxx_threads = xauto ||
       test x$enable_libstdcxx_threads = xyes; then
  
!   AC_LANG_PUSH([C++])
  
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions \
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4252,4259 ****
  
    AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
  
!   AC_TRY_COMPILE([#include <unistd.h>],
!     [
        // In case of POSIX threads check _POSIX_TIMEOUTS.
        #if (defined(_PTHREADS) \
  	  && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
--- 4242,4249 ----
  
    AC_MSG_CHECKING([whether it can be safely assumed that mutex_timedlock is available])
  
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <unistd.h>]],
!     [[
        // In case of POSIX threads check _POSIX_TIMEOUTS.
        #if (defined(_PTHREADS) \
  	  && (!defined(_POSIX_TIMEOUTS) || _POSIX_TIMEOUTS <= 0))
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4262,4268 ****
        #elif defined(_WIN32_THREADS)
        #error
        #endif
!     ], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
  
    AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
  		     [Define to 1 if mutex_timedlock is available.])
--- 4252,4258 ----
        #elif defined(_WIN32_THREADS)
        #error
        #endif
!     ]])], [ac_gthread_use_mutex_timedlock=1], [ac_gthread_use_mutex_timedlock=0])
  
    AC_DEFINE_UNQUOTED(_GTHREAD_USE_MUTEX_TIMEDLOCK, $ac_gthread_use_mutex_timedlock,
  		     [Define to 1 if mutex_timedlock is available.])
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4273,4284 ****
  
    AC_MSG_CHECKING([for gthreads library])
  
!   AC_TRY_COMPILE([#include "gthr.h"],
!     [
        #ifndef __GTHREADS_CXX0X
        #error
        #endif
!     ], [ac_has_gthreads=yes], [ac_has_gthreads=no])
    else
      ac_has_gthreads=no
    fi
--- 4263,4274 ----
  
    AC_MSG_CHECKING([for gthreads library])
  
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "gthr.h"]],
!     [[
        #ifndef __GTHREADS_CXX0X
        #error
        #endif
!     ]])], [ac_has_gthreads=yes], [ac_has_gthreads=no])
    else
      ac_has_gthreads=no
    fi
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4294,4305 ****
      # On VxWorks for example, pthread_rwlock_t is defined in sys/types.h
      # but the pthread library is not there by default and the gthread library
      # does not use it.
!     AC_TRY_COMPILE([#include "gthr.h"],
!     [
        #if (!defined(_PTHREADS))
        #error
        #endif
!     ], [ac_gthread_use_pthreads=yes], [ac_gthread_use_pthreads=no])
      if test x"$ac_gthread_use_pthreads" = x"yes"; then
        AC_CHECK_TYPE([pthread_rwlock_t],
               [AC_DEFINE([_GLIBCXX_USE_PTHREAD_RWLOCK_T], 1,
--- 4284,4295 ----
      # On VxWorks for example, pthread_rwlock_t is defined in sys/types.h
      # but the pthread library is not there by default and the gthread library
      # does not use it.
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "gthr.h"]],
!     [[
        #if (!defined(_PTHREADS))
        #error
        #endif
!     ]])], [ac_gthread_use_pthreads=yes], [ac_gthread_use_pthreads=no])
      if test x"$ac_gthread_use_pthreads" = x"yes"; then
        AC_CHECK_TYPE([pthread_rwlock_t],
               [AC_DEFINE([_GLIBCXX_USE_PTHREAD_RWLOCK_T], 1,
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4315,4321 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  
--- 4305,4311 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  
*************** AC_DEFUN([GLIBCXX_CHECK_GTHREADS], [
*** 4329,4336 ****
  AC_DEFUN([AC_LC_MESSAGES], [
    AC_CHECK_HEADER(locale.h, [
      AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
!       [AC_TRY_COMPILE([#include <locale.h>], [return LC_MESSAGES],
!        ac_cv_val_LC_MESSAGES=yes, ac_cv_val_LC_MESSAGES=no)])
      if test $ac_cv_val_LC_MESSAGES = yes; then
        AC_DEFINE(HAVE_LC_MESSAGES, 1,
  		[Define if LC_MESSAGES is available in <locale.h>.])
--- 4319,4327 ----
  AC_DEFUN([AC_LC_MESSAGES], [
    AC_CHECK_HEADER(locale.h, [
      AC_CACHE_CHECK([for LC_MESSAGES], ac_cv_val_LC_MESSAGES,
!       [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
!       [[#include <locale.h>]], [[return LC_MESSAGES]])],
!        [ac_cv_val_LC_MESSAGES=yes], [ac_cv_val_LC_MESSAGES=no])])
      if test $ac_cv_val_LC_MESSAGES = yes; then
        AC_DEFINE(HAVE_LC_MESSAGES, 1,
  		[Define if LC_MESSAGES is available in <locale.h>.])
*************** AC_DEFUN([GLIBCXX_CHECK_X86_RDRAND], [
*** 4347,4353 ****
    case "$target" in
      i?86-*-* | \
      x86_64-*-*)
!     AC_TRY_COMPILE(, [asm("rdrand %eax");],
  		[ac_cv_x86_rdrand=yes], [ac_cv_x86_rdrand=no])
    esac
    ])
--- 4338,4344 ----
    case "$target" in
      i?86-*-* | \
      x86_64-*-*)
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm("rdrand %eax");]])],
  		[ac_cv_x86_rdrand=yes], [ac_cv_x86_rdrand=no])
    esac
    ])
*************** AC_DEFUN([GLIBCXX_CHECK_X86_RDSEED], [
*** 4366,4372 ****
    case "$target" in
      i?86-*-* | \
      x86_64-*-*)
!     AC_TRY_COMPILE(, [asm("rdseed %eax");],
  		[ac_cv_x86_rdseed=yes], [ac_cv_x86_rdseed=no])
    esac
    ])
--- 4357,4363 ----
    case "$target" in
      i?86-*-* | \
      x86_64-*-*)
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[asm("rdseed %eax");]])],
  		[ac_cv_x86_rdseed=yes], [ac_cv_x86_rdseed=no])
    esac
    ])
*************** dnl Check whether get_nprocs is availabl
*** 4381,4388 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 4372,4378 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [
*** 4399,4405 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4389,4395 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Check whether sysconf(_SC_NPROCESSOR
*** 4407,4414 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 4397,4403 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_ONLN], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_SC_NPROCESSORS_O
*** 4425,4431 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4414,4420 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Check whether sysconf(_SC_NPROC_ONLN
*** 4433,4440 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 4422,4428 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_SC_NPROC_ONLN],
*** 4451,4457 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4439,4445 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Check whether pthread_num_processors
*** 4459,4466 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 4447,4453 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_PTHREADS_NUM_PRO
*** 4477,4483 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4464,4470 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl and define _GLIBCXX_USE_PTHREAD_COND
*** 4486,4493 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
--- 4473,4479 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
*************** AC_DEFUN([GLIBCXX_CHECK_PTHREAD_COND_CLO
*** 4507,4513 ****
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4493,4499 ----
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl and define _GLIBCXX_USE_PTHREAD_MUTE
*** 4516,4523 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREAD_MUTEX_CLOCKLOCK], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
--- 4502,4508 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREAD_MUTEX_CLOCKLOCK], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
*************** AC_DEFUN([GLIBCXX_CHECK_PTHREAD_MUTEX_CL
*** 4537,4543 ****
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4522,4528 ----
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl and define _GLIBCXX_USE_PTHREAD_MUTE
*** 4546,4553 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREAD_RWLOCK_CLOCKLOCK], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
--- 4531,4537 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_PTHREAD_RWLOCK_CLOCKLOCK], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
    ac_save_LIBS="$LIBS"
*************** AC_DEFUN([GLIBCXX_CHECK_PTHREAD_RWLOCK_C
*** 4569,4575 ****
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4553,4559 ----
  
    CXXFLAGS="$ac_save_CXXFLAGS"
    LIBS="$ac_save_LIBS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Check whether sysctl is available in
*** 4577,4584 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
--- 4561,4567 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU], [
  
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  
*************** AC_DEFUN([GLIBCXX_CHECK_SYSCTL_HW_NCPU],
*** 4603,4609 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4586,4592 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl and define _GLIBCXX_USE_TMPNAM.
*** 4643,4650 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_TMPNAM], [dnl
  dnl
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  dnl
--- 4626,4632 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_TMPNAM], [dnl
  dnl
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  dnl
*************** dnl
*** 4660,4666 ****
    fi
  dnl
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 4642,4648 ----
    fi
  dnl
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_CHECK_SDT_H], [
*** 4671,4678 ****
    # Note that this test has to be run with the C language.
    # Otherwise, sdt.h will try to include some headers from
    # libstdc++ itself.
!   AC_LANG_SAVE
!   AC_LANG_C
    AC_CACHE_CHECK([for suitable sys/sdt.h],
      glibcxx_cv_sys_sdt_h, [
      # Because we have to run the test in C, we use grep rather
--- 4653,4659 ----
    # Note that this test has to be run with the C language.
    # Otherwise, sdt.h will try to include some headers from
    # libstdc++ itself.
!   AC_LANG_PUSH([C])
    AC_CACHE_CHECK([for suitable sys/sdt.h],
      glibcxx_cv_sys_sdt_h, [
      # Because we have to run the test in C, we use grep rather
*************** AC_DEFUN([GLIBCXX_CHECK_SDT_H], [
*** 4685,4691 ****
        int f() { STAP_PROBE(hi, bob); }
      ], [glibcxx_cv_sys_sdt_h=yes], [glibcxx_cv_sys_sdt_h=no])
    ])
!   AC_LANG_RESTORE
    if test $glibcxx_cv_sys_sdt_h = yes; then
      AC_DEFINE(HAVE_SYS_SDT_H, 1,
                [Define to 1 if you have a suitable <sys/sdt.h> header file])
--- 4666,4672 ----
        int f() { STAP_PROBE(hi, bob); }
      ], [glibcxx_cv_sys_sdt_h=yes], [glibcxx_cv_sys_sdt_h=no])
    ])
!   AC_LANG_POP([C])
    if test $glibcxx_cv_sys_sdt_h = yes; then
      AC_DEFINE(HAVE_SYS_SDT_H, 1,
                [Define to 1 if you have a suitable <sys/sdt.h> header file])
*************** dnl  HAVE_SYMLINK
*** 4808,4815 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl
  dnl
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  dnl
--- 4789,4795 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_FILESYSTEM_DEPS], [dnl
  dnl
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -fno-exceptions"
  dnl
*************** dnl
*** 5147,5153 ****
    fi
  dnl
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5127,5133 ----
    fi
  dnl
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Check how size_t is mangled.  Copied
*** 5155,5180 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SIZE_T_MANGLING], [
    AC_CACHE_CHECK([how size_t is mangled],
!                  glibcxx_cv_size_t_mangling, [
!     AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned long x;],
!                    [glibcxx_cv_size_t_mangling=m], [
!       AC_TRY_COMPILE([], [extern __SIZE_TYPE__ x; extern unsigned int x;],
!                      [glibcxx_cv_size_t_mangling=j], [
!         AC_TRY_COMPILE([],
!                        [extern __SIZE_TYPE__ x; extern unsigned long long x;],
!                        [glibcxx_cv_size_t_mangling=y], [
!           AC_TRY_COMPILE([],
!                          [extern __SIZE_TYPE__ x; extern unsigned short x;],
!                          [glibcxx_cv_size_t_mangling=t], [
!             AC_TRY_COMPILE([],
!                            [extern __SIZE_TYPE__ x; extern __int20 unsigned x;],
                             [glibcxx_cv_size_t_mangling=u6uint20],
                             [glibcxx_cv_size_t_mangling=x])
!           ])
!         ])
!       ])
!     ])
!   ])
    if test $glibcxx_cv_size_t_mangling = x; then
      AC_MSG_ERROR([Unknown underlying type for size_t])
    fi
--- 5135,5162 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_SIZE_T_MANGLING], [
    AC_CACHE_CHECK([how size_t is mangled],
!                  glibcxx_cv_size_t_mangling,
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
!     		   [[extern __SIZE_TYPE__ x; extern unsigned long x;]])],
!                    [glibcxx_cv_size_t_mangling=m],
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
!       		     [[extern __SIZE_TYPE__ x; extern unsigned int x;]])],
!                      [glibcxx_cv_size_t_mangling=j],
!         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
!                        [[extern __SIZE_TYPE__ x; extern unsigned long long x;]])],
!                        [glibcxx_cv_size_t_mangling=y],
!           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
!                          [[extern __SIZE_TYPE__ x; extern unsigned short x;]])],
!                          [glibcxx_cv_size_t_mangling=t],
!             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
!                            [[extern __SIZE_TYPE__ x; extern __int20 unsigned x;]])],
                             [glibcxx_cv_size_t_mangling=u6uint20],
                             [glibcxx_cv_size_t_mangling=x])
!           )
!         )
!       )
!     )
!   )
    if test $glibcxx_cv_size_t_mangling = x; then
      AC_MSG_ERROR([Unknown underlying type for size_t])
    fi
*************** AC_DEFUN([GLIBCXX_CHECK_EXCEPTION_PTR_SY
*** 5200,5210 ****
        *)
          # If the value of this macro changes then we will need to hardcode
          # yes/no here for additional targets based on the original value.
!         AC_TRY_COMPILE([], [
            #if __GCC_ATOMIC_INT_LOCK_FREE <= 1
            # error atomic int not always lock free
            #endif
!           ],
            [ac_exception_ptr_since_gcc46=yes],
            [ac_exception_ptr_since_gcc46=no])
          ;;
--- 5182,5192 ----
        *)
          # If the value of this macro changes then we will need to hardcode
          # yes/no here for additional targets based on the original value.
!         AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
            #if __GCC_ATOMIC_INT_LOCK_FREE <= 1
            # error atomic int not always lock free
            #endif
!           ]])],
            [ac_exception_ptr_since_gcc46=yes],
            [ac_exception_ptr_since_gcc46=no])
          ;;
*************** dnl Check whether getentropy is present
*** 5224,5231 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_GETENTROPY], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    AC_CACHE_CHECK([for getentropy], glibcxx_cv_getentropy, [
        GCC_TRY_COMPILE_OR_LINK(
  	[#include <unistd.h>],
--- 5206,5212 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_GETENTROPY], [
  
!   AC_LANG_PUSH([C++])
    AC_CACHE_CHECK([for getentropy], glibcxx_cv_getentropy, [
        GCC_TRY_COMPILE_OR_LINK(
  	[#include <unistd.h>],
*************** AC_DEFUN([GLIBCXX_CHECK_GETENTROPY], [
*** 5237,5243 ****
    if test $glibcxx_cv_getentropy = yes; then
      AC_DEFINE(HAVE_GETENTROPY, 1, [Define if getentropy is available in <unistd.h>.])
    fi
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5218,5224 ----
    if test $glibcxx_cv_getentropy = yes; then
      AC_DEFINE(HAVE_GETENTROPY, 1, [Define if getentropy is available in <unistd.h>.])
    fi
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Check whether arc4random is present
*** 5245,5252 ****
  dnl
  AC_DEFUN([GLIBCXX_CHECK_ARC4RANDOM], [
  
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    AC_CACHE_CHECK([for arc4random], glibcxx_cv_arc4random, [
        GCC_TRY_COMPILE_OR_LINK(
  	[#include <stdlib.h>],
--- 5226,5232 ----
  dnl
  AC_DEFUN([GLIBCXX_CHECK_ARC4RANDOM], [
  
!   AC_LANG_PUSH([C++])
    AC_CACHE_CHECK([for arc4random], glibcxx_cv_arc4random, [
        GCC_TRY_COMPILE_OR_LINK(
  	[#include <stdlib.h>],
*************** AC_DEFUN([GLIBCXX_CHECK_ARC4RANDOM], [
*** 5257,5263 ****
    if test $glibcxx_cv_arc4random = yes; then
      AC_DEFINE(HAVE_ARC4RANDOM, 1, [Define if arc4random is available in <stdlib.h>.])
    fi
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5237,5243 ----
    if test $glibcxx_cv_arc4random = yes; then
      AC_DEFINE(HAVE_ARC4RANDOM, 1, [Define if arc4random is available in <stdlib.h>.])
    fi
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** AC_DEFUN([GLIBCXX_ENABLE_BACKTRACE], [
*** 5274,5280 ****
  
    BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
  
!   AC_LANG_CPLUSPLUS
    old_CXXFLAGS="$CXXFLAGS"
  
    # libbacktrace's own configure.ac only tests atomics for int,
--- 5254,5260 ----
  
    BACKTRACE_CPPFLAGS="-D_GNU_SOURCE"
  
!   AC_LANG_PUSH([C++])
    old_CXXFLAGS="$CXXFLAGS"
  
    # libbacktrace's own configure.ac only tests atomics for int,
*************** AC_DEFUN([GLIBCXX_ENABLE_BACKTRACE], [
*** 5285,5291 ****
  
      AC_CACHE_CHECK([for atomic builtins for libbacktrace],
  	glibcxx_cv_libbacktrace_atomics,
! 	[AC_TRY_LINK([], [
  	    int i = 0;
  	    int* p = &i;
  	    __SIZE_TYPE__ s = 0;
--- 5265,5271 ----
  
      AC_CACHE_CHECK([for atomic builtins for libbacktrace],
  	glibcxx_cv_libbacktrace_atomics,
! 	[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[
  	    int i = 0;
  	    int* p = &i;
  	    __SIZE_TYPE__ s = 0;
*************** AC_DEFUN([GLIBCXX_ENABLE_BACKTRACE], [
*** 5299,5305 ****
  	    __atomic_store_n(&s, s, __ATOMIC_RELEASE);
  	    // backtrace_atomic_store_int
  	    __atomic_store_n(&i, i, __ATOMIC_RELEASE);
! 			 ],
  		     [glibcxx_cv_libbacktrace_atomics=yes],
  		     [glibcxx_cv_libbacktrace_atomics=no])])
  
--- 5279,5285 ----
  	    __atomic_store_n(&s, s, __ATOMIC_RELEASE);
  	    // backtrace_atomic_store_int
  	    __atomic_store_n(&i, i, __ATOMIC_RELEASE);
! 			 ]])],
  		     [glibcxx_cv_libbacktrace_atomics=yes],
  		     [glibcxx_cv_libbacktrace_atomics=no])])
  
*************** EOF
*** 5342,5348 ****
    fi
  
    CXXFLAGS="$old_CXXFLAGS"
!   AC_LANG_RESTORE
  
    if test "$glibcxx_cv_libbacktrace_atomics" = yes; then
      BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_ATOMIC_FUNCTIONS=1"
--- 5322,5328 ----
    fi
  
    CXXFLAGS="$old_CXXFLAGS"
!   AC_LANG_POP([C++])
  
    if test "$glibcxx_cv_libbacktrace_atomics" = yes; then
      BACKTRACE_CPPFLAGS="$BACKTRACE_CPPFLAGS -DHAVE_ATOMIC_FUNCTIONS=1"
*************** AC_DEFUN([GLIBCXX_EMERGENCY_EH_ALLOC], [
*** 5526,5532 ****
    eh_pool_static=
    eh_pool_nobjs=
    AC_ARG_ENABLE([libstdcxx-static-eh-pool],
!     AC_HELP_STRING([--enable-libstdcxx-static-eh-pool],
  		   [use a fixed-size static buffer for allocating exceptions if malloc fails]),
      [if test "${enableval}" = yes; then
        eh_pool_static="-D_GLIBCXX_EH_POOL_STATIC"
--- 5506,5512 ----
    eh_pool_static=
    eh_pool_nobjs=
    AC_ARG_ENABLE([libstdcxx-static-eh-pool],
!     AS_HELP_STRING([--enable-libstdcxx-static-eh-pool],
  		   [use a fixed-size static buffer for allocating exceptions if malloc fails]),
      [if test "${enableval}" = yes; then
        eh_pool_static="-D_GLIBCXX_EH_POOL_STATIC"
*************** AC_DEFUN([GLIBCXX_EMERGENCY_EH_ALLOC], [
*** 5534,5540 ****
      fi],)
  
    AC_ARG_WITH([libstdcxx-eh-pool-obj-count],
!     AC_HELP_STRING([--with-libstdcxx-eh-pool-obj-count],
  		   [the number of exceptions that can be allocated from the pool if malloc fails]),
      [if test "${withval}" -ge 0 2>/dev/null; then
        eh_pool_obj_count="-D_GLIBCXX_EH_POOL_NOBJS=${withval}"
--- 5514,5520 ----
      fi],)
  
    AC_ARG_WITH([libstdcxx-eh-pool-obj-count],
!     AS_HELP_STRING([--with-libstdcxx-eh-pool-obj-count],
  		   [the number of exceptions that can be allocated from the pool if malloc fails]),
      [if test "${withval}" -ge 0 2>/dev/null; then
        eh_pool_obj_count="-D_GLIBCXX_EH_POOL_NOBJS=${withval}"
*************** dnl    static copy of the tzdata.zi file
*** 5565,5571 ****
  dnl
  AC_DEFUN([GLIBCXX_ZONEINFO_DIR], [
    AC_ARG_WITH([libstdcxx-zoneinfo],
!     AC_HELP_STRING([--with-libstdcxx-zoneinfo],
  		   [the location to use for tzdata]),
      [],[with_libstdcxx_zoneinfo=yes])
  
--- 5545,5551 ----
  dnl
  AC_DEFUN([GLIBCXX_ZONEINFO_DIR], [
    AC_ARG_WITH([libstdcxx-zoneinfo],
!     AS_HELP_STRING([--with-libstdcxx-zoneinfo],
  		   [the location to use for tzdata]),
      [],[with_libstdcxx_zoneinfo=yes])
  
*************** dnl Defines:
*** 5650,5658 ****
  dnl  _GLIBCXX_USE_STRUCT_TM_TM_ZONE if struct tm has a tm_zone member.
  dnl
  AC_DEFUN([GLIBCXX_STRUCT_TM_TM_ZONE], [
! 
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -std=c++20"
  
--- 5630,5636 ----
  dnl  _GLIBCXX_USE_STRUCT_TM_TM_ZONE if struct tm has a tm_zone member.
  dnl
  AC_DEFUN([GLIBCXX_STRUCT_TM_TM_ZONE], [
!   AC_LANG_PUSH([C++])
    ac_save_CXXFLAGS="$CXXFLAGS"
    CXXFLAGS="$CXXFLAGS -std=c++20"
  
*************** AC_DEFUN([GLIBCXX_STRUCT_TM_TM_ZONE], [
*** 5672,5678 ****
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5650,5656 ----
    fi
  
    CXXFLAGS="$ac_save_CXXFLAGS"
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl  _GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SI
*** 5683,5695 ****
  dnl    duration can be aligned to std::hardware_destructive_interference_size.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_ALIGNAS_CACHELINE], [
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    AC_MSG_CHECKING([whether static objects can be aligned to the cacheline size])
!   AC_TRY_COMPILE(, [struct alignas(__GCC_DESTRUCTIVE_SIZE) Aligned { };
  		    alignas(Aligned) static char buf[sizeof(Aligned) * 16];
! 		 ], [ac_alignas_cacheline=yes], [ac_alignas_cacheline=no])
    if test "$ac_alignas_cacheline" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SIZE, 1,
        [Define if global objects can be aligned to
--- 5661,5673 ----
  dnl    duration can be aligned to std::hardware_destructive_interference_size.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_ALIGNAS_CACHELINE], [
!   AC_LANG_PUSH([C++])
  
    AC_MSG_CHECKING([whether static objects can be aligned to the cacheline size])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],
! 		[[struct alignas(__GCC_DESTRUCTIVE_SIZE) Aligned { };
  		    alignas(Aligned) static char buf[sizeof(Aligned) * 16];
! 		 ]])], [ac_alignas_cacheline=yes], [ac_alignas_cacheline=no])
    if test "$ac_alignas_cacheline" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SIZE, 1,
        [Define if global objects can be aligned to
*************** AC_DEFUN([GLIBCXX_CHECK_ALIGNAS_CACHELIN
*** 5697,5703 ****
    fi
    AC_MSG_RESULT($ac_alignas_cacheline)
  
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5675,5681 ----
    fi
    AC_MSG_RESULT($ac_alignas_cacheline)
  
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl  _GLIBCXX_USE_INIT_PRIORITY_ATTRIBUT
*** 5709,5730 ****
  dnl    attribute for the target.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_INIT_PRIORITY], [
! AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    AC_MSG_CHECKING([whether init_priority attribute is supported])
!   AC_TRY_COMPILE(, [
    #if ! __has_attribute(init_priority)
    #error init_priority not supported
    #endif
! 		 ], [ac_init_priority=yes], [ac_init_priority=no])
    if test "$ac_init_priority" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE, 1,
        [Define if init_priority should be used for iostream initialization.])
    fi
    AC_MSG_RESULT($ac_init_priority)
  
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5687,5707 ----
  dnl    attribute for the target.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_INIT_PRIORITY], [
!   AC_LANG_PUSH([C++])
  
    AC_MSG_CHECKING([whether init_priority attribute is supported])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
    #if ! __has_attribute(init_priority)
    #error init_priority not supported
    #endif
! 		 ]])], [ac_init_priority=yes], [ac_init_priority=no])
    if test "$ac_init_priority" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE_INIT_PRIORITY_ATTRIBUTE, 1,
        [Define if init_priority should be used for iostream initialization.])
    fi
    AC_MSG_RESULT($ac_init_priority)
  
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Defines:
*** 5734,5762 ****
  dnl   _GLIBCXX_USE__GET_OSFHANDLE if _get_osfhandle is in <io.h> for Windows.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES], [
! AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    AC_MSG_CHECKING([whether _get_osfhandle is defined in <io.h>])
!   AC_TRY_COMPILE([
    #if defined(_WIN32) && !defined(__CYGWIN__)
    # include <stdint.h>
    # include <stdio.h>
    # include <io.h>
    #endif
!   ],[
      FILE* file = 0;
      int fd = fileno(file);
      intptr_t crt_handle = _get_osfhandle(fd);
      void* win32_handle = reinterpret_cast<void*>(crt_handle);
!   ], [ac_get_osfhandle=yes], [ac_get_osfhandle=no])
    if test "$ac_get_osfhandle" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE__GET_OSFHANDLE, 1,
        [Define if _get_osfhandle should be used for filebuf::native_handle().])
    fi
    AC_MSG_RESULT($ac_get_osfhandle)
  
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5711,5738 ----
  dnl   _GLIBCXX_USE__GET_OSFHANDLE if _get_osfhandle is in <io.h> for Windows.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES], [
!   AC_LANG_PUSH([C++])
  
    AC_MSG_CHECKING([whether _get_osfhandle is defined in <io.h>])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    #if defined(_WIN32) && !defined(__CYGWIN__)
    # include <stdint.h>
    # include <stdio.h>
    # include <io.h>
    #endif
!   ]],[[
      FILE* file = 0;
      int fd = fileno(file);
      intptr_t crt_handle = _get_osfhandle(fd);
      void* win32_handle = reinterpret_cast<void*>(crt_handle);
!   ]])], [ac_get_osfhandle=yes], [ac_get_osfhandle=no])
    if test "$ac_get_osfhandle" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE__GET_OSFHANDLE, 1,
        [Define if _get_osfhandle should be used for filebuf::native_handle().])
    fi
    AC_MSG_RESULT($ac_get_osfhandle)
  
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl Defines:
*** 5766,5793 ****
  dnl   _GLIBCXX_USE_NL_LANGINFO_L if nl_langinfo_l is in <langinfo.h>.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_TEXT_ENCODING], [
! AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    AC_MSG_CHECKING([whether nl_langinfo_l is defined in <langinfo.h>])
!   AC_TRY_COMPILE([
    #include <locale.h>
    #if __has_include(<xlocale.h>)
    # include <xlocale.h>
    #endif
    #include <langinfo.h>
!   ],[
      locale_t loc = newlocale(LC_ALL_MASK, "", (locale_t)0);
      const char* enc = nl_langinfo_l(CODESET, loc);
      freelocale(loc);
!   ], [ac_nl_langinfo_l=yes], [ac_nl_langinfo_l=no])
    AC_MSG_RESULT($ac_nl_langinfo_l)
    if test "$ac_nl_langinfo_l" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE_NL_LANGINFO_L, 1,
        [Define if nl_langinfo_l should be used for std::text_encoding.])
    fi
  
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5742,5768 ----
  dnl   _GLIBCXX_USE_NL_LANGINFO_L if nl_langinfo_l is in <langinfo.h>.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_TEXT_ENCODING], [
!   AC_LANG_PUSH([C++])
  
    AC_MSG_CHECKING([whether nl_langinfo_l is defined in <langinfo.h>])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    #include <locale.h>
    #if __has_include(<xlocale.h>)
    # include <xlocale.h>
    #endif
    #include <langinfo.h>
!   ]],[[
      locale_t loc = newlocale(LC_ALL_MASK, "", (locale_t)0);
      const char* enc = nl_langinfo_l(CODESET, loc);
      freelocale(loc);
!   ]])], [ac_nl_langinfo_l=yes], [ac_nl_langinfo_l=no])
    AC_MSG_RESULT($ac_nl_langinfo_l)
    if test "$ac_nl_langinfo_l" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE_NL_LANGINFO_L, 1,
        [Define if nl_langinfo_l should be used for std::text_encoding.])
    fi
  
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl   _GLIBCXX_USE_PTRACE if ptrace(int,
*** 5798,5805 ****
  dnl   _GLIBCXX_USE_PROC_SELF_STATUS if /proc/self/status should be used.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_DEBUGGING], [
!   AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    AC_CHECK_HEADERS([sys/ptrace.h debugapi.h])
  
--- 5773,5779 ----
  dnl   _GLIBCXX_USE_PROC_SELF_STATUS if /proc/self/status should be used.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_DEBUGGING], [
!   AC_LANG_PUSH([C++])
  
    AC_CHECK_HEADERS([sys/ptrace.h debugapi.h])
  
*************** AC_DEFUN([GLIBCXX_CHECK_DEBUGGING], [
*** 5811,5828 ****
    esac
  
    AC_MSG_CHECKING([whether ptrace(int, pid_t, int, int) is in <sys/ptrace.h>])
!   AC_TRY_COMPILE([
    #include <sys/ptrace.h>
!   ],[
      int i = ptrace(PTRACE_TRACEME, (pid_t)0, 1, 0);
!   ], [ac_ptrace=yes], [ac_ptrace=no])
    AC_MSG_RESULT($ac_ptrace)
    if test "$ac_ptrace" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE_PTRACE, 1,
        [Define if ptrace should be used for std::is_debugger_present.])
    fi
  
!   AC_LANG_RESTORE
  ])
  
  dnl
--- 5785,5802 ----
    esac
  
    AC_MSG_CHECKING([whether ptrace(int, pid_t, int, int) is in <sys/ptrace.h>])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    #include <sys/ptrace.h>
!   ]],[[
      int i = ptrace(PTRACE_TRACEME, (pid_t)0, 1, 0);
!   ]])], [ac_ptrace=yes], [ac_ptrace=no])
    AC_MSG_RESULT($ac_ptrace)
    if test "$ac_ptrace" = yes; then
      AC_DEFINE_UNQUOTED(_GLIBCXX_USE_PTRACE, 1,
        [Define if ptrace should be used for std::is_debugger_present.])
    fi
  
!   AC_LANG_POP([C++])
  ])
  
  dnl
*************** dnl   _GLIBCXX_USE_STDIO_LOCKING if floc
*** 5833,5843 ****
  dnl   _GLIBCXX_USE_GLIBC_STDIO_EXT if FILE::_IO_write_ptr etc. are also present.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_STDIO_LOCKING], [
! AC_LANG_SAVE
!   AC_LANG_CPLUSPLUS
  
    AC_MSG_CHECKING([whether flockfile and putc_unlocked are defined in <stdio.h>])
!   AC_TRY_COMPILE([
    #include <stdio.h>
    #if __has_include(<newlib.h>)
    # ifdef __CYGWIN__
--- 5807,5816 ----
  dnl   _GLIBCXX_USE_GLIBC_STDIO_EXT if FILE::_IO_write_ptr etc. are also present.
  dnl
  AC_DEFUN([GLIBCXX_CHECK_STDIO_LOCKING], [
!   AC_LANG_PUSH([C++])
  
    AC_MSG_CHECKING([whether flockfile and putc_unlocked are defined in <stdio.h>])
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
    #include <stdio.h>
    #if __has_include(<newlib.h>)
    # ifdef __CYGWIN__
*************** AC_LANG_SAVE
*** 5846,5858 ****
    #  error No usable flockfile on most newlib targets
    # endif
    #endif
!   ],[
      FILE* f = ::fopen("", "");
      ::flockfile(f);
      ::putc_unlocked(' ', f);
      ::funlockfile(f);
      ::fclose(f);
!   ],[ac_stdio_locking=yes],[ac_stdio_locking=no])
    AC_MSG_RESULT($ac_stdio_locking)
  
    if test "$ac_stdio_locking" = yes; then
--- 5819,5831 ----
    #  error No usable flockfile on most newlib targets
    # endif
    #endif
!   ]],[[
      FILE* f = ::fopen("", "");
      ::flockfile(f);
      ::putc_unlocked(' ', f);
      ::funlockfile(f);
      ::fclose(f);
!   ]])],[ac_stdio_locking=yes],[ac_stdio_locking=no])
    AC_MSG_RESULT($ac_stdio_locking)
  
    if test "$ac_stdio_locking" = yes; then
*************** AC_LANG_SAVE
*** 5861,5875 ****
  
      # This is not defined in POSIX, but is present in glibc, musl, and Solaris.
      AC_MSG_CHECKING([whether fwrite_unlocked is defined in <stdio.h>])
!     AC_TRY_COMPILE([
      #include <stdio.h>
!     ],[
        FILE* f = ::fopen("", "");
        ::flockfile(f);
        ::fwrite_unlocked("", 1, 1, f);
        ::funlockfile(f);
        ::fclose(f);
!     ], [ac_fwrite_unlocked=yes], [ac_fwrite_unlocked=no])
      AC_MSG_RESULT($ac_fwrite_unlocked)
      if test "$ac_fwrite_unlocked" = yes; then
        AC_DEFINE(HAVE_FWRITE_UNLOCKED, 1,
--- 5834,5848 ----
  
      # This is not defined in POSIX, but is present in glibc, musl, and Solaris.
      AC_MSG_CHECKING([whether fwrite_unlocked is defined in <stdio.h>])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
      #include <stdio.h>
!     ]],[[
        FILE* f = ::fopen("", "");
        ::flockfile(f);
        ::fwrite_unlocked("", 1, 1, f);
        ::funlockfile(f);
        ::fclose(f);
!     ]])], [ac_fwrite_unlocked=yes], [ac_fwrite_unlocked=no])
      AC_MSG_RESULT($ac_fwrite_unlocked)
      if test "$ac_fwrite_unlocked" = yes; then
        AC_DEFINE(HAVE_FWRITE_UNLOCKED, 1,
*************** AC_LANG_SAVE
*** 5879,5894 ****
        case "${target_os}" in
  	gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
  	  AC_MSG_CHECKING([for FILE::_IO_write_ptr and <stdio_ext.h>])
! 	  AC_TRY_COMPILE([
  	  #include <stdio.h>
  	  #include <stdio_ext.h>
  	  extern "C" {
  	   using f1_type = int (*)(FILE*) noexcept;
  	   using f2_type = size_t (*)(FILE*) noexcept;
  	  }
! 	  ],[
  	  f1_type twritable = &::__fwritable;
! 	  f1_type tblk = &::__flbf; 
  	  f2_type pbufsize = &::__fbufsize;
  	  FILE* f = ::fopen("", "");
  	  int i = ::__overflow(f, EOF);
--- 5852,5867 ----
        case "${target_os}" in
  	gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
  	  AC_MSG_CHECKING([for FILE::_IO_write_ptr and <stdio_ext.h>])
! 	  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  	  #include <stdio.h>
  	  #include <stdio_ext.h>
  	  extern "C" {
  	   using f1_type = int (*)(FILE*) noexcept;
  	   using f2_type = size_t (*)(FILE*) noexcept;
  	  }
! 	  ]],[[
  	  f1_type twritable = &::__fwritable;
! 	  f1_type tblk = &::__flbf;
  	  f2_type pbufsize = &::__fbufsize;
  	  FILE* f = ::fopen("", "");
  	  int i = ::__overflow(f, EOF);
*************** AC_LANG_SAVE
*** 5899,5905 ****
  	  char*& epptr = f->_IO_buf_end;
  	  ::fflush_unlocked(f);
  	  ::fclose(f);
! 	  ], [ac_glibc_stdio=yes], [ac_glibc_stdio=no])
  	  AC_MSG_RESULT($ac_glibc_stdio)
  	  if test "$ac_glibc_stdio" = yes; then
  	    AC_DEFINE_UNQUOTED(_GLIBCXX_USE_GLIBC_STDIO_EXT, 1,
--- 5872,5878 ----
  	  char*& epptr = f->_IO_buf_end;
  	  ::fflush_unlocked(f);
  	  ::fclose(f);
! 	  ]])], [ac_glibc_stdio=yes], [ac_glibc_stdio=no])
  	  AC_MSG_RESULT($ac_glibc_stdio)
  	  if test "$ac_glibc_stdio" = yes; then
  	    AC_DEFINE_UNQUOTED(_GLIBCXX_USE_GLIBC_STDIO_EXT, 1,
*************** AC_LANG_SAVE
*** 5912,5918 ****
      fi
    fi
  
!   AC_LANG_RESTORE
  ])
  
  
--- 5885,5891 ----
      fi
    fi
  
!   AC_LANG_POP([C++])
  ])
  
  
diff -Nrcpad gcc-17-20260621/libstdc++-v3/configure gcc-17-20260628/libstdc++-v3/configure
*** gcc-17-20260621/libstdc++-v3/configure	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/configure	Sun Jun 28 22:32:22 2026
*************** fi
*** 16192,16198 ****
  
  
  # Override the libtool's pic_flag and pic_mode.
! # Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
  # NB: this impacts --with-pic and --without-pic.
  lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
  pic_mode='default'
--- 16192,16198 ----
  
  
  # Override the libtool's pic_flag and pic_mode.
! # Do this step after LT_INIT, but before AC_OUTPUT.
  # NB: this impacts --with-pic and --without-pic.
  lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
  pic_mode='default'
*************** if ${glibcxx_cv_prog_CXX_pch+:} false; t
*** 16308,16314 ****
  else
    ac_save_CXXFLAGS="$CXXFLAGS"
         CXXFLAGS="$CXXFLAGS -Werror -Winvalid-pch -Wno-deprecated"
- 
         ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 16308,16313 ----
*************** esac
*** 16400,16406 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 16399,16404 ----
*************** $as_echo "$glibcxx_cv_atomic_word" >&6;
*** 16474,16483 ****
      # Compile unoptimized.
      CXXFLAGS='-O0 -S'
  
!     # Fake what AC_TRY_COMPILE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16480 "configure"
  #include "atomic_word.h"
  int main()
  {
--- 16472,16481 ----
      # Compile unoptimized.
      CXXFLAGS='-O0 -S'
  
!     # Fake what AC_COMPILE_IFELSE does.
  
      cat > conftest.$ac_ext << EOF
! #line 16478 "configure"
  #include "atomic_word.h"
  int main()
  {
*************** fi
*** 16562,16568 ****
  $as_echo_n "checking for lock policy for shared_ptr reference counts... " >&6; }
  
    if test x"$libstdcxx_atomic_lock_policy" = x"auto"; then
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 16560,16565 ----
*************** $as_echo "mutex" >&6; }
*** 16621,16631 ****
  
  
  
!   # Fake what AC_TRY_COMPILE does, without linking as this is
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16628 "configure"
  int main()
  {
    _Decimal32 d1;
--- 16618,16628 ----
  
  
  
!   # Fake what AC_COMPILE_IFELSE does, without linking as this is
    # unnecessary for this test.
  
      cat > conftest.$ac_ext << EOF
! #line 16625 "configure"
  int main()
  {
    _Decimal32 d1;
*************** $as_echo "$enable_dfp" >&6; }
*** 16655,16661 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 16652,16657 ----
*************** ac_link='$CXX -o conftest$ac_exeext $CXX
*** 16663,16673 ****
  ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
  
  
!   # Fake what AC_TRY_COMPILE does, without linking as this is
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16670 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
--- 16659,16669 ----
  ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
  
  
!   # Fake what AC_COMPILE_IFELSE does, without linking as this is
    # unnecessary for this test.
  
    cat > conftest.$ac_ext << EOF
! #line 16666 "configure"
  template<typename T1, typename T2>
    struct same
    { typedef T2 type; };
*************** fi
*** 16714,16720 ****
    # All these tests are for C++; save the language and the compiler flags.
    # The CXXFLAGS thing is suspicious, but based on similar bits previously
    # found in GLIBCXX_CONFIGURE.
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 16710,16715 ----
*************** done
*** 17463,17469 ****
  
    if test x"$enable_wchar_t" = x"yes"; then
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 17458,17463 ----
*************** fi
*** 17591,17597 ****
  
  
    if test x"$enable_c99" = x"yes"; then
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 17585,17590 ----
*************** ac_link='$CC -o conftest$ac_exeext $CFLA
*** 18268,18274 ****
  ac_compiler_gnu=$ac_cv_c_compiler_gnu
  
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 18261,18266 ----
*************** fi
*** 19794,19800 ****
  # Checks for operating systems support that doesn't require linking.
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 19786,19791 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 19848,19854 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 19839,19844 ----
*************** fi
*** 20063,20069 ****
  done
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 20053,20058 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 20205,20211 ****
  
  # For LFS support.
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 20194,20199 ----
*************** done
*** 20379,20385 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 20367,20372 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 20460,20466 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 20447,20452 ----
*************** done
*** 20615,20621 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 20601,20606 ----
*************** done
*** 20714,20720 ****
  # For C99 support to TR1.
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 20699,20704 ----
*************** fi
*** 21345,21351 ****
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettimeofday" >&5
  $as_echo_n "checking for gettimeofday... " >&6; }
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 21329,21334 ----
*************** fi
*** 21451,21457 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 21434,21439 ----
*************** ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
*** 21487,21492 ****
--- 21469,21475 ----
          ac_has_clock_monotonic=yes
          ac_has_clock_realtime=yes
          ac_has_nanosleep=yes
+         ac_has_sched_yield=yes
          ;;
        gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
          # Don't use link test for freestanding library, in case gcc_no_link=yes
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22091,22097 ****
  
  
  # Check for tmpnam which is obsolescent in POSIX.1-2008
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22074,22079 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22167,22173 ****
  # For pthread_cond_clockwait
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22149,22154 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22249,22255 ****
  # For pthread_mutex_clocklock
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22230,22235 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22331,22337 ****
  # For pthread_rwlock_clockrdlock and pthread_rwlock_clockwrlock
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22311,22316 ----
*************** done
*** 22469,22475 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22448,22453 ----
*************** done
*** 22558,22564 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22536,22541 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22635,22641 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22612,22617 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22712,22718 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22688,22693 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22789,22795 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22764,22769 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 22884,22890 ****
    # Note that this test has to be run with the C language.
    # Otherwise, sdt.h will try to include some headers from
    # libstdc++ itself.
- 
    ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 22858,22863 ----
*************** $as_echo_n "checking for isinf declarati
*** 23313,23319 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23286,23291 ----
*************** $as_echo_n "checking for isnan declarati
*** 23377,23383 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23349,23354 ----
*************** $as_echo_n "checking for finite declarat
*** 23441,23447 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23412,23417 ----
*************** $as_echo_n "checking for sincos declarat
*** 23505,23511 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23475,23480 ----
*************** $as_echo_n "checking for fpclass declara
*** 23565,23571 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23534,23539 ----
*************** $as_echo_n "checking for qfpclass declar
*** 23629,23635 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23597,23602 ----
*************** $as_echo_n "checking for hypot declarati
*** 23693,23699 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23660,23665 ----
*************** $as_echo_n "checking for float trig func
*** 23752,23758 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23718,23723 ----
*************** $as_echo_n "checking for float round fun
*** 23809,23815 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23774,23779 ----
*************** $as_echo_n "checking for expf declaratio
*** 23868,23874 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23832,23837 ----
*************** $as_echo_n "checking for isnanf declarat
*** 23932,23938 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23895,23900 ----
*************** $as_echo_n "checking for isinff declarat
*** 23996,24002 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 23958,23963 ----
*************** $as_echo_n "checking for atan2f declarat
*** 24060,24066 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24021,24026 ----
*************** $as_echo_n "checking for fabsf declarati
*** 24120,24126 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24080,24085 ----
*************** $as_echo_n "checking for fmodf declarati
*** 24184,24190 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24143,24148 ----
*************** $as_echo_n "checking for frexpf declarat
*** 24244,24250 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24202,24207 ----
*************** $as_echo_n "checking for hypotf declarat
*** 24304,24310 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24261,24266 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 24364,24370 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24320,24325 ----
*************** $as_echo_n "checking for logf declaratio
*** 24424,24430 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24379,24384 ----
*************** $as_echo_n "checking for log10f declarat
*** 24488,24494 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24442,24447 ----
*************** $as_echo_n "checking for modff declarati
*** 24552,24558 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24505,24510 ----
*************** $as_echo_n "checking for modf declaratio
*** 24612,24618 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24564,24569 ----
*************** $as_echo_n "checking for powf declaratio
*** 24672,24678 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24623,24628 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 24732,24738 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24682,24687 ----
*************** $as_echo_n "checking for sincosf declara
*** 24796,24802 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24745,24750 ----
*************** $as_echo_n "checking for finitef declara
*** 24856,24862 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24804,24809 ----
*************** $as_echo_n "checking for long double tri
*** 24919,24925 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24866,24871 ----
*************** $as_echo_n "checking for long double rou
*** 24976,24982 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24922,24927 ----
*************** $as_echo_n "checking for isnanl declarat
*** 25035,25041 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 24980,24985 ----
*************** $as_echo_n "checking for isinfl declarat
*** 25099,25105 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25043,25048 ----
*************** $as_echo_n "checking for atan2l declarat
*** 25163,25169 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25106,25111 ----
*************** $as_echo_n "checking for expl declaratio
*** 25223,25229 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25165,25170 ----
*************** $as_echo_n "checking for fabsl declarati
*** 25287,25293 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25228,25233 ----
*************** $as_echo_n "checking for fmodl declarati
*** 25351,25357 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25291,25296 ----
*************** $as_echo_n "checking for frexpl declarat
*** 25411,25417 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25350,25355 ----
*************** $as_echo_n "checking for hypotl declarat
*** 25471,25477 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25409,25414 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 25531,25537 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25468,25473 ----
*************** $as_echo_n "checking for logl declaratio
*** 25591,25597 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25527,25532 ----
*************** $as_echo_n "checking for log10l declarat
*** 25655,25661 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25590,25595 ----
*************** $as_echo_n "checking for modfl declarati
*** 25719,25725 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25653,25658 ----
*************** $as_echo_n "checking for powl declaratio
*** 25779,25785 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25712,25717 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 25839,25845 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25771,25776 ----
*************** $as_echo_n "checking for sincosl declara
*** 25903,25909 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25834,25839 ----
*************** $as_echo_n "checking for finitel declara
*** 25963,25969 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25893,25898 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 26035,26041 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 25964,25969 ----
*************** $as_echo_n "checking for quick_exit decl
*** 26093,26099 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 26021,26026 ----
*************** $as_echo_n "checking for strtold declara
*** 26151,26157 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 26078,26083 ----
*************** $as_echo_n "checking for strtof declarat
*** 26209,26215 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 26135,26140 ----
*************** if ${glibcxx_cv_func_acosl_use+:} false;
*** 27592,27598 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27517,27522 ----
*************** if ${glibcxx_cv_func_asinl_use+:} false;
*** 27643,27649 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27567,27572 ----
*************** if ${glibcxx_cv_func_atan2l_use+:} false
*** 27694,27700 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27617,27622 ----
*************** if ${glibcxx_cv_func_atanl_use+:} false;
*** 27745,27751 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27667,27672 ----
*************** if ${glibcxx_cv_func_ceill_use+:} false;
*** 27796,27802 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27717,27722 ----
*************** if ${glibcxx_cv_func_coshl_use+:} false;
*** 27847,27853 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27767,27772 ----
*************** if ${glibcxx_cv_func_cosl_use+:} false;
*** 27898,27904 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27817,27822 ----
*************** if ${glibcxx_cv_func_expl_use+:} false;
*** 27949,27955 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27867,27872 ----
*************** if ${glibcxx_cv_func_fabsl_use+:} false;
*** 28000,28006 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27917,27922 ----
*************** if ${glibcxx_cv_func_floorl_use+:} false
*** 28051,28057 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 27967,27972 ----
*************** if ${glibcxx_cv_func_fmodl_use+:} false;
*** 28102,28108 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28017,28022 ----
*************** if ${glibcxx_cv_func_frexpl_use+:} false
*** 28153,28159 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28067,28072 ----
*************** if ${glibcxx_cv_func_hypotl_use+:} false
*** 28204,28210 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28117,28122 ----
*************** if ${glibcxx_cv_func_ldexpl_use+:} false
*** 28255,28261 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28167,28172 ----
*************** if ${glibcxx_cv_func_log10l_use+:} false
*** 28306,28312 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28217,28222 ----
*************** if ${glibcxx_cv_func_logl_use+:} false;
*** 28357,28363 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28267,28272 ----
*************** if ${glibcxx_cv_func_modfl_use+:} false;
*** 28408,28414 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28317,28322 ----
*************** if ${glibcxx_cv_func_powl_use+:} false;
*** 28459,28465 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28367,28372 ----
*************** if ${glibcxx_cv_func_sinhl_use+:} false;
*** 28510,28516 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28417,28422 ----
*************** if ${glibcxx_cv_func_sinl_use+:} false;
*** 28561,28567 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28467,28472 ----
*************** if ${glibcxx_cv_func_sqrtl_use+:} false;
*** 28612,28618 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28517,28522 ----
*************** if ${glibcxx_cv_func_tanhl_use+:} false;
*** 28663,28669 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28567,28572 ----
*************** if ${glibcxx_cv_func_tanl_use+:} false;
*** 28714,28720 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28617,28622 ----
*************** case "${host}" in
*** 29049,29055 ****
    # All these tests are for C++; save the language and the compiler flags.
    # The CXXFLAGS thing is suspicious, but based on similar bits previously
    # found in GLIBCXX_CONFIGURE.
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 28951,28956 ----
*************** $as_echo_n "checking for isinf declarati
*** 29314,29320 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29215,29220 ----
*************** $as_echo_n "checking for isnan declarati
*** 29378,29384 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29278,29283 ----
*************** $as_echo_n "checking for finite declarat
*** 29442,29448 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29341,29346 ----
*************** $as_echo_n "checking for sincos declarat
*** 29506,29512 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29404,29409 ----
*************** $as_echo_n "checking for fpclass declara
*** 29566,29572 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29463,29468 ----
*************** $as_echo_n "checking for qfpclass declar
*** 29630,29636 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29526,29531 ----
*************** $as_echo_n "checking for hypot declarati
*** 29694,29700 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29589,29594 ----
*************** $as_echo_n "checking for float trig func
*** 29753,29759 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29647,29652 ----
*************** $as_echo_n "checking for float round fun
*** 29810,29816 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29703,29708 ----
*************** $as_echo_n "checking for expf declaratio
*** 29869,29875 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29761,29766 ----
*************** $as_echo_n "checking for isnanf declarat
*** 29933,29939 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29824,29829 ----
*************** $as_echo_n "checking for isinff declarat
*** 29997,30003 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29887,29892 ----
*************** $as_echo_n "checking for atan2f declarat
*** 30061,30067 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 29950,29955 ----
*************** $as_echo_n "checking for fabsf declarati
*** 30121,30127 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30009,30014 ----
*************** $as_echo_n "checking for fmodf declarati
*** 30185,30191 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30072,30077 ----
*************** $as_echo_n "checking for frexpf declarat
*** 30245,30251 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30131,30136 ----
*************** $as_echo_n "checking for hypotf declarat
*** 30305,30311 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30190,30195 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 30365,30371 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30249,30254 ----
*************** $as_echo_n "checking for logf declaratio
*** 30425,30431 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30308,30313 ----
*************** $as_echo_n "checking for log10f declarat
*** 30489,30495 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30371,30376 ----
*************** $as_echo_n "checking for modff declarati
*** 30553,30559 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30434,30439 ----
*************** $as_echo_n "checking for modf declaratio
*** 30613,30619 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30493,30498 ----
*************** $as_echo_n "checking for powf declaratio
*** 30673,30679 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30552,30557 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 30733,30739 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30611,30616 ----
*************** $as_echo_n "checking for sincosf declara
*** 30797,30803 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30674,30679 ----
*************** $as_echo_n "checking for finitef declara
*** 30857,30863 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30733,30738 ----
*************** $as_echo_n "checking for long double tri
*** 30920,30926 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30795,30800 ----
*************** $as_echo_n "checking for long double rou
*** 30977,30983 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30851,30856 ----
*************** $as_echo_n "checking for isnanl declarat
*** 31036,31042 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30909,30914 ----
*************** $as_echo_n "checking for isinfl declarat
*** 31100,31106 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 30972,30977 ----
*************** $as_echo_n "checking for atan2l declarat
*** 31164,31170 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31035,31040 ----
*************** $as_echo_n "checking for expl declaratio
*** 31224,31230 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31094,31099 ----
*************** $as_echo_n "checking for fabsl declarati
*** 31288,31294 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31157,31162 ----
*************** $as_echo_n "checking for fmodl declarati
*** 31352,31358 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31220,31225 ----
*************** $as_echo_n "checking for frexpl declarat
*** 31412,31418 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31279,31284 ----
*************** $as_echo_n "checking for hypotl declarat
*** 31472,31478 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31338,31343 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 31532,31538 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31397,31402 ----
*************** $as_echo_n "checking for logl declaratio
*** 31592,31598 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31456,31461 ----
*************** $as_echo_n "checking for log10l declarat
*** 31656,31662 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31519,31524 ----
*************** $as_echo_n "checking for modfl declarati
*** 31720,31726 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31582,31587 ----
*************** $as_echo_n "checking for powl declaratio
*** 31780,31786 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31641,31646 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 31840,31846 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31700,31705 ----
*************** $as_echo_n "checking for sincosl declara
*** 31904,31910 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31763,31768 ----
*************** $as_echo_n "checking for finitel declara
*** 31964,31970 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31822,31827 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 32036,32042 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31893,31898 ----
*************** $as_echo_n "checking for quick_exit decl
*** 32094,32100 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 31950,31955 ----
*************** $as_echo_n "checking for strtold declara
*** 32152,32158 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32007,32012 ----
*************** $as_echo_n "checking for strtof declarat
*** 32210,32216 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32064,32069 ----
*************** $as_echo_n "checking for isinf declarati
*** 32496,32502 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32349,32354 ----
*************** $as_echo_n "checking for isnan declarati
*** 32560,32566 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32412,32417 ----
*************** $as_echo_n "checking for finite declarat
*** 32624,32630 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32475,32480 ----
*************** $as_echo_n "checking for sincos declarat
*** 32688,32694 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32538,32543 ----
*************** $as_echo_n "checking for fpclass declara
*** 32748,32754 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32597,32602 ----
*************** $as_echo_n "checking for qfpclass declar
*** 32812,32818 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32660,32665 ----
*************** $as_echo_n "checking for hypot declarati
*** 32876,32882 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32723,32728 ----
*************** $as_echo_n "checking for float trig func
*** 32935,32941 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32781,32786 ----
*************** $as_echo_n "checking for float round fun
*** 32992,32998 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32837,32842 ----
*************** $as_echo_n "checking for expf declaratio
*** 33051,33057 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32895,32900 ----
*************** $as_echo_n "checking for isnanf declarat
*** 33115,33121 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 32958,32963 ----
*************** $as_echo_n "checking for isinff declarat
*** 33179,33185 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33021,33026 ----
*************** $as_echo_n "checking for atan2f declarat
*** 33243,33249 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33084,33089 ----
*************** $as_echo_n "checking for fabsf declarati
*** 33303,33309 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33143,33148 ----
*************** $as_echo_n "checking for fmodf declarati
*** 33367,33373 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33206,33211 ----
*************** $as_echo_n "checking for frexpf declarat
*** 33427,33433 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33265,33270 ----
*************** $as_echo_n "checking for hypotf declarat
*** 33487,33493 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33324,33329 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 33547,33553 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33383,33388 ----
*************** $as_echo_n "checking for logf declaratio
*** 33607,33613 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33442,33447 ----
*************** $as_echo_n "checking for log10f declarat
*** 33671,33677 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33505,33510 ----
*************** $as_echo_n "checking for modff declarati
*** 33735,33741 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33568,33573 ----
*************** $as_echo_n "checking for modf declaratio
*** 33795,33801 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33627,33632 ----
*************** $as_echo_n "checking for powf declaratio
*** 33855,33861 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33686,33691 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 33915,33921 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33745,33750 ----
*************** $as_echo_n "checking for sincosf declara
*** 33979,33985 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33808,33813 ----
*************** $as_echo_n "checking for finitef declara
*** 34039,34045 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33867,33872 ----
*************** $as_echo_n "checking for long double tri
*** 34102,34108 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33929,33934 ----
*************** $as_echo_n "checking for long double rou
*** 34159,34165 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 33985,33990 ----
*************** $as_echo_n "checking for isnanl declarat
*** 34218,34224 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34043,34048 ----
*************** $as_echo_n "checking for isinfl declarat
*** 34282,34288 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34106,34111 ----
*************** $as_echo_n "checking for atan2l declarat
*** 34346,34352 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34169,34174 ----
*************** $as_echo_n "checking for expl declaratio
*** 34406,34412 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34228,34233 ----
*************** $as_echo_n "checking for fabsl declarati
*** 34470,34476 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34291,34296 ----
*************** $as_echo_n "checking for fmodl declarati
*** 34534,34540 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34354,34359 ----
*************** $as_echo_n "checking for frexpl declarat
*** 34594,34600 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34413,34418 ----
*************** $as_echo_n "checking for hypotl declarat
*** 34654,34660 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34472,34477 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 34714,34720 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34531,34536 ----
*************** $as_echo_n "checking for logl declaratio
*** 34774,34780 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34590,34595 ----
*************** $as_echo_n "checking for log10l declarat
*** 34838,34844 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34653,34658 ----
*************** $as_echo_n "checking for modfl declarati
*** 34902,34908 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34716,34721 ----
*************** $as_echo_n "checking for powl declaratio
*** 34962,34968 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34775,34780 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 35022,35028 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34834,34839 ----
*************** $as_echo_n "checking for sincosl declara
*** 35086,35092 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34897,34902 ----
*************** $as_echo_n "checking for finitel declara
*** 35146,35152 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 34956,34961 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 35218,35224 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35027,35032 ----
*************** $as_echo_n "checking for quick_exit decl
*** 35276,35282 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35084,35089 ----
*************** $as_echo_n "checking for strtold declara
*** 35334,35340 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35141,35146 ----
*************** $as_echo_n "checking for strtof declarat
*** 35392,35398 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35198,35203 ----
*************** $as_echo_n "checking for isinf declarati
*** 35523,35529 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35328,35333 ----
*************** $as_echo_n "checking for isnan declarati
*** 35587,35593 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35391,35396 ----
*************** $as_echo_n "checking for finite declarat
*** 35651,35657 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35454,35459 ----
*************** $as_echo_n "checking for sincos declarat
*** 35715,35721 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35517,35522 ----
*************** $as_echo_n "checking for fpclass declara
*** 35775,35781 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35576,35581 ----
*************** $as_echo_n "checking for qfpclass declar
*** 35839,35845 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35639,35644 ----
*************** $as_echo_n "checking for hypot declarati
*** 35903,35909 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35702,35707 ----
*************** $as_echo_n "checking for float trig func
*** 35962,35968 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35760,35765 ----
*************** $as_echo_n "checking for float round fun
*** 36019,36025 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35816,35821 ----
*************** $as_echo_n "checking for expf declaratio
*** 36078,36084 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35874,35879 ----
*************** $as_echo_n "checking for isnanf declarat
*** 36142,36148 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 35937,35942 ----
*************** $as_echo_n "checking for isinff declarat
*** 36206,36212 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36000,36005 ----
*************** $as_echo_n "checking for atan2f declarat
*** 36270,36276 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36063,36068 ----
*************** $as_echo_n "checking for fabsf declarati
*** 36330,36336 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36122,36127 ----
*************** $as_echo_n "checking for fmodf declarati
*** 36394,36400 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36185,36190 ----
*************** $as_echo_n "checking for frexpf declarat
*** 36454,36460 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36244,36249 ----
*************** $as_echo_n "checking for hypotf declarat
*** 36514,36520 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36303,36308 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 36574,36580 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36362,36367 ----
*************** $as_echo_n "checking for logf declaratio
*** 36634,36640 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36421,36426 ----
*************** $as_echo_n "checking for log10f declarat
*** 36698,36704 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36484,36489 ----
*************** $as_echo_n "checking for modff declarati
*** 36762,36768 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36547,36552 ----
*************** $as_echo_n "checking for modf declaratio
*** 36822,36828 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36606,36611 ----
*************** $as_echo_n "checking for powf declaratio
*** 36882,36888 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36665,36670 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 36942,36948 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36724,36729 ----
*************** $as_echo_n "checking for sincosf declara
*** 37006,37012 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36787,36792 ----
*************** $as_echo_n "checking for finitef declara
*** 37066,37072 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36846,36851 ----
*************** $as_echo_n "checking for long double tri
*** 37129,37135 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36908,36913 ----
*************** $as_echo_n "checking for long double rou
*** 37186,37192 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 36964,36969 ----
*************** $as_echo_n "checking for isnanl declarat
*** 37245,37251 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37022,37027 ----
*************** $as_echo_n "checking for isinfl declarat
*** 37309,37315 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37085,37090 ----
*************** $as_echo_n "checking for atan2l declarat
*** 37373,37379 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37148,37153 ----
*************** $as_echo_n "checking for expl declaratio
*** 37433,37439 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37207,37212 ----
*************** $as_echo_n "checking for fabsl declarati
*** 37497,37503 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37270,37275 ----
*************** $as_echo_n "checking for fmodl declarati
*** 37561,37567 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37333,37338 ----
*************** $as_echo_n "checking for frexpl declarat
*** 37621,37627 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37392,37397 ----
*************** $as_echo_n "checking for hypotl declarat
*** 37681,37687 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37451,37456 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 37741,37747 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37510,37515 ----
*************** $as_echo_n "checking for logl declaratio
*** 37801,37807 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37569,37574 ----
*************** $as_echo_n "checking for log10l declarat
*** 37865,37871 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37632,37637 ----
*************** $as_echo_n "checking for modfl declarati
*** 37929,37935 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37695,37700 ----
*************** $as_echo_n "checking for powl declaratio
*** 37989,37995 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37754,37759 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 38049,38055 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37813,37818 ----
*************** $as_echo_n "checking for sincosl declara
*** 38113,38119 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37876,37881 ----
*************** $as_echo_n "checking for finitel declara
*** 38173,38179 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 37935,37940 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 38245,38251 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 38006,38011 ----
*************** $as_echo_n "checking for quick_exit decl
*** 38303,38309 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 38063,38068 ----
*************** $as_echo_n "checking for strtold declara
*** 38361,38367 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 38120,38125 ----
*************** $as_echo_n "checking for strtof declarat
*** 38419,38425 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 38177,38182 ----
*************** $as_echo "#define HAVE_TLS 1" >>confdefs
*** 39211,39217 ****
    # All these tests are for C++; save the language and the compiler flags.
    # The CXXFLAGS thing is suspicious, but based on similar bits previously
    # found in GLIBCXX_CONFIGURE.
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 38968,38973 ----
*************** $as_echo_n "checking for isinf declarati
*** 39476,39482 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39232,39237 ----
*************** $as_echo_n "checking for isnan declarati
*** 39540,39546 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39295,39300 ----
*************** $as_echo_n "checking for finite declarat
*** 39604,39610 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39358,39363 ----
*************** $as_echo_n "checking for sincos declarat
*** 39668,39674 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39421,39426 ----
*************** $as_echo_n "checking for fpclass declara
*** 39728,39734 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39480,39485 ----
*************** $as_echo_n "checking for qfpclass declar
*** 39792,39798 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39543,39548 ----
*************** $as_echo_n "checking for hypot declarati
*** 39856,39862 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39606,39611 ----
*************** $as_echo_n "checking for float trig func
*** 39915,39921 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39664,39669 ----
*************** $as_echo_n "checking for float round fun
*** 39972,39978 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39720,39725 ----
*************** $as_echo_n "checking for expf declaratio
*** 40031,40037 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39778,39783 ----
*************** $as_echo_n "checking for isnanf declarat
*** 40095,40101 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39841,39846 ----
*************** $as_echo_n "checking for isinff declarat
*** 40159,40165 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39904,39909 ----
*************** $as_echo_n "checking for atan2f declarat
*** 40223,40229 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 39967,39972 ----
*************** $as_echo_n "checking for fabsf declarati
*** 40283,40289 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40026,40031 ----
*************** $as_echo_n "checking for fmodf declarati
*** 40347,40353 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40089,40094 ----
*************** $as_echo_n "checking for frexpf declarat
*** 40407,40413 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40148,40153 ----
*************** $as_echo_n "checking for hypotf declarat
*** 40467,40473 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40207,40212 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 40527,40533 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40266,40271 ----
*************** $as_echo_n "checking for logf declaratio
*** 40587,40593 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40325,40330 ----
*************** $as_echo_n "checking for log10f declarat
*** 40651,40657 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40388,40393 ----
*************** $as_echo_n "checking for modff declarati
*** 40715,40721 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40451,40456 ----
*************** $as_echo_n "checking for modf declaratio
*** 40775,40781 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40510,40515 ----
*************** $as_echo_n "checking for powf declaratio
*** 40835,40841 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40569,40574 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 40895,40901 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40628,40633 ----
*************** $as_echo_n "checking for sincosf declara
*** 40959,40965 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40691,40696 ----
*************** $as_echo_n "checking for finitef declara
*** 41019,41025 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40750,40755 ----
*************** $as_echo_n "checking for long double tri
*** 41082,41088 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40812,40817 ----
*************** $as_echo_n "checking for long double rou
*** 41139,41145 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40868,40873 ----
*************** $as_echo_n "checking for isnanl declarat
*** 41198,41204 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40926,40931 ----
*************** $as_echo_n "checking for isinfl declarat
*** 41262,41268 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 40989,40994 ----
*************** $as_echo_n "checking for atan2l declarat
*** 41326,41332 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41052,41057 ----
*************** $as_echo_n "checking for expl declaratio
*** 41386,41392 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41111,41116 ----
*************** $as_echo_n "checking for fabsl declarati
*** 41450,41456 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41174,41179 ----
*************** $as_echo_n "checking for fmodl declarati
*** 41514,41520 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41237,41242 ----
*************** $as_echo_n "checking for frexpl declarat
*** 41574,41580 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41296,41301 ----
*************** $as_echo_n "checking for hypotl declarat
*** 41634,41640 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41355,41360 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 41694,41700 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41414,41419 ----
*************** $as_echo_n "checking for logl declaratio
*** 41754,41760 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41473,41478 ----
*************** $as_echo_n "checking for log10l declarat
*** 41818,41824 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41536,41541 ----
*************** $as_echo_n "checking for modfl declarati
*** 41882,41888 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41599,41604 ----
*************** $as_echo_n "checking for powl declaratio
*** 41942,41948 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41658,41663 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 42002,42008 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41717,41722 ----
*************** $as_echo_n "checking for sincosl declara
*** 42066,42072 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41780,41785 ----
*************** $as_echo_n "checking for finitel declara
*** 42126,42132 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41839,41844 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 42198,42204 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41910,41915 ----
*************** $as_echo_n "checking for quick_exit decl
*** 42256,42262 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 41967,41972 ----
*************** $as_echo_n "checking for strtold declara
*** 42314,42320 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42024,42029 ----
*************** $as_echo_n "checking for strtof declarat
*** 42372,42378 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42081,42086 ----
*************** $as_echo_n "checking for isinf declarati
*** 42921,42927 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42629,42634 ----
*************** $as_echo_n "checking for isnan declarati
*** 42985,42991 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42692,42697 ----
*************** $as_echo_n "checking for finite declarat
*** 43049,43055 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42755,42760 ----
*************** $as_echo_n "checking for sincos declarat
*** 43113,43119 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42818,42823 ----
*************** $as_echo_n "checking for fpclass declara
*** 43173,43179 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42877,42882 ----
*************** $as_echo_n "checking for qfpclass declar
*** 43237,43243 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 42940,42945 ----
*************** $as_echo_n "checking for hypot declarati
*** 43301,43307 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43003,43008 ----
*************** $as_echo_n "checking for float trig func
*** 43360,43366 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43061,43066 ----
*************** $as_echo_n "checking for float round fun
*** 43417,43423 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43117,43122 ----
*************** $as_echo_n "checking for expf declaratio
*** 43476,43482 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43175,43180 ----
*************** $as_echo_n "checking for isnanf declarat
*** 43540,43546 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43238,43243 ----
*************** $as_echo_n "checking for isinff declarat
*** 43604,43610 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43301,43306 ----
*************** $as_echo_n "checking for atan2f declarat
*** 43668,43674 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43364,43369 ----
*************** $as_echo_n "checking for fabsf declarati
*** 43728,43734 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43423,43428 ----
*************** $as_echo_n "checking for fmodf declarati
*** 43792,43798 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43486,43491 ----
*************** $as_echo_n "checking for frexpf declarat
*** 43852,43858 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43545,43550 ----
*************** $as_echo_n "checking for hypotf declarat
*** 43912,43918 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43604,43609 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 43972,43978 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43663,43668 ----
*************** $as_echo_n "checking for logf declaratio
*** 44032,44038 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43722,43727 ----
*************** $as_echo_n "checking for log10f declarat
*** 44096,44102 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43785,43790 ----
*************** $as_echo_n "checking for modff declarati
*** 44160,44166 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43848,43853 ----
*************** $as_echo_n "checking for modf declaratio
*** 44220,44226 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43907,43912 ----
*************** $as_echo_n "checking for powf declaratio
*** 44280,44286 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 43966,43971 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 44340,44346 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44025,44030 ----
*************** $as_echo_n "checking for sincosf declara
*** 44404,44410 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44088,44093 ----
*************** $as_echo_n "checking for finitef declara
*** 44464,44470 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44147,44152 ----
*************** $as_echo_n "checking for long double tri
*** 44527,44533 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44209,44214 ----
*************** $as_echo_n "checking for long double rou
*** 44584,44590 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44265,44270 ----
*************** $as_echo_n "checking for isnanl declarat
*** 44643,44649 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44323,44328 ----
*************** $as_echo_n "checking for isinfl declarat
*** 44707,44713 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44386,44391 ----
*************** $as_echo_n "checking for atan2l declarat
*** 44771,44777 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44449,44454 ----
*************** $as_echo_n "checking for expl declaratio
*** 44831,44837 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44508,44513 ----
*************** $as_echo_n "checking for fabsl declarati
*** 44895,44901 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44571,44576 ----
*************** $as_echo_n "checking for fmodl declarati
*** 44959,44965 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44634,44639 ----
*************** $as_echo_n "checking for frexpl declarat
*** 45019,45025 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44693,44698 ----
*************** $as_echo_n "checking for hypotl declarat
*** 45079,45085 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44752,44757 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 45139,45145 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44811,44816 ----
*************** $as_echo_n "checking for logl declaratio
*** 45199,45205 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44870,44875 ----
*************** $as_echo_n "checking for log10l declarat
*** 45263,45269 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44933,44938 ----
*************** $as_echo_n "checking for modfl declarati
*** 45327,45333 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 44996,45001 ----
*************** $as_echo_n "checking for powl declaratio
*** 45387,45393 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45055,45060 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 45447,45453 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45114,45119 ----
*************** $as_echo_n "checking for sincosl declara
*** 45511,45517 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45177,45182 ----
*************** $as_echo_n "checking for finitel declara
*** 45571,45577 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45236,45241 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 45643,45649 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45307,45312 ----
*************** $as_echo_n "checking for quick_exit decl
*** 45701,45707 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45364,45369 ----
*************** $as_echo_n "checking for strtold declara
*** 45759,45765 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45421,45426 ----
*************** $as_echo_n "checking for strtof declarat
*** 45817,45823 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 45478,45483 ----
*************** $as_echo_n "checking for isinf declarati
*** 46598,46604 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46258,46263 ----
*************** $as_echo_n "checking for isnan declarati
*** 46662,46668 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46321,46326 ----
*************** $as_echo_n "checking for finite declarat
*** 46726,46732 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46384,46389 ----
*************** $as_echo_n "checking for sincos declarat
*** 46790,46796 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46447,46452 ----
*************** $as_echo_n "checking for fpclass declara
*** 46850,46856 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46506,46511 ----
*************** $as_echo_n "checking for qfpclass declar
*** 46914,46920 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46569,46574 ----
*************** $as_echo_n "checking for hypot declarati
*** 46978,46984 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46632,46637 ----
*************** $as_echo_n "checking for float trig func
*** 47037,47043 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46690,46695 ----
*************** $as_echo_n "checking for float round fun
*** 47094,47100 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46746,46751 ----
*************** $as_echo_n "checking for expf declaratio
*** 47153,47159 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46804,46809 ----
*************** $as_echo_n "checking for isnanf declarat
*** 47217,47223 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46867,46872 ----
*************** $as_echo_n "checking for isinff declarat
*** 47281,47287 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46930,46935 ----
*************** $as_echo_n "checking for atan2f declarat
*** 47345,47351 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 46993,46998 ----
*************** $as_echo_n "checking for fabsf declarati
*** 47405,47411 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47052,47057 ----
*************** $as_echo_n "checking for fmodf declarati
*** 47469,47475 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47115,47120 ----
*************** $as_echo_n "checking for frexpf declarat
*** 47529,47535 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47174,47179 ----
*************** $as_echo_n "checking for hypotf declarat
*** 47589,47595 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47233,47238 ----
*************** $as_echo_n "checking for ldexpf declarat
*** 47649,47655 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47292,47297 ----
*************** $as_echo_n "checking for logf declaratio
*** 47709,47715 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47351,47356 ----
*************** $as_echo_n "checking for log10f declarat
*** 47773,47779 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47414,47419 ----
*************** $as_echo_n "checking for modff declarati
*** 47837,47843 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47477,47482 ----
*************** $as_echo_n "checking for modf declaratio
*** 47897,47903 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47536,47541 ----
*************** $as_echo_n "checking for powf declaratio
*** 47957,47963 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47595,47600 ----
*************** $as_echo_n "checking for sqrtf declarati
*** 48017,48023 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47654,47659 ----
*************** $as_echo_n "checking for sincosf declara
*** 48081,48087 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47717,47722 ----
*************** $as_echo_n "checking for finitef declara
*** 48141,48147 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47776,47781 ----
*************** $as_echo_n "checking for long double tri
*** 48204,48210 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47838,47843 ----
*************** $as_echo_n "checking for long double rou
*** 48261,48267 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
      ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47894,47899 ----
*************** $as_echo_n "checking for isnanl declarat
*** 48320,48326 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 47952,47957 ----
*************** $as_echo_n "checking for isinfl declarat
*** 48384,48390 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48015,48020 ----
*************** $as_echo_n "checking for atan2l declarat
*** 48448,48454 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48078,48083 ----
*************** $as_echo_n "checking for expl declaratio
*** 48508,48514 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48137,48142 ----
*************** $as_echo_n "checking for fabsl declarati
*** 48572,48578 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48200,48205 ----
*************** $as_echo_n "checking for fmodl declarati
*** 48636,48642 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48263,48268 ----
*************** $as_echo_n "checking for frexpl declarat
*** 48696,48702 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48322,48327 ----
*************** $as_echo_n "checking for hypotl declarat
*** 48756,48762 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48381,48386 ----
*************** $as_echo_n "checking for ldexpl declarat
*** 48816,48822 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48440,48445 ----
*************** $as_echo_n "checking for logl declaratio
*** 48876,48882 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48499,48504 ----
*************** $as_echo_n "checking for log10l declarat
*** 48940,48946 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48562,48567 ----
*************** $as_echo_n "checking for modfl declarati
*** 49004,49010 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48625,48630 ----
*************** $as_echo_n "checking for powl declaratio
*** 49064,49070 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48684,48689 ----
*************** $as_echo_n "checking for sqrtl declarati
*** 49124,49130 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48743,48748 ----
*************** $as_echo_n "checking for sincosl declara
*** 49188,49194 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48806,48811 ----
*************** $as_echo_n "checking for finitel declara
*** 49248,49254 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48865,48870 ----
*************** $as_echo_n "checking for at_quick_exit d
*** 49320,49326 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48936,48941 ----
*************** $as_echo_n "checking for quick_exit decl
*** 49378,49384 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 48993,48998 ----
*************** $as_echo_n "checking for strtold declara
*** 49436,49442 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49050,49055 ----
*************** $as_echo_n "checking for strtof declarat
*** 49494,49500 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49107,49112 ----
*************** if ${glibcxx_cv_func_acosl_use+:} false;
*** 49599,49605 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49211,49216 ----
*************** if ${glibcxx_cv_func_asinl_use+:} false;
*** 49650,49656 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49261,49266 ----
*************** if ${glibcxx_cv_func_atan2l_use+:} false
*** 49701,49707 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49311,49316 ----
*************** if ${glibcxx_cv_func_atanl_use+:} false;
*** 49752,49758 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49361,49366 ----
*************** if ${glibcxx_cv_func_ceill_use+:} false;
*** 49803,49809 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49411,49416 ----
*************** if ${glibcxx_cv_func_cosl_use+:} false;
*** 49854,49860 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49461,49466 ----
*************** if ${glibcxx_cv_func_coshl_use+:} false;
*** 49905,49911 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49511,49516 ----
*************** if ${glibcxx_cv_func_expl_use+:} false;
*** 49956,49962 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49561,49566 ----
*************** if ${glibcxx_cv_func_fabsl_use+:} false;
*** 50007,50013 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49611,49616 ----
*************** if ${glibcxx_cv_func_floorl_use+:} false
*** 50058,50064 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49661,49666 ----
*************** if ${glibcxx_cv_func_fmodl_use+:} false;
*** 50109,50115 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49711,49716 ----
*************** if ${glibcxx_cv_func_frexpl_use+:} false
*** 50160,50166 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49761,49766 ----
*************** if ${glibcxx_cv_func_ldexpl_use+:} false
*** 50211,50217 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49811,49816 ----
*************** if ${glibcxx_cv_func_log10l_use+:} false
*** 50262,50268 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49861,49866 ----
*************** if ${glibcxx_cv_func_logl_use+:} false;
*** 50313,50319 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49911,49916 ----
*************** if ${glibcxx_cv_func_modfl_use+:} false;
*** 50364,50370 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 49961,49966 ----
*************** if ${glibcxx_cv_func_powl_use+:} false;
*** 50415,50421 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50011,50016 ----
*************** if ${glibcxx_cv_func_sinl_use+:} false;
*** 50466,50472 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50061,50066 ----
*************** if ${glibcxx_cv_func_sinhl_use+:} false;
*** 50517,50523 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50111,50116 ----
*************** if ${glibcxx_cv_func_sqrtl_use+:} false;
*** 50568,50574 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50161,50166 ----
*************** if ${glibcxx_cv_func_tanl_use+:} false;
*** 50619,50625 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50211,50216 ----
*************** if ${glibcxx_cv_func_tanhl_use+:} false;
*** 50670,50676 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50261,50266 ----
*************** if ${glibcxx_cv_func_hypotl_use+:} false
*** 50721,50727 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50311,50316 ----
*************** if ${glibcxx_cv_func_ldexpf_use+:} false
*** 50772,50778 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50361,50366 ----
*************** if ${glibcxx_cv_func_modff_use+:} false;
*** 50823,50829 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50411,50416 ----
*************** if ${glibcxx_cv_func_hypotf_use+:} false
*** 50874,50880 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50461,50466 ----
*************** if ${glibcxx_cv_func_frexpf_use+:} false
*** 50925,50931 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=c
  ac_cpp='$CPP $CPPFLAGS'
  ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 50511,50516 ----
*************** $as_echo "#define _GLIBCXX_X86_RDSEED 1"
*** 51970,51976 ****
  # Check for other random number APIs
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 51555,51560 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 52045,52051 ****
  
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 51629,51634 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 52121,52127 ****
  
    # Do checks for resource limit functions.
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 51704,51709 ----
*************** $as_echo_n "checking for setenv declarat
*** 52366,52372 ****
    $as_echo_n "(cached) " >&6
  else
  
- 
        ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 51948,51953 ----
*************** fi
*** 52459,52465 ****
    if test x$enable_libstdcxx_threads = xauto ||
       test x$enable_libstdcxx_threads = xyes; then
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 52040,52045 ----
*************** $as_echo_n "checking whether to build Fi
*** 52674,52680 ****
  $as_echo "$enable_libstdcxx_filesystem_ts" >&6; }
  
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 52254,52259 ----
*************** $as_echo "$glibcxx_cv_libbacktrace_atomi
*** 54158,54164 ****
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 54161 "configure"
  #include <stddef.h>
  int main()
  {
--- 53737,53743 ----
      CXXFLAGS='-O0 -S'
  
      cat > conftest.$ac_ext << EOF
! #line 53740 "configure"
  #include <stddef.h>
  int main()
  {
*************** $as_echo_n "checking how size_t is mangl
*** 54563,54570 ****
  if ${glibcxx_cv_size_t_mangling+:} false; then :
    $as_echo_n "(cached) " >&6
  else
! 
!     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
--- 54142,54148 ----
  if ${glibcxx_cv_size_t_mangling+:} false; then :
    $as_echo_n "(cached) " >&6
  else
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
*************** _ACEOF
*** 54578,54585 ****
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=m
  else
! 
!       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
--- 54156,54162 ----
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=m
  else
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
*************** _ACEOF
*** 54593,54600 ****
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=j
  else
! 
!         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
--- 54170,54176 ----
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=j
  else
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
*************** _ACEOF
*** 54608,54615 ****
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=y
  else
! 
!           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
--- 54184,54190 ----
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=y
  else
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
*************** _ACEOF
*** 54623,54630 ****
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=t
  else
! 
!             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
--- 54198,54204 ----
  if ac_fn_c_try_compile "$LINENO"; then :
    glibcxx_cv_size_t_mangling=t
  else
!   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
  /* end confdefs.h.  */
  
  int
*************** _ACEOF
*** 54843,54850 ****
  
  # For std::chrono formatters to use tm::tm_zone
  
- 
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54417,54422 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 54902,54908 ****
  
  # For src/c++11/shared_ptr.cc alignment.
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54474,54479 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 54951,54957 ****
  
  # For using init_priority in ios_init.cc
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54522,54527 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 55002,55008 ****
  
  # For __basic_file::native_handle()
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54572,54577 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 55060,55066 ****
  
  # For std::text_encoding
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54629,54634 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 55117,55123 ****
  
  # For std::is_debugger_present
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54685,54690 ----
*************** ac_compiler_gnu=$ac_cv_c_compiler_gnu
*** 55190,55196 ****
  
  # For std::print
  
- 
    ac_ext=cpp
  ac_cpp='$CXXCPP $CPPFLAGS'
  ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--- 54757,54762 ----
diff -Nrcpad gcc-17-20260621/libstdc++-v3/configure.ac gcc-17-20260628/libstdc++-v3/configure.ac
*** gcc-17-20260621/libstdc++-v3/configure.ac	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/configure.ac	Sun Jun 28 22:32:19 2026
*************** if test "x${with_newlib}" != "xyes" &&
*** 105,111 ****
      test "x$with_headers" != "xno"; then
    AC_LIBTOOL_DLOPEN
  fi
! AM_PROG_LIBTOOL
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
--- 105,111 ----
      test "x$with_headers" != "xno"; then
    AC_LIBTOOL_DLOPEN
  fi
! LT_INIT
  ACX_LT_HOST_FLAGS
  AC_SUBST(enable_shared)
  AC_SUBST(enable_static)
*************** AC_SUBST(glibcxx_compiler_pic_flag)
*** 150,156 ****
  AC_SUBST(glibcxx_compiler_shared_flag)
  
  # Override the libtool's pic_flag and pic_mode.
! # Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
  # NB: this impacts --with-pic and --without-pic.
  lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
  pic_mode='default'
--- 150,156 ----
  AC_SUBST(glibcxx_compiler_shared_flag)
  
  # Override the libtool's pic_flag and pic_mode.
! # Do this step after LT_INIT, but before AC_OUTPUT.
  # NB: this impacts --with-pic and --without-pic.
  lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
  pic_mode='default'
*************** dnl # rather than hardcoding that inform
*** 378,387 ****
        tanhl tanl])
  
      # Support for iconv in newlib is configurable.
!     AC_TRY_COMPILE([#include <newlib.h>], [
        #ifndef _ICONV_ENABLED
        #error
!       #endif], [ac_newlib_iconv_enabled=yes], [ac_newlib_iconv_enabled=no])
      if test "$ac_newlib_iconv_enabled" = yes; then
        AC_DEFINE(HAVE_ICONV)
      fi
--- 378,387 ----
        tanhl tanl])
  
      # Support for iconv in newlib is configurable.
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <newlib.h>]], [[
        #ifndef _ICONV_ENABLED
        #error
!       #endif]])], [ac_newlib_iconv_enabled=yes], [ac_newlib_iconv_enabled=no])
      if test "$ac_newlib_iconv_enabled" = yes; then
        AC_DEFINE(HAVE_ICONV)
      fi
*************** dnl # rather than hardcoding that inform
*** 461,470 ****
      AC_DEFINE(HAVE_TANHF)
  
      # Support for iconv in picolibc is configurable.
!     AC_TRY_COMPILE([#include <picolibc.h>], [
        #ifndef _ICONV_ENABLED
        #error
!       #endif], [ac_picolibc_iconv_enabled=yes], [ac_picolibc_iconv_enabled=no])
      if test "$ac_picolibc_iconv_enabled" = yes; then
        AC_DEFINE(HAVE_ICONV)
      fi
--- 461,470 ----
      AC_DEFINE(HAVE_TANHF)
  
      # Support for iconv in picolibc is configurable.
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <picolibc.h>]], [[
        #ifndef _ICONV_ENABLED
        #error
!       #endif]])], [ac_picolibc_iconv_enabled=yes], [ac_picolibc_iconv_enabled=no])
      if test "$ac_picolibc_iconv_enabled" = yes; then
        AC_DEFINE(HAVE_ICONV)
      fi
*************** dnl # rather than hardcoding that inform
*** 472,481 ****
      AC_DEFINE(HAVE_MEMALIGN)
  
      # Check for TLS
!     AC_TRY_COMPILE([#include <picolibc.h>], [
        #ifndef __THREAD_LOCAL_STORAGE
        #error
!       #endif], [ac_picolibc_tls_enabled=yes], [ac_picolibc_tls_enabled=no])
      if test "$ac_picolibc_tls_enabled" = yes; then
        AC_DEFINE(HAVE_TLS)
      fi
--- 472,481 ----
      AC_DEFINE(HAVE_MEMALIGN)
  
      # Check for TLS
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <picolibc.h>]], [[
        #ifndef __THREAD_LOCAL_STORAGE
        #error
!       #endif]])], [ac_picolibc_tls_enabled=yes], [ac_picolibc_tls_enabled=no])
      if test "$ac_picolibc_tls_enabled" = yes; then
        AC_DEFINE(HAVE_TLS)
      fi
*************** case "$target" in
*** 548,558 ****
    sparc*-*-linux* | \
    s390*-*-linux* | \
    alpha*-*-linux*)
!   AC_TRY_COMPILE(, [
  #if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
  #error no need for long double compatibility
  #endif
!   ], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
    if test "$ac_ldbl_compat" = yes; then
      AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1,
  	      [Define if compatibility should be provided for -mlong-double-64.])
--- 548,558 ----
    sparc*-*-linux* | \
    s390*-*-linux* | \
    alpha*-*-linux*)
!   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
  #if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
  #error no need for long double compatibility
  #endif
!   ]])], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
    if test "$ac_ldbl_compat" = yes; then
      AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1,
  	      [Define if compatibility should be provided for -mlong-double-64.])
*************** case "$target" in
*** 566,576 ****
                       [ac_ldbl_ieee128_in_libc=no])
          if test $ac_ldbl_ieee128_in_libc = yes; then
            # Determine which long double format is the compiler's default:
!           AC_TRY_COMPILE(, [
              #ifndef __LONG_DOUBLE_IEEE128__
              #error compiler defaults to ibm128
              #endif
!           ], [ac_ldbl_ieee128_default=yes], [ac_ldbl_ieee128_default=no])
            # Library objects should use default long double format.
            if test "$ac_ldbl_ieee128_default" = yes; then
              LONG_DOUBLE_128_FLAGS="-mno-gnu-attribute"
--- 566,576 ----
                       [ac_ldbl_ieee128_in_libc=no])
          if test $ac_ldbl_ieee128_in_libc = yes; then
            # Determine which long double format is the compiler's default:
!           AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
              #ifndef __LONG_DOUBLE_IEEE128__
              #error compiler defaults to ibm128
              #endif
!           ]])], [ac_ldbl_ieee128_default=yes], [ac_ldbl_ieee128_default=no])
            # Library objects should use default long double format.
            if test "$ac_ldbl_ieee128_default" = yes; then
              LONG_DOUBLE_128_FLAGS="-mno-gnu-attribute"
*************** AC_CONFIG_FILES([src/libbacktrace/backtr
*** 802,808 ****
  # append it here.  Only modify Makefiles that have just been created.
  #
  # Also, get rid of this simulated-VPATH thing that automake does.
! AC_CONFIG_FILES(AC_FOREACH([DIR], glibcxx_SUBDIRS, [DIR/Makefile ]),
    [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
--- 802,808 ----
  # append it here.  Only modify Makefiles that have just been created.
  #
  # Also, get rid of this simulated-VPATH thing that automake does.
! AC_CONFIG_FILES(m4_foreach_w([DIR], glibcxx_SUBDIRS, [DIR/Makefile ]),
    [cat > vpsed$$ << \_EOF
  s!`test -f '$<' || echo '$(srcdir)/'`!!
  _EOF
diff -Nrcpad gcc-17-20260621/libstdc++-v3/crossconfig.m4 gcc-17-20260628/libstdc++-v3/crossconfig.m4
*** gcc-17-20260621/libstdc++-v3/crossconfig.m4	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/crossconfig.m4	Sun Jun 28 22:32:19 2026
*************** dnl GLIBCXX_CHECK_MATH_DECL
*** 320,336 ****
  AC_DEFUN([GLIBCXX_CHECK_MATH_DECL], [
    AC_CACHE_CHECK([for $1 declaration],
      [glibcxx_cv_func_$1_use], [
!       AC_LANG_SAVE
!       AC_LANG_C
!       AC_TRY_COMPILE([
  #include <math.h>
  #ifdef HAVE_IEEEFP_H
  # include <ieeefp.h>
  #endif
  #undef $1
! ], [
    void (*f)(void) = (void (*)(void))$1;
! ], [glibcxx_cv_func_$1_use=yes
  ], [glibcxx_cv_func_$1_use=no])])
    if test "x$glibcxx_cv_func_$1_use" = xyes; then
      AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]))
--- 320,335 ----
  AC_DEFUN([GLIBCXX_CHECK_MATH_DECL], [
    AC_CACHE_CHECK([for $1 declaration],
      [glibcxx_cv_func_$1_use], [
!       AC_LANG_PUSH([C])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
  #include <math.h>
  #ifdef HAVE_IEEEFP_H
  # include <ieeefp.h>
  #endif
  #undef $1
! ]], [[
    void (*f)(void) = (void (*)(void))$1;
! ]])], [glibcxx_cv_func_$1_use=yes
  ], [glibcxx_cv_func_$1_use=no])])
    if test "x$glibcxx_cv_func_$1_use" = xyes; then
      AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1]))
diff -Nrcpad gcc-17-20260621/libstdc++-v3/doc/html/manual/debug_mode_design.html gcc-17-20260628/libstdc++-v3/doc/html/manual/debug_mode_design.html
*** gcc-17-20260621/libstdc++-v3/doc/html/manual/debug_mode_design.html	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/doc/html/manual/debug_mode_design.html	Sun Jun 28 22:32:19 2026
*************** test02()
*** 390,405 ****
    Library (STL), implemented by Cay S. Horstmann on top of the
    Hewlett-Packard STL. Though it inspired much work in this area, it
    has not been kept up-to-date for use with modern compilers or C++
!   standard library implementations.</p></li><li class="listitem"><p><a class="link" href="http://www.stlport.org/" target="_top">STLport</a>: STLport is a free
    implementation of the C++ standard library derived from the <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">SGI implementation</a>, and
!   ported to many other platforms. It includes a debug mode that uses a
    wrapper model (that in some ways inspired the libstdc++ debug mode
!   design), although at the time of this writing the debug mode is
!   somewhat incomplete and meets only the "Full user recompilation" (2)
    recompilation guarantee by requiring the user to link against a
    different library in debug mode vs. release mode.</p></li><li class="listitem"><p>Metrowerks CodeWarrior: The C++ standard library
!   that ships with Metrowerks CodeWarrior includes a debug mode. It is
    a full debug-mode implementation (including debugging for
!   CodeWarrior extensions) and is easy to use, although it meets only
    the "Full recompilation" (1) recompilation
!   guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
\ No newline at end of file
--- 390,407 ----
    Library (STL), implemented by Cay S. Horstmann on top of the
    Hewlett-Packard STL. Though it inspired much work in this area, it
    has not been kept up-to-date for use with modern compilers or C++
!   standard library implementations.</p></li><li class="listitem"><p>STLport: STLport was a free
    implementation of the C++ standard library derived from the <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">SGI implementation</a>, and
!   ported to many other platforms. It included a debug mode that used a
    wrapper model (that in some ways inspired the libstdc++ debug mode
!   design), although its debug mode was
!   somewhat incomplete and met only the "Full user recompilation" (2)
    recompilation guarantee by requiring the user to link against a
    different library in debug mode vs. release mode.</p></li><li class="listitem"><p>Metrowerks CodeWarrior: The C++ standard library
!   that shipped with Metrowerks CodeWarrior included a debug mode. It was
    a full debug-mode implementation (including debugging for
!   CodeWarrior extensions) and was easy to use, although it met only
    the "Full recompilation" (1) recompilation
!   guarantee.</p></li><li class="listitem"><p>The MSVC STL and LLVM libc++ implementations of the
!   C++ Standard Library both include some form of debug mode.
!   </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="debug_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
\ No newline at end of file
diff -Nrcpad gcc-17-20260621/libstdc++-v3/doc/xml/manual/debug_mode.xml gcc-17-20260628/libstdc++-v3/doc/xml/manual/debug_mode.xml
*** gcc-17-20260621/libstdc++-v3/doc/xml/manual/debug_mode.xml	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/doc/xml/manual/debug_mode.xml	Sun Jun 28 22:32:19 2026
*************** test02()
*** 883,903 ****
    has not been kept up-to-date for use with modern compilers or C++
    standard library implementations.</para></listitem>
  
!   <listitem><para><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.stlport.org/">STLport</link>: STLport is a free
    implementation of the C++ standard library derived from the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">SGI implementation</link>, and
!   ported to many other platforms. It includes a debug mode that uses a
    wrapper model (that in some ways inspired the libstdc++ debug mode
!   design), although at the time of this writing the debug mode is
!   somewhat incomplete and meets only the "Full user recompilation" (2)
    recompilation guarantee by requiring the user to link against a
    different library in debug mode vs. release mode.</para></listitem>
  
    <listitem><para>Metrowerks CodeWarrior: The C++ standard library
!   that ships with Metrowerks CodeWarrior includes a debug mode. It is
    a full debug-mode implementation (including debugging for
!   CodeWarrior extensions) and is easy to use, although it meets only
    the "Full recompilation" (1) recompilation
    guarantee.</para></listitem>
  </itemizedlist>
  
    </section>
--- 883,907 ----
    has not been kept up-to-date for use with modern compilers or C++
    standard library implementations.</para></listitem>
  
!   <listitem><para>STLport: STLport was a free
    implementation of the C++ standard library derived from the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">SGI implementation</link>, and
!   ported to many other platforms. It included a debug mode that used a
    wrapper model (that in some ways inspired the libstdc++ debug mode
!   design), although its debug mode was
!   somewhat incomplete and met only the "Full user recompilation" (2)
    recompilation guarantee by requiring the user to link against a
    different library in debug mode vs. release mode.</para></listitem>
  
    <listitem><para>Metrowerks CodeWarrior: The C++ standard library
!   that shipped with Metrowerks CodeWarrior included a debug mode. It was
    a full debug-mode implementation (including debugging for
!   CodeWarrior extensions) and was easy to use, although it met only
    the "Full recompilation" (1) recompilation
    guarantee.</para></listitem>
+ 
+   <listitem><para>The MSVC STL and LLVM libc++ implementations of the
+   C++ Standard Library both include some form of debug mode.
+   </para></listitem>
  </itemizedlist>
  
    </section>
diff -Nrcpad gcc-17-20260621/libstdc++-v3/include/bits/chrono.h gcc-17-20260628/libstdc++-v3/include/bits/chrono.h
*** gcc-17-20260621/libstdc++-v3/include/bits/chrono.h	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/include/bits/chrono.h	Sun Jun 28 22:32:19 2026
*************** _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)
*** 1356,1362 ****
     * for example `1.5e2ms` might be equivalent to
     * `chrono::duration<long double, chrono::milli>(1.5e2)`.
     *
!    * @since C+14
     * @ingroup chrono
     */
    inline namespace chrono_literals
--- 1356,1362 ----
     * for example `1.5e2ms` might be equivalent to
     * `chrono::duration<long double, chrono::milli>(1.5e2)`.
     *
!    * @since C++14
     * @ingroup chrono
     */
    inline namespace chrono_literals
diff -Nrcpad gcc-17-20260621/libstdc++-v3/include/bits/stl_bvector.h gcc-17-20260628/libstdc++-v3/include/bits/stl_bvector.h
*** gcc-17-20260621/libstdc++-v3/include/bits/stl_bvector.h	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/include/bits/stl_bvector.h	Sun Jun 28 22:32:19 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 116,122 ****
        return *this;
      }
  
! #if __cplusplus > 202002L
      constexpr const _Bit_reference&
      operator=(bool __x) const noexcept
      {
--- 116,122 ----
        return *this;
      }
  
! #if __glibcxx_ranges_zip // >= C++23
      constexpr const _Bit_reference&
      operator=(bool __x) const noexcept
      {
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 149,154 ****
--- 149,157 ----
      { *_M_p ^= _M_mask; }
  
  #if __cplusplus >= 201103L
+     // _GLIBCXX_RESOLVE_LIB_DEFECTS
+     // 3638. vector<bool>::swap(reference, reference) is useless
+ 
      _GLIBCXX20_CONSTEXPR
      friend void
      swap(_Bit_reference __x, _Bit_reference __y) noexcept
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 1266,1271 ****
--- 1269,1275 ----
        }
  
        // [23.2.5]/1, third-to-last entry in synopsis listing
+       _GLIBCXX26_DEPRECATED_SUGGEST("swap' invoked via ADL or 'std::ranges::swap")
        _GLIBCXX20_CONSTEXPR
        static void
        swap(reference __x, reference __y) _GLIBCXX_NOEXCEPT
diff -Nrcpad gcc-17-20260621/libstdc++-v3/include/bits/version.def gcc-17-20260628/libstdc++-v3/include/bits/version.def
*** gcc-17-20260621/libstdc++-v3/include/bits/version.def	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/include/bits/version.def	Sun Jun 28 22:32:19 2026
*************** stds[11] = ">= 201103L";
*** 2616,2623 ****
  stds[14] = ">= 201402L";
  stds[17] = ">= 201703L";
  stds[20] = ">= 202002L";
! stds[23] = ">= 202100L"; // Should be 202302L but Clang 16 uses 202101L
! stds[26] = ">  202302L"; // TODO: update when finalized
  
  // Local Variables:
  // compile-command: "autogen version.def"
--- 2616,2624 ----
  stds[14] = ">= 201402L";
  stds[17] = ">= 201703L";
  stds[20] = ">= 202002L";
! stds[23] = ">  202002L"; // >= 202302L but Clang 16 uses 202101L
! stds[26] = ">  202302L"; // >= 202603L but Clang 21 uses 202400L
! stds[29] = ">  202603L"; // GCC 17 uses 202700
  
  // Local Variables:
  // compile-command: "autogen version.def"
diff -Nrcpad gcc-17-20260621/libstdc++-v3/include/bits/version.h gcc-17-20260628/libstdc++-v3/include/bits/version.h
*** gcc-17-20260621/libstdc++-v3/include/bits/version.h	Sun Jun 21 22:32:19 2026
--- gcc-17-20260628/libstdc++-v3/include/bits/version.h	Sun Jun 28 22:32:22 2026
***************
*** 81,87 ****
  #undef __glibcxx_want_allocator_traits_is_always_equal
  
  #if !defined(__cpp_lib_allocate_at_least)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_allocate_at_least 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_allocate_at_least)
  #   define __cpp_lib_allocate_at_least 202302L
--- 81,87 ----
  #undef __glibcxx_want_allocator_traits_is_always_equal
  
  #if !defined(__cpp_lib_allocate_at_least)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_allocate_at_least 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_allocate_at_least)
  #   define __cpp_lib_allocate_at_least 202302L
***************
*** 959,965 ****
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
  #   define __cpp_lib_bind_back 202306L
  #  endif
! # elif (__cplusplus >= 202100L) && (__cpp_explicit_this_parameter)
  #  define __glibcxx_bind_back 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
  #   define __cpp_lib_bind_back 202202L
--- 959,965 ----
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
  #   define __cpp_lib_bind_back 202306L
  #  endif
! # elif (__cplusplus >  202002L) && (__cpp_explicit_this_parameter)
  #  define __glibcxx_bind_back 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_bind_back)
  #   define __cpp_lib_bind_back 202202L
***************
*** 1024,1030 ****
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
  #   define __cpp_lib_optional 202506L
  #  endif
! # elif (__cplusplus >= 202100L) && (__glibcxx_concepts)
  #  define __glibcxx_optional 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
  #   define __cpp_lib_optional 202110L
--- 1024,1030 ----
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
  #   define __cpp_lib_optional 202506L
  #  endif
! # elif (__cplusplus >  202002L) && (__glibcxx_concepts)
  #  define __glibcxx_optional 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_optional)
  #   define __cpp_lib_optional 202110L
***************
*** 1218,1224 ****
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
  #   define __cpp_lib_mdspan 202406L
  #  endif
! # elif (__cplusplus >= 202100L)
  #  define __glibcxx_mdspan 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
  #   define __cpp_lib_mdspan 202207L
--- 1218,1224 ----
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
  #   define __cpp_lib_mdspan 202406L
  #  endif
! # elif (__cplusplus >  202002L)
  #  define __glibcxx_mdspan 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
  #   define __cpp_lib_mdspan 202207L
***************
*** 1347,1353 ****
  #undef __glibcxx_want_constexpr_utility
  
  #if !defined(__cpp_lib_shift)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_shift 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
  #   define __cpp_lib_shift 202202L
--- 1347,1353 ----
  #undef __glibcxx_want_constexpr_utility
  
  #if !defined(__cpp_lib_shift)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_shift 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_shift)
  #   define __cpp_lib_shift 202202L
***************
*** 1367,1373 ****
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
  #   define __cpp_lib_ranges 202406L
  #  endif
! # elif (__cplusplus >= 202100L) && (__glibcxx_concepts)
  #  define __glibcxx_ranges 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
  #   define __cpp_lib_ranges 202302L
--- 1367,1373 ----
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
  #   define __cpp_lib_ranges 202406L
  #  endif
! # elif (__cplusplus >  202002L) && (__glibcxx_concepts)
  #  define __glibcxx_ranges 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges)
  #   define __cpp_lib_ranges 202302L
***************
*** 1427,1433 ****
  #undef __glibcxx_want_constexpr_tuple
  
  #if !defined(__cpp_lib_constexpr_memory)
! # if (__cplusplus >= 202100L) && (__cpp_constexpr_dynamic_alloc)
  #  define __glibcxx_constexpr_memory 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
  #   define __cpp_lib_constexpr_memory 202202L
--- 1427,1433 ----
  #undef __glibcxx_want_constexpr_tuple
  
  #if !defined(__cpp_lib_constexpr_memory)
! # if (__cplusplus >  202002L) && (__cpp_constexpr_dynamic_alloc)
  #  define __glibcxx_constexpr_memory 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_memory)
  #   define __cpp_lib_constexpr_memory 202202L
***************
*** 1597,1603 ****
  #undef __glibcxx_want_constexpr_vector
  
  #if !defined(__cpp_lib_constrained_equality)
! # if (__cplusplus >= 202100L) && (__glibcxx_three_way_comparison)
  #  define __glibcxx_constrained_equality 202411L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality)
  #   define __cpp_lib_constrained_equality 202411L
--- 1597,1603 ----
  #undef __glibcxx_want_constexpr_vector
  
  #if !defined(__cpp_lib_constrained_equality)
! # if (__cplusplus >  202002L) && (__glibcxx_three_way_comparison)
  #  define __glibcxx_constrained_equality 202411L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constrained_equality)
  #   define __cpp_lib_constrained_equality 202411L
***************
*** 1712,1718 ****
  #undef __glibcxx_want_syncbuf
  
  #if !defined(__cpp_lib_byteswap)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_byteswap 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap)
  #   define __cpp_lib_byteswap 202110L
--- 1712,1718 ----
  #undef __glibcxx_want_syncbuf
  
  #if !defined(__cpp_lib_byteswap)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_byteswap 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_byteswap)
  #   define __cpp_lib_byteswap 202110L
***************
*** 1722,1728 ****
  #undef __glibcxx_want_byteswap
  
  #if !defined(__cpp_lib_constexpr_charconv)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_constexpr_charconv 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_charconv)
  #   define __cpp_lib_constexpr_charconv 202207L
--- 1722,1728 ----
  #undef __glibcxx_want_byteswap
  
  #if !defined(__cpp_lib_constexpr_charconv)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_constexpr_charconv 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_charconv)
  #   define __cpp_lib_constexpr_charconv 202207L
***************
*** 1732,1738 ****
  #undef __glibcxx_want_constexpr_charconv
  
  #if !defined(__cpp_lib_constexpr_typeinfo)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_constexpr_typeinfo 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_typeinfo)
  #   define __cpp_lib_constexpr_typeinfo 202106L
--- 1732,1738 ----
  #undef __glibcxx_want_constexpr_charconv
  
  #if !defined(__cpp_lib_constexpr_typeinfo)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_constexpr_typeinfo 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_typeinfo)
  #   define __cpp_lib_constexpr_typeinfo 202106L
***************
*** 1742,1748 ****
  #undef __glibcxx_want_constexpr_typeinfo
  
  #if !defined(__cpp_lib_expected)
! # if (__cplusplus >= 202100L) && (__cpp_concepts >= 202002L)
  #  define __glibcxx_expected 202211L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected)
  #   define __cpp_lib_expected 202211L
--- 1742,1748 ----
  #undef __glibcxx_want_constexpr_typeinfo
  
  #if !defined(__cpp_lib_expected)
! # if (__cplusplus >  202002L) && (__cpp_concepts >= 202002L)
  #  define __glibcxx_expected 202211L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_expected)
  #   define __cpp_lib_expected 202211L
***************
*** 1752,1758 ****
  #undef __glibcxx_want_expected
  
  #if !defined(__cpp_lib_format_ranges)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_format_ranges 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_ranges)
  #   define __cpp_lib_format_ranges 202207L
--- 1752,1758 ----
  #undef __glibcxx_want_expected
  
  #if !defined(__cpp_lib_format_ranges)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_format_ranges 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_ranges)
  #   define __cpp_lib_format_ranges 202207L
***************
*** 1772,1778 ****
  #undef __glibcxx_want_format_path
  
  #if !defined(__cpp_lib_freestanding_algorithm)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_freestanding_algorithm 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_algorithm)
  #   define __cpp_lib_freestanding_algorithm 202311L
--- 1772,1778 ----
  #undef __glibcxx_want_format_path
  
  #if !defined(__cpp_lib_freestanding_algorithm)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_freestanding_algorithm 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_algorithm)
  #   define __cpp_lib_freestanding_algorithm 202311L
***************
*** 1782,1788 ****
  #undef __glibcxx_want_freestanding_algorithm
  
  #if !defined(__cpp_lib_freestanding_array)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_freestanding_array 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_array)
  #   define __cpp_lib_freestanding_array 202311L
--- 1782,1788 ----
  #undef __glibcxx_want_freestanding_algorithm
  
  #if !defined(__cpp_lib_freestanding_array)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_freestanding_array 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_array)
  #   define __cpp_lib_freestanding_array 202311L
***************
*** 1792,1798 ****
  #undef __glibcxx_want_freestanding_array
  
  #if !defined(__cpp_lib_freestanding_cstring)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_freestanding_cstring 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_cstring)
  #   define __cpp_lib_freestanding_cstring 202311L
--- 1792,1798 ----
  #undef __glibcxx_want_freestanding_array
  
  #if !defined(__cpp_lib_freestanding_cstring)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_freestanding_cstring 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_cstring)
  #   define __cpp_lib_freestanding_cstring 202311L
***************
*** 1802,1808 ****
  #undef __glibcxx_want_freestanding_cstring
  
  #if !defined(__cpp_lib_freestanding_expected)
! # if (__cplusplus >= 202100L) && (__cpp_lib_expected)
  #  define __glibcxx_freestanding_expected 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_expected)
  #   define __cpp_lib_freestanding_expected 202311L
--- 1802,1808 ----
  #undef __glibcxx_want_freestanding_cstring
  
  #if !defined(__cpp_lib_freestanding_expected)
! # if (__cplusplus >  202002L) && (__cpp_lib_expected)
  #  define __glibcxx_freestanding_expected 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_expected)
  #   define __cpp_lib_freestanding_expected 202311L
***************
*** 1812,1818 ****
  #undef __glibcxx_want_freestanding_expected
  
  #if !defined(__cpp_lib_freestanding_optional)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_freestanding_optional 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_optional)
  #   define __cpp_lib_freestanding_optional 202311L
--- 1812,1818 ----
  #undef __glibcxx_want_freestanding_expected
  
  #if !defined(__cpp_lib_freestanding_optional)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_freestanding_optional 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_optional)
  #   define __cpp_lib_freestanding_optional 202311L
***************
*** 1822,1828 ****
  #undef __glibcxx_want_freestanding_optional
  
  #if !defined(__cpp_lib_freestanding_string_view)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_freestanding_string_view 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_string_view)
  #   define __cpp_lib_freestanding_string_view 202311L
--- 1822,1828 ----
  #undef __glibcxx_want_freestanding_optional
  
  #if !defined(__cpp_lib_freestanding_string_view)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_freestanding_string_view 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_string_view)
  #   define __cpp_lib_freestanding_string_view 202311L
***************
*** 1832,1838 ****
  #undef __glibcxx_want_freestanding_string_view
  
  #if !defined(__cpp_lib_freestanding_variant)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_freestanding_variant 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_variant)
  #   define __cpp_lib_freestanding_variant 202311L
--- 1832,1838 ----
  #undef __glibcxx_want_freestanding_string_view
  
  #if !defined(__cpp_lib_freestanding_variant)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_freestanding_variant 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_freestanding_variant)
  #   define __cpp_lib_freestanding_variant 202311L
***************
*** 1842,1848 ****
  #undef __glibcxx_want_freestanding_variant
  
  #if !defined(__cpp_lib_invoke_r)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_invoke_r 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r)
  #   define __cpp_lib_invoke_r 202106L
--- 1842,1848 ----
  #undef __glibcxx_want_freestanding_variant
  
  #if !defined(__cpp_lib_invoke_r)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_invoke_r 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_invoke_r)
  #   define __cpp_lib_invoke_r 202106L
***************
*** 1852,1858 ****
  #undef __glibcxx_want_invoke_r
  
  #if !defined(__cpp_lib_associative_heterogeneous_erasure)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_associative_heterogeneous_erasure 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_associative_heterogeneous_erasure)
  #   define __cpp_lib_associative_heterogeneous_erasure 202110L
--- 1852,1858 ----
  #undef __glibcxx_want_invoke_r
  
  #if !defined(__cpp_lib_associative_heterogeneous_erasure)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_associative_heterogeneous_erasure 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_associative_heterogeneous_erasure)
  #   define __cpp_lib_associative_heterogeneous_erasure 202110L
***************
*** 1872,1878 ****
  #undef __glibcxx_want_associative_heterogeneous_insertion
  
  #if !defined(__cpp_lib_is_scoped_enum)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_is_scoped_enum 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum)
  #   define __cpp_lib_is_scoped_enum 202011L
--- 1872,1878 ----
  #undef __glibcxx_want_associative_heterogeneous_insertion
  
  #if !defined(__cpp_lib_is_scoped_enum)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_is_scoped_enum 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_scoped_enum)
  #   define __cpp_lib_is_scoped_enum 202011L
***************
*** 1882,1888 ****
  #undef __glibcxx_want_is_scoped_enum
  
  #if !defined(__cpp_lib_reference_from_temporary)
! # if (__cplusplus >= 202100L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary))
  #  define __glibcxx_reference_from_temporary 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_from_temporary)
  #   define __cpp_lib_reference_from_temporary 202202L
--- 1882,1888 ----
  #undef __glibcxx_want_is_scoped_enum
  
  #if !defined(__cpp_lib_reference_from_temporary)
! # if (__cplusplus >  202002L) && (__has_builtin(__reference_constructs_from_temporary) && __has_builtin(__reference_converts_from_temporary))
  #  define __glibcxx_reference_from_temporary 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_reference_from_temporary)
  #   define __cpp_lib_reference_from_temporary 202202L
***************
*** 1892,1898 ****
  #undef __glibcxx_want_reference_from_temporary
  
  #if !defined(__cpp_lib_containers_ranges)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_containers_ranges 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_containers_ranges)
  #   define __cpp_lib_containers_ranges 202202L
--- 1892,1898 ----
  #undef __glibcxx_want_reference_from_temporary
  
  #if !defined(__cpp_lib_containers_ranges)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_containers_ranges 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_containers_ranges)
  #   define __cpp_lib_containers_ranges 202202L
***************
*** 1902,1908 ****
  #undef __glibcxx_want_containers_ranges
  
  #if !defined(__cpp_lib_ranges_to_container)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_ranges_to_container 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_container)
  #   define __cpp_lib_ranges_to_container 202202L
--- 1902,1908 ----
  #undef __glibcxx_want_containers_ranges
  
  #if !defined(__cpp_lib_ranges_to_container)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_ranges_to_container 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_to_container)
  #   define __cpp_lib_ranges_to_container 202202L
***************
*** 1912,1918 ****
  #undef __glibcxx_want_ranges_to_container
  
  #if !defined(__cpp_lib_ranges_zip)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_zip 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip)
  #   define __cpp_lib_ranges_zip 202110L
--- 1912,1918 ----
  #undef __glibcxx_want_ranges_to_container
  
  #if !defined(__cpp_lib_ranges_zip)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_zip 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_zip)
  #   define __cpp_lib_ranges_zip 202110L
***************
*** 1922,1928 ****
  #undef __glibcxx_want_ranges_zip
  
  #if !defined(__cpp_lib_ranges_chunk)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_chunk 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk)
  #   define __cpp_lib_ranges_chunk 202202L
--- 1922,1928 ----
  #undef __glibcxx_want_ranges_zip
  
  #if !defined(__cpp_lib_ranges_chunk)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_chunk 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk)
  #   define __cpp_lib_ranges_chunk 202202L
***************
*** 1932,1938 ****
  #undef __glibcxx_want_ranges_chunk
  
  #if !defined(__cpp_lib_ranges_slide)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_slide 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide)
  #   define __cpp_lib_ranges_slide 202202L
--- 1932,1938 ----
  #undef __glibcxx_want_ranges_chunk
  
  #if !defined(__cpp_lib_ranges_slide)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_slide 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_slide)
  #   define __cpp_lib_ranges_slide 202202L
***************
*** 1942,1948 ****
  #undef __glibcxx_want_ranges_slide
  
  #if !defined(__cpp_lib_ranges_chunk_by)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_chunk_by 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by)
  #   define __cpp_lib_ranges_chunk_by 202202L
--- 1942,1948 ----
  #undef __glibcxx_want_ranges_slide
  
  #if !defined(__cpp_lib_ranges_chunk_by)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_chunk_by 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_chunk_by)
  #   define __cpp_lib_ranges_chunk_by 202202L
***************
*** 1952,1958 ****
  #undef __glibcxx_want_ranges_chunk_by
  
  #if !defined(__cpp_lib_ranges_join_with)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_join_with 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_join_with)
  #   define __cpp_lib_ranges_join_with 202202L
--- 1952,1958 ----
  #undef __glibcxx_want_ranges_chunk_by
  
  #if !defined(__cpp_lib_ranges_join_with)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_join_with 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_join_with)
  #   define __cpp_lib_ranges_join_with 202202L
***************
*** 1962,1968 ****
  #undef __glibcxx_want_ranges_join_with
  
  #if !defined(__cpp_lib_ranges_repeat)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_repeat 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat)
  #   define __cpp_lib_ranges_repeat 202207L
--- 1962,1968 ----
  #undef __glibcxx_want_ranges_join_with
  
  #if !defined(__cpp_lib_ranges_repeat)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_repeat 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_repeat)
  #   define __cpp_lib_ranges_repeat 202207L
***************
*** 1972,1978 ****
  #undef __glibcxx_want_ranges_repeat
  
  #if !defined(__cpp_lib_ranges_stride)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_stride 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride)
  #   define __cpp_lib_ranges_stride 202207L
--- 1972,1978 ----
  #undef __glibcxx_want_ranges_repeat
  
  #if !defined(__cpp_lib_ranges_stride)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_stride 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_stride)
  #   define __cpp_lib_ranges_stride 202207L
***************
*** 1982,1988 ****
  #undef __glibcxx_want_ranges_stride
  
  #if !defined(__cpp_lib_ranges_cartesian_product)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_cartesian_product 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cartesian_product)
  #   define __cpp_lib_ranges_cartesian_product 202207L
--- 1982,1988 ----
  #undef __glibcxx_want_ranges_stride
  
  #if !defined(__cpp_lib_ranges_cartesian_product)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_cartesian_product 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_cartesian_product)
  #   define __cpp_lib_ranges_cartesian_product 202207L
***************
*** 1992,1998 ****
  #undef __glibcxx_want_ranges_cartesian_product
  
  #if !defined(__cpp_lib_ranges_as_rvalue)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_as_rvalue 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_rvalue)
  #   define __cpp_lib_ranges_as_rvalue 202207L
--- 1992,1998 ----
  #undef __glibcxx_want_ranges_cartesian_product
  
  #if !defined(__cpp_lib_ranges_as_rvalue)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_as_rvalue 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_rvalue)
  #   define __cpp_lib_ranges_as_rvalue 202207L
***************
*** 2002,2008 ****
  #undef __glibcxx_want_ranges_as_rvalue
  
  #if !defined(__cpp_lib_ranges_as_const)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_as_const 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const)
  #   define __cpp_lib_ranges_as_const 202311L
--- 2002,2008 ----
  #undef __glibcxx_want_ranges_as_rvalue
  
  #if !defined(__cpp_lib_ranges_as_const)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_as_const 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const)
  #   define __cpp_lib_ranges_as_const 202311L
***************
*** 2012,2018 ****
  #undef __glibcxx_want_ranges_as_const
  
  #if !defined(__cpp_lib_ranges_enumerate)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_enumerate 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_enumerate)
  #   define __cpp_lib_ranges_enumerate 202302L
--- 2012,2018 ----
  #undef __glibcxx_want_ranges_as_const
  
  #if !defined(__cpp_lib_ranges_enumerate)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_enumerate 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_enumerate)
  #   define __cpp_lib_ranges_enumerate 202302L
***************
*** 2022,2028 ****
  #undef __glibcxx_want_ranges_enumerate
  
  #if !defined(__cpp_lib_ranges_fold)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_fold 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold)
  #   define __cpp_lib_ranges_fold 202207L
--- 2022,2028 ----
  #undef __glibcxx_want_ranges_enumerate
  
  #if !defined(__cpp_lib_ranges_fold)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_fold 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_fold)
  #   define __cpp_lib_ranges_fold 202207L
***************
*** 2032,2038 ****
  #undef __glibcxx_want_ranges_fold
  
  #if !defined(__cpp_lib_ranges_contains)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_contains 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains)
  #   define __cpp_lib_ranges_contains 202207L
--- 2032,2038 ----
  #undef __glibcxx_want_ranges_fold
  
  #if !defined(__cpp_lib_ranges_contains)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_contains 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_contains)
  #   define __cpp_lib_ranges_contains 202207L
***************
*** 2042,2048 ****
  #undef __glibcxx_want_ranges_contains
  
  #if !defined(__cpp_lib_ranges_iota)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_iota 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota)
  #   define __cpp_lib_ranges_iota 202202L
--- 2042,2048 ----
  #undef __glibcxx_want_ranges_contains
  
  #if !defined(__cpp_lib_ranges_iota)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_iota 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_iota)
  #   define __cpp_lib_ranges_iota 202202L
***************
*** 2052,2058 ****
  #undef __glibcxx_want_ranges_iota
  
  #if !defined(__cpp_lib_ranges_find_last)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_find_last 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_find_last)
  #   define __cpp_lib_ranges_find_last 202207L
--- 2052,2058 ----
  #undef __glibcxx_want_ranges_iota
  
  #if !defined(__cpp_lib_ranges_find_last)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_find_last 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_find_last)
  #   define __cpp_lib_ranges_find_last 202207L
***************
*** 2062,2068 ****
  #undef __glibcxx_want_ranges_find_last
  
  #if !defined(__cpp_lib_ranges_starts_ends_with)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_ranges_starts_ends_with 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_starts_ends_with)
  #   define __cpp_lib_ranges_starts_ends_with 202106L
--- 2062,2068 ----
  #undef __glibcxx_want_ranges_find_last
  
  #if !defined(__cpp_lib_ranges_starts_ends_with)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_ranges_starts_ends_with 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_starts_ends_with)
  #   define __cpp_lib_ranges_starts_ends_with 202106L
***************
*** 2082,2088 ****
  #undef __glibcxx_want_ranges_indices
  
  #if !defined(__cpp_lib_constexpr_bitset)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc)
  #  define __glibcxx_constexpr_bitset 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_bitset)
  #   define __cpp_lib_constexpr_bitset 202202L
--- 2082,2088 ----
  #undef __glibcxx_want_ranges_indices
  
  #if !defined(__cpp_lib_constexpr_bitset)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED && (__cpp_constexpr_dynamic_alloc)
  #  define __glibcxx_constexpr_bitset 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_constexpr_bitset)
  #   define __cpp_lib_constexpr_bitset 202202L
***************
*** 2092,2098 ****
  #undef __glibcxx_want_constexpr_bitset
  
  #if !defined(__cpp_lib_stdatomic_h)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_stdatomic_h 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h)
  #   define __cpp_lib_stdatomic_h 202011L
--- 2092,2098 ----
  #undef __glibcxx_want_constexpr_bitset
  
  #if !defined(__cpp_lib_stdatomic_h)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_stdatomic_h 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_stdatomic_h)
  #   define __cpp_lib_stdatomic_h 202011L
***************
*** 2122,2128 ****
  #undef __glibcxx_want_stdckdint_h
  
  #if !defined(__cpp_lib_adaptor_iterator_pair_constructor)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_adaptor_iterator_pair_constructor 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_adaptor_iterator_pair_constructor)
  #   define __cpp_lib_adaptor_iterator_pair_constructor 202106L
--- 2122,2128 ----
  #undef __glibcxx_want_stdckdint_h
  
  #if !defined(__cpp_lib_adaptor_iterator_pair_constructor)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_adaptor_iterator_pair_constructor 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_adaptor_iterator_pair_constructor)
  #   define __cpp_lib_adaptor_iterator_pair_constructor 202106L
***************
*** 2132,2138 ****
  #undef __glibcxx_want_adaptor_iterator_pair_constructor
  
  #if !defined(__cpp_lib_flat_map)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_flat_map 202511L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_map)
  #   define __cpp_lib_flat_map 202511L
--- 2132,2138 ----
  #undef __glibcxx_want_adaptor_iterator_pair_constructor
  
  #if !defined(__cpp_lib_flat_map)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_flat_map 202511L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_map)
  #   define __cpp_lib_flat_map 202511L
***************
*** 2142,2148 ****
  #undef __glibcxx_want_flat_map
  
  #if !defined(__cpp_lib_flat_set)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_flat_set 202511L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_set)
  #   define __cpp_lib_flat_set 202511L
--- 2142,2148 ----
  #undef __glibcxx_want_flat_map
  
  #if !defined(__cpp_lib_flat_set)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_flat_set 202511L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_flat_set)
  #   define __cpp_lib_flat_set 202511L
***************
*** 2172,2178 ****
  #undef __glibcxx_want_common_reference_wrapper
  
  #if !defined(__cpp_lib_formatters)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_formatters 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters)
  #   define __cpp_lib_formatters 202302L
--- 2172,2178 ----
  #undef __glibcxx_want_common_reference_wrapper
  
  #if !defined(__cpp_lib_formatters)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_formatters 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_formatters)
  #   define __cpp_lib_formatters 202302L
***************
*** 2182,2188 ****
  #undef __glibcxx_want_formatters
  
  #if !defined(__cpp_lib_forward_like)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_forward_like 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like)
  #   define __cpp_lib_forward_like 202207L
--- 2182,2188 ----
  #undef __glibcxx_want_formatters
  
  #if !defined(__cpp_lib_forward_like)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_forward_like 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_forward_like)
  #   define __cpp_lib_forward_like 202207L
***************
*** 2192,2198 ****
  #undef __glibcxx_want_forward_like
  
  #if !defined(__cpp_lib_generator)
! # if (__cplusplus >= 202100L) && (__glibcxx_coroutine && __cpp_sized_deallocation)
  #  define __glibcxx_generator 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator)
  #   define __cpp_lib_generator 202207L
--- 2192,2198 ----
  #undef __glibcxx_want_forward_like
  
  #if !defined(__cpp_lib_generator)
! # if (__cplusplus >  202002L) && (__glibcxx_coroutine && __cpp_sized_deallocation)
  #  define __glibcxx_generator 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_generator)
  #   define __cpp_lib_generator 202207L
***************
*** 2202,2208 ****
  #undef __glibcxx_want_generator
  
  #if !defined(__cpp_lib_ios_noreplace)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_ios_noreplace 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace)
  #   define __cpp_lib_ios_noreplace 202207L
--- 2202,2208 ----
  #undef __glibcxx_want_generator
  
  #if !defined(__cpp_lib_ios_noreplace)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_ios_noreplace 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_ios_noreplace)
  #   define __cpp_lib_ios_noreplace 202207L
***************
*** 2212,2218 ****
  #undef __glibcxx_want_ios_noreplace
  
  #if !defined(__cpp_lib_move_only_function)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_move_only_function 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_only_function)
  #   define __cpp_lib_move_only_function 202110L
--- 2212,2218 ----
  #undef __glibcxx_want_ios_noreplace
  
  #if !defined(__cpp_lib_move_only_function)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_move_only_function 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_move_only_function)
  #   define __cpp_lib_move_only_function 202110L
***************
*** 2242,2248 ****
  #undef __glibcxx_want_function_ref
  
  #if !defined(__cpp_lib_out_ptr)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_out_ptr 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr)
  #   define __cpp_lib_out_ptr 202311L
--- 2242,2248 ----
  #undef __glibcxx_want_function_ref
  
  #if !defined(__cpp_lib_out_ptr)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_out_ptr 202311L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_out_ptr)
  #   define __cpp_lib_out_ptr 202311L
***************
*** 2252,2258 ****
  #undef __glibcxx_want_out_ptr
  
  #if !defined(__cpp_lib_print)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_print 202406L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_print)
  #   define __cpp_lib_print 202406L
--- 2252,2258 ----
  #undef __glibcxx_want_out_ptr
  
  #if !defined(__cpp_lib_print)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_print 202406L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_print)
  #   define __cpp_lib_print 202406L
***************
*** 2262,2268 ****
  #undef __glibcxx_want_print
  
  #if !defined(__cpp_lib_spanstream)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (__glibcxx_span)
  #  define __glibcxx_spanstream 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream)
  #   define __cpp_lib_spanstream 202106L
--- 2262,2268 ----
  #undef __glibcxx_want_print
  
  #if !defined(__cpp_lib_spanstream)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED && (__glibcxx_span)
  #  define __glibcxx_spanstream 202106L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_spanstream)
  #   define __cpp_lib_spanstream 202106L
***************
*** 2272,2278 ****
  #undef __glibcxx_want_spanstream
  
  #if !defined(__cpp_lib_stacktrace)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE)
  #  define __glibcxx_stacktrace 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace)
  #   define __cpp_lib_stacktrace 202011L
--- 2272,2278 ----
  #undef __glibcxx_want_spanstream
  
  #if !defined(__cpp_lib_stacktrace)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED && (_GLIBCXX_HAVE_STACKTRACE)
  #  define __glibcxx_stacktrace 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_stacktrace)
  #   define __cpp_lib_stacktrace 202011L
***************
*** 2282,2288 ****
  #undef __glibcxx_want_stacktrace
  
  #if !defined(__cpp_lib_start_lifetime_as)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_start_lifetime_as 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_start_lifetime_as)
  #   define __cpp_lib_start_lifetime_as 202207L
--- 2282,2288 ----
  #undef __glibcxx_want_stacktrace
  
  #if !defined(__cpp_lib_start_lifetime_as)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_start_lifetime_as 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_start_lifetime_as)
  #   define __cpp_lib_start_lifetime_as 202207L
***************
*** 2292,2298 ****
  #undef __glibcxx_want_start_lifetime_as
  
  #if !defined(__cpp_lib_string_contains)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_string_contains 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains)
  #   define __cpp_lib_string_contains 202011L
--- 2292,2298 ----
  #undef __glibcxx_want_start_lifetime_as
  
  #if !defined(__cpp_lib_string_contains)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_string_contains 202011L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_contains)
  #   define __cpp_lib_string_contains 202011L
***************
*** 2302,2308 ****
  #undef __glibcxx_want_string_contains
  
  #if !defined(__cpp_lib_string_resize_and_overwrite)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED
  #  define __glibcxx_string_resize_and_overwrite 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_resize_and_overwrite)
  #   define __cpp_lib_string_resize_and_overwrite 202110L
--- 2302,2308 ----
  #undef __glibcxx_want_string_contains
  
  #if !defined(__cpp_lib_string_resize_and_overwrite)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED
  #  define __glibcxx_string_resize_and_overwrite 202110L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_string_resize_and_overwrite)
  #   define __cpp_lib_string_resize_and_overwrite 202110L
***************
*** 2322,2328 ****
  #undef __glibcxx_want_string_subview
  
  #if !defined(__cpp_lib_to_underlying)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_to_underlying 202102L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying)
  #   define __cpp_lib_to_underlying 202102L
--- 2322,2328 ----
  #undef __glibcxx_want_string_subview
  
  #if !defined(__cpp_lib_to_underlying)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_to_underlying 202102L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_to_underlying)
  #   define __cpp_lib_to_underlying 202102L
***************
*** 2337,2343 ****
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
  #   define __cpp_lib_tuple_like 202311L
  #  endif
! # elif (__cplusplus >= 202100L)
  #  define __glibcxx_tuple_like 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
  #   define __cpp_lib_tuple_like 202207L
--- 2337,2343 ----
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
  #   define __cpp_lib_tuple_like 202311L
  #  endif
! # elif (__cplusplus >  202002L)
  #  define __glibcxx_tuple_like 202207L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_tuple_like)
  #   define __cpp_lib_tuple_like 202207L
***************
*** 2347,2353 ****
  #undef __glibcxx_want_tuple_like
  
  #if !defined(__cpp_lib_unreachable)
! # if (__cplusplus >= 202100L)
  #  define __glibcxx_unreachable 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable)
  #   define __cpp_lib_unreachable 202202L
--- 2347,2353 ----
  #undef __glibcxx_want_tuple_like
  
  #if !defined(__cpp_lib_unreachable)
! # if (__cplusplus >  202002L)
  #  define __glibcxx_unreachable 202202L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_unreachable)
  #   define __cpp_lib_unreachable 202202L
***************
*** 2637,2643 ****
  #undef __glibcxx_want_define_static
  
  #if !defined(__cpp_lib_is_implicit_lifetime)
! # if (__cplusplus >= 202100L) && (__has_builtin(__builtin_is_implicit_lifetime))
  #  define __glibcxx_is_implicit_lifetime 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_implicit_lifetime)
  #   define __cpp_lib_is_implicit_lifetime 202302L
--- 2637,2643 ----
  #undef __glibcxx_want_define_static
  
  #if !defined(__cpp_lib_is_implicit_lifetime)
! # if (__cplusplus >  202002L) && (__has_builtin(__builtin_is_implicit_lifetime))
  #  define __glibcxx_is_implicit_lifetime 202302L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_is_implicit_lifetime)
  #   define __cpp_lib_is_implicit_lifetime 202302L
***************
*** 2721,2727 ****
  #undef __glibcxx_want_hardened_array
  
  #if !defined(__cpp_lib_hardened_basic_stacktrace)
! # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED && (defined(__glibcxx_stacktrace) && defined(_GLIBCXX_ASSERTIONS))
  #  define __glibcxx_hardened_basic_stacktrace 202502L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_hardened_basic_stacktrace)
  #   define __cpp_lib_hardened_basic_stacktrace 202502L
--- 2721,2727 ----
  #undef __glibcxx_want_hardened_array
  
  #if !defined(__cpp_lib_hardened_basic_stacktrace)
! # if (__cplusplus >  202002L) && _GLIBCXX_HOSTED && (defined(__glibcxx_stacktrace) && defined(_GLIBCXX_ASSERTIONS))
  #  define __glibcxx_hardened_basic_stacktrace 202502L
  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_hardened_basic_stacktrace)
  #   define __cpp_lib_hardened_basic_stacktrace 202502L
diff -Nrcpad gcc-17-20260621/libstdc++-v3/include/std/bitset gcc-17-20260628/libstdc++-v3/include/std/bitset
*** gcc-17-20260621/libstdc++-v3/include/std/bitset	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/include/std/bitset	Sun Jun 28 22:32:19 2026
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 908,913 ****
--- 908,927 ----
  	  return *this;
  	}
  
+ #if __glibcxx_ranges_zip // >= C++23
+ 	// _GLIBCXX_RESOLVE_LIB_DEFECTS
+ 	// 4187. bitset::reference should be const-assignable
+ 	constexpr const reference&
+ 	operator=(bool __x) const noexcept
+ 	{
+ 	  if (__x)
+ 	    *_M_wp |= _Base::_S_maskbit(_M_bpos);
+ 	  else
+ 	    *_M_wp &= ~_Base::_S_maskbit(_M_bpos);
+ 	  return *this;
+ 	}
+ #endif // C++23
+ 
  	// For b[i] = b[__j];
  	_GLIBCXX23_CONSTEXPR
  	reference&
*************** _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
*** 939,944 ****
--- 953,987 ----
  	  *_M_wp ^= _Base::_S_maskbit(_M_bpos);
  	  return *this;
  	}
+ 
+ #if __cplusplus >= 201103L
+ 	_GLIBCXX23_CONSTEXPR
+ 	friend void
+ 	swap(reference __x, reference __y) noexcept
+ 	{
+ 	  bool __tmp = __x;
+ 	  __x = __y;
+ 	  __y = __tmp;
+ 	}
+ 
+ 	_GLIBCXX23_CONSTEXPR
+ 	friend void
+ 	swap(reference __x, bool& __y) noexcept
+ 	{
+ 	  bool __tmp = __x;
+ 	  __x = __y;
+ 	  __y = __tmp;
+ 	}
+ 
+ 	_GLIBCXX23_CONSTEXPR
+ 	friend void
+ 	swap(bool& __x, reference __y) noexcept
+ 	{
+ 	  bool __tmp = __x;
+ 	  __x = __y;
+ 	  __y = __tmp;
+ 	}
+ #endif
        };
        friend class reference;
  
diff -Nrcpad gcc-17-20260621/libstdc++-v3/include/std/format gcc-17-20260628/libstdc++-v3/include/std/format
*** gcc-17-20260621/libstdc++-v3/include/std/format	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/include/std/format	Sun Jun 28 22:32:19 2026
*************** namespace __format
*** 5381,5387 ****
  // instantiates formatters for types stored in basic_format_arg, we can
  // support only single encoding, in this case unicode. This should cover
  // most common use cases.
! #if __cplusplus <= 202002L && _GLIBCXX_EXTERN_TEMPLATE > 0
      extern template _Sink_iter<char>
        __do_vformat_to<char, 1>(_Sink_iter<char>, string_view,
  			       format_context&);
--- 5381,5387 ----
  // instantiates formatters for types stored in basic_format_arg, we can
  // support only single encoding, in this case unicode. This should cover
  // most common use cases.
! #if __cplusplus <= 202002L && _GLIBCXX_EXTERN_TEMPLATE
      extern template _Sink_iter<char>
        __do_vformat_to<char, 1>(_Sink_iter<char>, string_view,
  			       format_context&);
diff -Nrcpad gcc-17-20260621/libstdc++-v3/linkage.m4 gcc-17-20260628/libstdc++-v3/linkage.m4
*** gcc-17-20260621/libstdc++-v3/linkage.m4	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/linkage.m4	Sun Jun 28 22:32:19 2026
*************** AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_1], [
*** 12,27 ****
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_SAVE
!       AC_LANG_CPLUSPLUS
!       AC_TRY_COMPILE([#include <math.h>
  		      #ifdef HAVE_IEEEFP_H
  		      #include <ieeefp.h>
  		      #endif
! 		     ],
!                      [ $1(0);],
                        [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_RESTORE
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
--- 12,26 ----
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_PUSH([C++])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>
  		      #ifdef HAVE_IEEEFP_H
  		      #include <ieeefp.h>
  		      #endif
! 		     ]],
!                      [[ $1(0);]])],
                        [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_POP([C++])
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
*************** AC_DEFUN([GLIBCXX_CHECK_MATH_DECLS_AND_L
*** 57,69 ****
    define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl
    AC_MSG_CHECKING([for $1 functions])
    AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
!     AC_LANG_SAVE
!     AC_LANG_CPLUSPLUS
!     AC_TRY_COMPILE([#include <math.h>],
!                    patsubst(funclist,[\w+],[\& (0);]),
                     [glibcxx_cv_func_$2_use=yes],
                     [glibcxx_cv_func_$2_use=no])
!     AC_LANG_RESTORE])
    AC_MSG_RESULT($glibcxx_cv_func_$2_use)
    if test x$glibcxx_cv_func_$2_use = x"yes"; then
      AC_CHECK_FUNCS(funclist)
--- 56,67 ----
    define([funclist],patsubst($3,\(\w+\)\(\W*\),\1 ))dnl
    AC_MSG_CHECKING([for $1 functions])
    AC_CACHE_VAL(glibcxx_cv_func_$2_use, [
!     AC_LANG_PUSH([C++])
!     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
!                    patsubst(funclist,[\w+],[\& (0);]))],
                     [glibcxx_cv_func_$2_use=yes],
                     [glibcxx_cv_func_$2_use=no])
!     AC_LANG_POP([C++])])
    AC_MSG_RESULT($glibcxx_cv_func_$2_use)
    if test x$glibcxx_cv_func_$2_use = x"yes"; then
      AC_CHECK_FUNCS(funclist)
*************** AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_2], [
*** 81,92 ****
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_SAVE
!       AC_LANG_CPLUSPLUS
!       AC_TRY_COMPILE([#include <math.h>],
!                      [ $1(0, 0);],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_RESTORE
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
--- 79,89 ----
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_PUSH([C++])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
!                      [[ $1(0, 0);]])],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_POP([C++])
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
*************** AC_DEFUN([GLIBCXX_CHECK_MATH_DECL_3], [
*** 122,133 ****
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_SAVE
!       AC_LANG_CPLUSPLUS
!       AC_TRY_COMPILE([#include <math.h>],
!                      [ $1(0, 0, 0);],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_RESTORE
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
--- 119,129 ----
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_PUSH([C++])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]],
!                      [[ $1(0, 0, 0);]])],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_POP([C++])
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
*************** dnl 2) has "C" linkage
*** 160,194 ****
  dnl
  dnl argument 1 is name of function to check
  dnl
- dnl ASSUMES argument is a stdlib function without parameters
- dnl
- dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0
- AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_0], [
-   AC_MSG_CHECKING([for $1 declaration])
-   if test x${glibcxx_cv_func_$1_use+set} != xset; then
-     AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
-       AC_LANG_SAVE
-       AC_LANG_CPLUSPLUS
-       AC_TRY_COMPILE([#include <stdlib.h>],
-                      [ $1();],
-                      [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
-       AC_LANG_RESTORE
-     ])
-   fi
-   AC_MSG_RESULT($glibcxx_cv_func_$1_use)
-   if test x$glibcxx_cv_func_$1_use = x"yes"; then
-     AC_CHECK_FUNCS($1)
-   fi
- ])
- 
- 
- dnl
- dnl Check to see if the (stdlib function) argument passed is
- dnl 1) declared when using the c++ compiler
- dnl 2) has "C" linkage
- dnl
- dnl argument 1 is name of function to check
- dnl
  dnl ASSUMES argument is a stdlib function with ONE parameter
  dnl
  dnl GLIBCXX_CHECK_STDLIB_DECL_AND_LINKAGE_1
--- 156,161 ----
*************** AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_
*** 196,207 ****
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_SAVE
!       AC_LANG_CPLUSPLUS
!       AC_TRY_COMPILE([#include <stdlib.h>],
!                      [ $1(0);],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_RESTORE
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
--- 163,173 ----
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_PUSH([C++])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>]],
!                      [[ $1(0);]])],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_POP([C++])
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
*************** AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_
*** 225,236 ****
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_SAVE
!       AC_LANG_CPLUSPLUS
!       AC_TRY_COMPILE([#include <stdlib.h>],
!                      [ $1(0, 0);],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_RESTORE
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
--- 191,201 ----
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_PUSH([C++])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>]],
!                      [[ $1(0, 0);]])],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_POP([C++])
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
*************** AC_DEFUN([GLIBCXX_CHECK_STDLIB_DECL_AND_
*** 254,265 ****
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_SAVE
!       AC_LANG_CPLUSPLUS
!       AC_TRY_COMPILE([#include <stdlib.h>],
!                      [ $1(0, 0, 0);],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_RESTORE
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
--- 219,229 ----
    AC_MSG_CHECKING([for $1 declaration])
    if test x${glibcxx_cv_func_$1_use+set} != xset; then
      AC_CACHE_VAL(glibcxx_cv_func_$1_use, [
!       AC_LANG_PUSH([C++])
!       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>]],
!                      [[ $1(0, 0, 0);]])],
                       [glibcxx_cv_func_$1_use=yes], [glibcxx_cv_func_$1_use=no])
!       AC_LANG_POP([C++])
      ])
    fi
    AC_MSG_RESULT($glibcxx_cv_func_$1_use)
diff -Nrcpad gcc-17-20260621/libstdc++-v3/src/c++11/random.cc gcc-17-20260628/libstdc++-v3/src/c++11/random.cc
*** gcc-17-20260621/libstdc++-v3/src/c++11/random.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/src/c++11/random.cc	Sun Jun 28 22:32:19 2026
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 197,203 ****
  #ifdef USE_LCG
      // TODO: use this to seed std::mt19937 engine too.
      unsigned
!     bad_seed(void* p) noexcept
      {
        // Poor quality seed based on hash of the current time and the address
        // of the object being seeded. Better than using the same default seed
--- 197,203 ----
  #ifdef USE_LCG
      // TODO: use this to seed std::mt19937 engine too.
      unsigned
!     bad_seed(const void* p) noexcept
      {
        // Poor quality seed based on hash of the current time and the address
        // of the object being seeded. Better than using the same default seed
*************** namespace std _GLIBCXX_VISIBILITY(defaul
*** 253,259 ****
  
      inline Which
      which_source(random_device::result_type (*func [[maybe_unused]])(void*),
! 		 void* file [[maybe_unused]])
      {
  #ifdef _GLIBCXX_USE_CRT_RAND_S
        if (func == &__winxp_rand_s)
--- 253,259 ----
  
      inline Which
      which_source(random_device::result_type (*func [[maybe_unused]])(void*),
! 		 const void* file [[maybe_unused]])
      {
  #ifdef _GLIBCXX_USE_CRT_RAND_S
        if (func == &__winxp_rand_s)
diff -Nrcpad gcc-17-20260621/libstdc++-v3/src/c++20/format.cc gcc-17-20260628/libstdc++-v3/src/c++20/format.cc
*** gcc-17-20260621/libstdc++-v3/src/c++20/format.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/src/c++20/format.cc	Sun Jun 28 22:32:19 2026
*************** struct mutex
*** 58,63 ****
--- 58,72 ----
  };
  #endif
  
+ #ifdef _GLIBCXX_HAVE_ICONV
+ // Detect whether type T* can be used as the second argument to iconv.
+ // SUSv2 used 'const char**', but POSIX.1-2003 uses 'char**'.
+ template<typename T>
+   concept iconv_input = requires (::iconv_t cd, T in, size_t n, char** out) {
+     ::iconv(cd, &in, &n, out, &n);
+   };
+ #endif
+ 
  // A non-standard locale::facet that caches the locale's std::text_encoding
  // and an iconv descriptor for converting from that encoding to UTF-8.
  struct __encoding : locale::facet
*************** struct __encoding : locale::facet
*** 111,118 ****
      bool done = false;
  
      auto overwrite = [&](char* p, size_t n) {
        auto inbytes
! 	= const_cast<char*>(input.data()) + input.size() - inbytesleft;
        char* outbytes = p + written;
        size_t outbytesleft = n - written;
        size_t res = ::iconv(_M_cd, &inbytes, &inbytesleft,
--- 120,128 ----
      bool done = false;
  
      auto overwrite = [&](char* p, size_t n) {
+       using input_t = __conditional_t<iconv_input<char*>, char*, const char*>;
        auto inbytes
! 	= const_cast<input_t>(input.data()) + input.size() - inbytesleft;
        char* outbytes = p + written;
        size_t outbytesleft = n - written;
        size_t res = ::iconv(_M_cd, &inbytes, &inbytesleft,
diff -Nrcpad gcc-17-20260621/libstdc++-v3/src/c++23/Makefile.am gcc-17-20260628/libstdc++-v3/src/c++23/Makefile.am
*** gcc-17-20260621/libstdc++-v3/src/c++23/Makefile.am	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/src/c++23/Makefile.am	Sun Jun 28 22:32:19 2026
*************** includebits_DATA = std.cc std.compat.cc
*** 37,44 ****
  # The manifest to be installed uses the relative path between install dirs.
  libstdc++.modules.json: libstdc++.modules.json.in
  	relpath=$$($(toplevel_srcdir)/contrib/relpath.sh \
! 		   $(abspath $(toolexeclibdir)) \
! 		   $(abspath $(includebitsdir))) && \
  	sed "s,@MODPATH@,$$relpath," $< > $@
  
  # The uninstalled manifest uses the relative path to builddir.
--- 37,44 ----
  # The manifest to be installed uses the relative path between install dirs.
  libstdc++.modules.json: libstdc++.modules.json.in
  	relpath=$$($(toplevel_srcdir)/contrib/relpath.sh \
! 		    $(toolexeclibdir) \
! 		    $(includebitsdir)) && \
  	sed "s,@MODPATH@,$$relpath," $< > $@
  
  # The uninstalled manifest uses the relative path to builddir.
*************** std.compat.cc: std.compat.cc.in std-clib
*** 57,63 ****
  # Also put the interface units in the build-includes bits directory.
  stamp-modules-bits: $(includebits_DATA)
  	@-mkdir -p $(top_builddir)/include/bits
! 	-cd $(top_builddir)/include/bits && $(LN_S) $(abspath $?) . 2>/dev/null
  	@$(STAMP) $@
  
  all-local: stamp-module-manifest stamp-modules-bits
--- 57,65 ----
  # Also put the interface units in the build-includes bits directory.
  stamp-modules-bits: $(includebits_DATA)
  	@-mkdir -p $(top_builddir)/include/bits
! 	-for f in $(includebits_DATA); do \
! 	  $(LN_S) $(abs_builddir)/$$f $(top_builddir)/include/bits; \
! 	done 2>/dev/null
  	@$(STAMP) $@
  
  all-local: stamp-module-manifest stamp-modules-bits
diff -Nrcpad gcc-17-20260621/libstdc++-v3/src/c++23/Makefile.in gcc-17-20260628/libstdc++-v3/src/c++23/Makefile.in
*** gcc-17-20260621/libstdc++-v3/src/c++23/Makefile.in	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/src/c++23/Makefile.in	Sun Jun 28 22:32:19 2026
*************** uninstall-am: uninstall-includebitsDATA
*** 845,852 ****
  # The manifest to be installed uses the relative path between install dirs.
  libstdc++.modules.json: libstdc++.modules.json.in
  	relpath=$$($(toplevel_srcdir)/contrib/relpath.sh \
! 		   $(abspath $(toolexeclibdir)) \
! 		   $(abspath $(includebitsdir))) && \
  	sed "s,@MODPATH@,$$relpath," $< > $@
  
  # The uninstalled manifest uses the relative path to builddir.
--- 845,852 ----
  # The manifest to be installed uses the relative path between install dirs.
  libstdc++.modules.json: libstdc++.modules.json.in
  	relpath=$$($(toplevel_srcdir)/contrib/relpath.sh \
! 		    $(toolexeclibdir) \
! 		    $(includebitsdir)) && \
  	sed "s,@MODPATH@,$$relpath," $< > $@
  
  # The uninstalled manifest uses the relative path to builddir.
*************** std.compat.cc: std.compat.cc.in std-clib
*** 865,871 ****
  # Also put the interface units in the build-includes bits directory.
  stamp-modules-bits: $(includebits_DATA)
  	@-mkdir -p $(top_builddir)/include/bits
! 	-cd $(top_builddir)/include/bits && $(LN_S) $(abspath $?) . 2>/dev/null
  	@$(STAMP) $@
  
  all-local: stamp-module-manifest stamp-modules-bits
--- 865,873 ----
  # Also put the interface units in the build-includes bits directory.
  stamp-modules-bits: $(includebits_DATA)
  	@-mkdir -p $(top_builddir)/include/bits
! 	-for f in $(includebits_DATA); do \
! 	  $(LN_S) $(abs_builddir)/$$f $(top_builddir)/include/bits; \
! 	done 2>/dev/null
  	@$(STAMP) $@
  
  all-local: stamp-module-manifest stamp-modules-bits
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/20_util/bitset/access/range_proxy.cc gcc-17-20260628/libstdc++-v3/testsuite/20_util/bitset/access/range_proxy.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/20_util/bitset/access/range_proxy.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libstdc++-v3/testsuite/20_util/bitset/access/range_proxy.cc	Sun Jun 28 22:32:19 2026
***************
*** 0 ****
--- 1,95 ----
+ // { dg-do run { target c++20 } }
+ 
+ #include <bitset>
+ #include <concepts>
+ #include <iterator>
+ #include <version>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_swap()
+ {
+   std::bitset<2> v("01");
+   std::ranges::swap(v[0], v[1]);
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ 
+   bool b = true;
+   std::ranges::swap(v[0], b);
+   VERIFY( v[0] == true );
+   VERIFY( b == false );
+ 
+   std::ranges::swap(b, v[1]);
+   VERIFY( v[1] == false );
+   VERIFY( b == true );
+ }
+ 
+ template<size_t N>
+ struct bitset_iterator
+ {
+   using value_type = bool;
+   using reference = std::bitset<2>::reference;
+   using iterator_category = std::forward_iterator_tag;
+   using difference_type = std::ptrdiff_t;
+ 
+   bitset_iterator() = default;
+   bitset_iterator(std::bitset<N>& c) noexcept : cont(&c) {}
+ 
+   reference operator*() const noexcept
+   { return (*cont)[pos]; }
+ 
+   bitset_iterator& operator++() {
+    ++pos;
+    return *this;
+   }
+ 
+   bitset_iterator operator++(int) {
+     auto tmp = *this;
+     ++pos;
+     return *this;
+   };
+ 
+   friend bool operator==(bitset_iterator, bitset_iterator) = default;
+ 
+ private:
+   std::bitset<N>* cont = nullptr;
+   size_t pos = 0;
+ };
+ 
+ void
+ test_iter_swap()
+ {
+   std::bitset<2> v("01");
+   auto it1 = bitset_iterator<2>(v);
+   auto it2 = std::ranges::next(it1);
+   std::ranges::iter_swap(it1, it2);
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ 
+   bool b = true, *p = &b;
+   std::ranges::iter_swap(it1, p);
+   VERIFY( v[0] == true );
+   VERIFY( b == false );
+ 
+   std::ranges::iter_swap(p, it2);
+   VERIFY( v[1] == false );
+   VERIFY( b == true );
+ }
+ 
+ #if __cpp_lib_ranges_zip
+ static_assert( std::indirectly_writable<bitset_iterator<2>, bool> );
+ static_assert( std::indirectly_writable<bitset_iterator<2>,
+ 					std::bitset<2>::reference> );
+ 
+ #else
+ static_assert( !std::indirectly_writable<bitset_iterator<2>, bool> );
+ static_assert( !std::indirectly_writable<bitset_iterator<2>,
+ 					 std::bitset<2>::reference> );
+ #endif
+ 
+ int
+ main()
+ {
+   test_swap();
+   test_iter_swap();
+ }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/20_util/bitset/access/ref_swap.cc gcc-17-20260628/libstdc++-v3/testsuite/20_util/bitset/access/ref_swap.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/20_util/bitset/access/ref_swap.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libstdc++-v3/testsuite/20_util/bitset/access/ref_swap.cc	Sun Jun 28 22:32:19 2026
***************
*** 0 ****
--- 1,28 ----
+ // { dg-do run { target c++11 } }
+ 
+ #include <bitset>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_friend()
+ {
+   std::bitset<2> v("01");
+   swap(v[0], v[1]);
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ 
+   bool b = true;
+   swap(v[0], b);
+   VERIFY( v[0] == true );
+   VERIFY( b == false );
+ 
+   swap(b, v[1]);
+   VERIFY( v[1] == false );
+   VERIFY( b == true );
+ }
+ 
+ int
+ main()
+ {
+   test_friend();
+ }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/20_util/polymorphic_allocator/at_least.cc gcc-17-20260628/libstdc++-v3/testsuite/20_util/polymorphic_allocator/at_least.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/20_util/polymorphic_allocator/at_least.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libstdc++-v3/testsuite/20_util/polymorphic_allocator/at_least.cc	Sun Jun 28 22:32:20 2026
***************
*** 0 ****
--- 1,24 ----
+ // { dg-do run { target c++23 } }
+ 
+ #include <memory_resource>
+ #include <testsuite_hooks.h>
+ 
+ void
+ alloc_at_least()
+ {
+   struct A { char a; };
+   using alloc_A = std::pmr::polymorphic_allocator<A>;
+   using traits_A = std::allocator_traits<alloc_A>;
+   alloc_A alloc_a;
+   // This just forwards to alloc_a::allocate:
+   std::allocation_result result = traits_A::allocate_at_least(alloc_a, 1);
+   VERIFY(result.count == 1);
+   VERIFY(result.ptr != nullptr);
+   auto [pointer, count] = result;
+   traits_A::deallocate(alloc_a, pointer, count);
+ }
+ 
+ int main()
+ {
+   alloc_at_least();
+ }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/range_proxy.cc gcc-17-20260628/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/range_proxy.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/range_proxy.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/range_proxy.cc	Sun Jun 28 22:32:20 2026
***************
*** 0 ****
--- 1,63 ----
+ // { dg-do run { target c++20 } }
+ 
+ #include <vector>
+ #include <concepts>
+ #include <iterator>
+ #include <version>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_swap()
+ {
+   std::vector<bool> v{true, false};
+   std::ranges::swap(v[0], v[1]);
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ 
+   bool b = true;
+   std::ranges::swap(v[0], b);
+   VERIFY( v[0] == true );
+   VERIFY( b == false );
+ 
+   std::ranges::swap(b, v[1]);
+   VERIFY( v[1] == false );
+   VERIFY( b == true );
+ }
+ 
+ void
+ test_iter_swap()
+ {
+   std::vector<bool> v{true, false};
+   auto it1 = v.begin();
+   auto it2 = std::ranges::next(it1);
+   std::ranges::iter_swap(it1, it2);
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ 
+   bool b = true, *p = &b;
+   std::ranges::iter_swap(it1, p);
+   VERIFY( v[0] == true );
+   VERIFY( b == false );
+ 
+   std::ranges::iter_swap(p, it2);
+   VERIFY( v[1] == false );
+   VERIFY( b == true );
+ }
+ 
+ #if __cpp_lib_ranges_zip
+ static_assert( std::indirectly_writable<std::vector<bool>::iterator, bool> );
+ static_assert( std::indirectly_writable<std::vector<bool>::iterator,
+ 					std::vector<bool>::reference> );
+ 
+ #else
+ static_assert( !std::indirectly_writable<std::vector<bool>::iterator, bool> );
+ static_assert( !std::indirectly_writable<std::vector<bool>::iterator,
+ 					 std::vector<bool>::reference> );
+ #endif
+ 
+ int
+ main()
+ {
+   test_swap();
+   test_iter_swap();
+ }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/ref_swap.cc gcc-17-20260628/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/ref_swap.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/ref_swap.cc	Thu Jan  1 00:00:00 1970
--- gcc-17-20260628/libstdc++-v3/testsuite/23_containers/vector/bool/element_access/ref_swap.cc	Sun Jun 28 22:32:20 2026
***************
*** 0 ****
--- 1,40 ----
+ // { dg-do run { target c++11 } }
+ 
+ #include <vector>
+ #include <testsuite_hooks.h>
+ 
+ void
+ test_friend()
+ {
+   std::vector<bool> v{true, false};
+   swap(v[0], v[1]);
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ 
+   bool b = true;
+   swap(v[0], b);
+   VERIFY( v[0] == true );
+   VERIFY( b == false );
+ 
+   swap(b, v[1]);
+   VERIFY( v[1] == false );
+   VERIFY( b == true );
+ }
+ 
+ void
+ test_static()
+ {
+ #ifndef _GLIBCXX_DEBUG
+   std::vector<bool> v{true, false};
+   std::vector<bool>::swap(v[0], v[1]); // { dg-warning "deprecated" "::swap" { target { c++26 && { ! debug_mode } } } }
+   VERIFY( v[0] == false );
+   VERIFY( v[1] == true );
+ #endif
+ }
+ 
+ int
+ main()
+ {
+   test_friend();
+   test_static();
+ }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc gcc-17-20260628/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/23_containers/vector/bool/modifiers/swap/constexpr.cc	Sun Jun 28 22:32:20 2026
*************** constexpr bool
*** 53,59 ****
  test_reference_swap()
  {
    std::vector<bool> v1 = {true, false, true};
!   std::vector<bool>::swap(v1[0], v1[1]);
  
    VERIFY(v1[0] == false);
    VERIFY(v1[1] == true);
--- 53,59 ----
  test_reference_swap()
  {
    std::vector<bool> v1 = {true, false, true};
!   std::vector<bool>::swap(v1[0], v1[1]); // { dg-warning "deprecated" "::swap" { target { c++26 && { ! debug_mode } } } }
  
    VERIFY(v1[0] == false);
    VERIFY(v1[1] == true);
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/1.cc	Sun Jun 28 22:32:20 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run { target c++17 } }
  // { dg-require-filesystem-ts "" }
+ // { dg-require-target-fs-symlinks "" }
  
  #include <filesystem>
  #include <testsuite_hooks.h>
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/2.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/2.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/2.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/2.cc	Sun Jun 28 22:32:20 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run { target c++17 } }
  // { dg-require-filesystem-ts "" }
+ // { dg-require-target-fs-symlinks "" }
  
  #include <filesystem>
  #include <testsuite_hooks.h>
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/3.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/3.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/3.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/3.cc	Sun Jun 28 22:32:20 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run { target c++17 } }
  // { dg-require-filesystem-ts "" }
+ // { dg-require-target-fs-symlinks "" }
  
  #include <filesystem>
  #include <testsuite_hooks.h>
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/4.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/4.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/4.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/copy_symlink/4.cc	Sun Jun 28 22:32:20 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run { target c++17 } }
  // { dg-require-filesystem-ts "" }
+ // { dg-require-target-fs-symlinks "" }
  
  #include <filesystem>
  #include <testsuite_hooks.h>
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/pr118158.cc	Sun Jun 28 22:32:20 2026
***************
*** 1,5 ****
--- 1,6 ----
  // { dg-do run { target c++17 } }
  // { dg-require-filesystem-ts "" }
+ // { dg-require-mkfifo "" }
  
  #include <filesystem>
  #include <testsuite_fs.h>
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/status.cc	Sun Jun 28 22:32:20 2026
*************** test04()
*** 99,104 ****
--- 99,125 ----
    VERIFY( is_directory(st) );
  }
  
+ void
+ test05()
+ {
+ #ifndef NO_SYMLINKS
+   struct scoped_dir
+   {
+     scoped_dir() { fs::create_directory(d); }
+     ~scoped_dir() { remove_all(d); }
+     fs::path d = __gnu_test::nonexistent_path();
+     fs::path operator/(const char* p) const { return d/p; }
+   };
+   const scoped_dir d;
+   fs::create_directory(d/"dir");
+   const fs::path link = d/"link";
+   fs::create_directory_symlink("dir", link);
+   auto st = fs::status(link);
+   VERIFY( is_directory(st) );
+   VERIFY( ! is_symlink(st) );
+ #endif
+ }
+ 
  int
  main()
  {
*************** main()
*** 106,109 ****
--- 127,131 ----
    test02();
    test03();
    test04();
+   test05();
  }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc
*** gcc-17-20260621/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc	Sun Jun 21 22:32:16 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/27_io/filesystem/operations/symlink_status.cc	Sun Jun 28 22:32:20 2026
*************** test04()
*** 125,130 ****
--- 125,151 ----
    VERIFY( is_directory(st) );
  }
  
+ void
+ test05()
+ {
+ #ifndef NO_SYMLINKS
+   struct scoped_dir
+   {
+     scoped_dir() { fs::create_directory(d); }
+     ~scoped_dir() { remove_all(d); }
+     fs::path d = __gnu_test::nonexistent_path();
+     fs::path operator/(const char* p) const { return d/p; }
+   };
+   const scoped_dir d;
+   fs::create_directory(d/"dir");
+   const fs::path link = d/"link";
+   fs::create_directory_symlink("dir", link);
+   auto st = fs::symlink_status(link);
+   VERIFY( ! is_directory(st) );
+   VERIFY( is_symlink(st) );
+ #endif
+ }
+ 
  int
  main()
  {
*************** main()
*** 132,135 ****
--- 153,157 ----
    test02();
    test03();
    test04();
+   test05();
  }
diff -Nrcpad gcc-17-20260621/libstdc++-v3/testsuite/lib/libstdc++.exp gcc-17-20260628/libstdc++-v3/testsuite/lib/libstdc++.exp
*** gcc-17-20260621/libstdc++-v3/testsuite/lib/libstdc++.exp	Sun Jun 21 22:32:17 2026
--- gcc-17-20260628/libstdc++-v3/testsuite/lib/libstdc++.exp	Sun Jun 28 22:32:20 2026
*************** if { [info procs saved-dg-test] == [list
*** 476,482 ****
  # These should be adjusted whenever the compiler's default -std is updated
  # or a newer C++ effective target is added.
  set v3_default_std 20
! set v3_max_std 26
  
  # Find the minimum standard required by a test, if higher than $v3_default_std.
  proc v3-minimum-std { test } {
--- 476,482 ----
  # These should be adjusted whenever the compiler's default -std is updated
  # or a newer C++ effective target is added.
  set v3_default_std 20
! set v3_max_std 29
  
  # Find the minimum standard required by a test, if higher than $v3_default_std.
  proc v3-minimum-std { test } {
diff -Nrcpad gcc-17-20260621/lto-plugin/ChangeLog gcc-17-20260628/lto-plugin/ChangeLog
*** gcc-17-20260621/lto-plugin/ChangeLog	Sun Jun 21 22:32:17 2026
--- gcc-17-20260628/lto-plugin/ChangeLog	Sun Jun 28 22:32:20 2026
***************
*** 1,3 ****
--- 1,18 ----
+ 2026-06-22  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* lto-plugin.c (process_symtab): char *s -> const char *s.
+ 	(process_symtab_extension): Ditto.
+ 
+ 2026-06-22  Filip Kastl  <fkastl@suse.cz>
+ 
+ 	* lto-plugin.c (startswith): Remove trailing whitespace.
+ 	(parse_table_entry): Ditto.
+ 	(translate): Ditto.
+ 	(dump_symtab): Ditto.
+ 	(finish_conflict_resolution): Ditto.
+ 	(symbol_strength): Ditto.
+ 	(resolve_conflicts): Ditto.
+ 
  2026-06-13  Sunil Dora  <sunilkumar.dora@windriver.com>
  
  	PR driver/111527
diff -Nrcpad gcc-17-20260621/lto-plugin/lto-plugin.c gcc-17-20260628/lto-plugin/lto-plugin.c
*** gcc-17-20260621/lto-plugin/lto-plugin.c	Sun Jun 21 22:32:17 2026
--- gcc-17-20260628/lto-plugin/lto-plugin.c	Sun Jun 28 22:32:20 2026
*************** along with this program; see the file CO
*** 30,36 ****
     It also has options at his own:
     -debug: Print the command line used to run lto-wrapper.
     -nop: Instead of running lto-wrapper, pass the original to the plugin. This
!    only works if the input files are hybrid. 
     -linker-output-known: Do not determine linker output
     -linker-output-auto-nolto-rel: Switch from rel to nolto-rel mode without
     warning.  This is used on systems like VxWorks (kernel) where the link is
--- 30,36 ----
     It also has options at his own:
     -debug: Print the command line used to run lto-wrapper.
     -nop: Instead of running lto-wrapper, pass the original to the plugin. This
!    only works if the input files are hybrid.
     -linker-output-known: Do not determine linker output
     -linker-output-auto-nolto-rel: Switch from rel to nolto-rel mode without
     warning.  This is used on systems like VxWorks (kernel) where the link is
*************** startswith (const char *str, const char
*** 102,108 ****
  
  /* The part of the symbol table the plugin has to keep track of. Note that we
     must keep SYMS until all_symbols_read is called to give the linker time to
!    copy the symbol information. 
     The id must be 64bit to minimize collisions. */
  
  struct sym_aux
--- 102,108 ----
  
  /* The part of the symbol table the plugin has to keep track of. Note that we
     must keep SYMS until all_symbols_read is called to give the linker time to
!    copy the symbol information.
     The id must be 64bit to minimize collisions. */
  
  struct sym_aux
*************** check_1 (int gate, enum ld_plugin_level
*** 264,270 ****
     Returns the address of the next entry. */
  
  static char *
! parse_table_entry (char *p, struct ld_plugin_symbol *entry, 
  		   struct sym_aux *aux)
  {
    unsigned char t;
--- 264,270 ----
     Returns the address of the next entry. */
  
  static char *
! parse_table_entry (char *p, struct ld_plugin_symbol *entry,
  		   struct sym_aux *aux)
  {
    unsigned char t;
*************** translate (char *data, char *end, struct
*** 380,395 ****
    struct ld_plugin_symbol *syms = NULL;
    int n, len;
  
!   /* This overestimates the output buffer sizes, but at least 
       the algorithm is O(1) now. */
  
    len = (end - data)/8 + out->nsyms + 1;
    syms = xrealloc (out->syms, len * sizeof (struct ld_plugin_symbol));
    aux = xrealloc (out->aux, len * sizeof (struct sym_aux));
!   
!   for (n = out->nsyms; data < end; n++) 
!     { 
!       aux[n].id = out->id; 
        data = parse_table_entry (data, &syms[n], &aux[n]);
      }
  
--- 380,395 ----
    struct ld_plugin_symbol *syms = NULL;
    int n, len;
  
!   /* This overestimates the output buffer sizes, but at least
       the algorithm is O(1) now. */
  
    len = (end - data)/8 + out->nsyms + 1;
    syms = xrealloc (out->syms, len * sizeof (struct ld_plugin_symbol));
    aux = xrealloc (out->aux, len * sizeof (struct sym_aux));
! 
!   for (n = out->nsyms; data < end; n++)
!     {
!       aux[n].id = out->id;
        data = parse_table_entry (data, &syms[n], &aux[n]);
      }
  
*************** dump_symtab (FILE *f, struct plugin_symt
*** 497,508 ****
      {
        uint32_t slot = symtab->aux[j].slot;
        unsigned int resolution = symtab->syms[j].resolution;
!       
        assert (resolution != LDPR_UNKNOWN);
  
        fprintf (f, "%u %" PRI_LL "x %s %s\n",
                 (unsigned int) slot, symtab->aux[j].id,
! 	       lto_resolution_str[resolution], 
  	       symtab->syms[j].name);
      }
  }
--- 497,508 ----
      {
        uint32_t slot = symtab->aux[j].slot;
        unsigned int resolution = symtab->syms[j].resolution;
! 
        assert (resolution != LDPR_UNKNOWN);
  
        fprintf (f, "%u %" PRI_LL "x %s %s\n",
                 (unsigned int) slot, symtab->aux[j].id,
! 	       lto_resolution_str[resolution],
  	       symtab->syms[j].name);
      }
  }
*************** dump_symtab (FILE *f, struct plugin_symt
*** 511,517 ****
     the original symbols */
  
  static void
! finish_conflict_resolution (struct plugin_symtab *symtab, 
  			   struct plugin_symtab *conflicts)
  {
    int i, j;
--- 511,517 ----
     the original symbols */
  
  static void
! finish_conflict_resolution (struct plugin_symtab *symtab,
  			   struct plugin_symtab *conflicts)
  {
    int i, j;
*************** finish_conflict_resolution (struct plugi
*** 520,536 ****
      return;
  
    for (i = 0; i < symtab->nsyms; i++)
!     { 
        char resolution = LDPR_UNKNOWN;
  
        if (symtab->aux[i].next_conflict == -1)
  	continue;
  
!       switch (symtab->syms[i].def) 
  	{
  	case LDPK_DEF:
  	case LDPK_COMMON: /* ??? */
! 	  resolution = LDPR_RESOLVED_IR; 
  	  break;
  	case LDPK_WEAKDEF:
  	  resolution = LDPR_PREEMPTED_IR;
--- 520,536 ----
      return;
  
    for (i = 0; i < symtab->nsyms; i++)
!     {
        char resolution = LDPR_UNKNOWN;
  
        if (symtab->aux[i].next_conflict == -1)
  	continue;
  
!       switch (symtab->syms[i].def)
  	{
  	case LDPK_DEF:
  	case LDPK_COMMON: /* ??? */
! 	  resolution = LDPR_RESOLVED_IR;
  	  break;
  	case LDPK_WEAKDEF:
  	  resolution = LDPR_PREEMPTED_IR;
*************** finish_conflict_resolution (struct plugi
*** 545,552 ****
  
        assert (resolution != LDPR_UNKNOWN);
  
!       for (j = symtab->aux[i].next_conflict; 
! 	   j != -1; 
  	   j = conflicts->aux[j].next_conflict)
  	conflicts->syms[j].resolution = resolution;
      }
--- 545,552 ----
  
        assert (resolution != LDPR_UNKNOWN);
  
!       for (j = symtab->aux[i].next_conflict;
! 	   j != -1;
  	   j = conflicts->aux[j].next_conflict)
  	conflicts->syms[j].resolution = resolution;
      }
*************** static hashval_t hash_sym (const void *a
*** 987,994 ****
  
  static int symbol_strength (struct ld_plugin_symbol *s)
  {
!   switch (s->def) 
!     { 
      case LDPK_UNDEF:
      case LDPK_WEAKUNDEF:
        return 0;
--- 987,994 ----
  
  static int symbol_strength (struct ld_plugin_symbol *s)
  {
!   switch (s->def)
!     {
      case LDPK_UNDEF:
      case LDPK_WEAKUNDEF:
        return 0;
*************** static int symbol_strength (struct ld_pl
*** 1014,1020 ****
     originals.
  
     Then when writing out the resolution file readd the dropped symbols.
!    
     XXX how to handle common? */
  
  static void
--- 1014,1020 ----
     originals.
  
     Then when writing out the resolution file readd the dropped symbols.
! 
     XXX how to handle common? */
  
  static void
*************** resolve_conflicts (struct plugin_symtab
*** 1031,1037 ****
  
    /* Move all duplicate symbols into the auxiliary conflicts table. */
    out = 0;
!   for (i = 0; i < t->nsyms; i++) 
      {
        struct ld_plugin_symbol *s = &t->syms[i];
        struct sym_aux *aux = &t->aux[i];
--- 1031,1037 ----
  
    /* Move all duplicate symbols into the auxiliary conflicts table. */
    out = 0;
!   for (i = 0; i < t->nsyms; i++)
      {
        struct ld_plugin_symbol *s = &t->syms[i];
        struct sym_aux *aux = &t->aux[i];
*************** resolve_conflicts (struct plugin_symtab
*** 1045,1057 ****
  	  struct sym_aux *orig_aux = &t->aux[orig - t->syms];
  
  	  /* Always let the linker resolve the strongest symbol */
! 	  if (symbol_strength (orig) < symbol_strength (s)) 
  	    {
  	      SWAP (struct ld_plugin_symbol, *orig, *s);
  	      SWAP (uint32_t, orig_aux->slot, aux->slot);
  	      SWAP (unsigned long long, orig_aux->id, aux->id);
  	      /* Don't swap conflict chain pointer */
! 	    } 
  
  	  /* Move current symbol into the conflicts table */
  	  cnf = conflicts->nsyms++;
--- 1045,1057 ----
  	  struct sym_aux *orig_aux = &t->aux[orig - t->syms];
  
  	  /* Always let the linker resolve the strongest symbol */
! 	  if (symbol_strength (orig) < symbol_strength (s))
  	    {
  	      SWAP (struct ld_plugin_symbol, *orig, *s);
  	      SWAP (uint32_t, orig_aux->slot, aux->slot);
  	      SWAP (unsigned long long, orig_aux->id, aux->id);
  	      /* Don't swap conflict chain pointer */
! 	    }
  
  	  /* Move current symbol into the conflicts table */
  	  cnf = conflicts->nsyms++;
*************** resolve_conflicts (struct plugin_symtab
*** 1080,1097 ****
  
    assert (conflicts->nsyms <= outlen);
    assert (conflicts->nsyms + out == t->nsyms);
!   
    t->nsyms = out;
    htab_delete (symtab);
  }
  
  /* Process one section of an object file.  */
  
! static int 
  process_symtab (void *data, const char *name, off_t offset, off_t length)
  {
    struct plugin_objfile *obj = (struct plugin_objfile *)data;
!   char *s;
    char *secdatastart, *secdata;
  
    if (!startswith (name, ".gnu.lto_.symtab"))
--- 1080,1097 ----
  
    assert (conflicts->nsyms <= outlen);
    assert (conflicts->nsyms + out == t->nsyms);
! 
    t->nsyms = out;
    htab_delete (symtab);
  }
  
  /* Process one section of an object file.  */
  
! static int
  process_symtab (void *data, const char *name, off_t offset, off_t length)
  {
    struct plugin_objfile *obj = (struct plugin_objfile *)data;
!   const char *s;
    char *secdatastart, *secdata;
  
    if (!startswith (name, ".gnu.lto_.symtab"))
*************** process_symtab_extension (void *data, co
*** 1143,1149 ****
  			  off_t length)
  {
    struct plugin_objfile *obj = (struct plugin_objfile *)data;
!   char *s;
    char *secdatastart, *secdata;
  
    if (!startswith (name, ".gnu.lto_.ext_symtab"))
--- 1143,1149 ----
  			  off_t length)
  {
    struct plugin_objfile *obj = (struct plugin_objfile *)data;
!   const char *s;
    char *secdatastart, *secdata;
  
    if (!startswith (name, ".gnu.lto_.ext_symtab"))
