diff -Nrcpad gcc-14-20250425/LAST_UPDATED gcc-14-20250502/LAST_UPDATED
*** gcc-14-20250425/LAST_UPDATED	Fri Apr 25 22:34:21 2025
--- gcc-14-20250502/LAST_UPDATED	Fri May  2 22:33:46 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-14 revision 57f930fa9774ab3ec7479fc85d70135df271a8b0
--- 1 ----
! Obtained from git: releases/gcc-14 revision 088f3168a98d96ade7566dff37e3c2c305a4b2ef
diff -Nrcpad gcc-14-20250425/MD5SUMS gcc-14-20250502/MD5SUMS
*** gcc-14-20250425/MD5SUMS	Fri Apr 25 22:34:26 2025
--- gcc-14-20250502/MD5SUMS	Fri May  2 22:33:50 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-14-20250425.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-14-20250502.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
*************** ddba67a2d70633fea1f055f0cddbd350  Change
*** 23,29 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! 2f0dd903572fda5abdfc0fefa8f2ec7a  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
--- 23,29 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! d1541431cfdc4454cb52d8ef84521b30  LAST_UPDATED
  1671040823f8eb8436a06fdd18065e02  MAINTAINERS
  304c3887135aefa27c21292ec585b0a3  Makefile.def
  8dd93fbf2e32bcbd2faba10e3b8ba2b0  Makefile.in
*************** daaf19e8b17e0a90bee0d82fc8e856c7  contri
*** 356,362 ****
  d0d170da8f721b0a129a75ff9e4e7c8e  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! 1c629bdc3bad2edceda87f530786bc52  fixincludes/ChangeLog
  4afe55f959b7cceb7055ff11a9ca0e32  fixincludes/Makefile.in
  b6e3f4950abc6e254b467063381f6473  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
--- 356,362 ----
  d0d170da8f721b0a129a75ff9e4e7c8e  contrib/vimrc
  da7aeedeb5a86ee6f5982e559a2d6dcc  contrib/warn_summary
  8b59f0d0a2dcdced14765c514fbad719  depcomp
! b50fa70c66a6d4056f27460a3bb4e997  fixincludes/ChangeLog
  4afe55f959b7cceb7055ff11a9ca0e32  fixincludes/Makefile.in
  b6e3f4950abc6e254b467063381f6473  fixincludes/README
  455903ad4ff71fa5c5340ef7ae41a0e6  fixincludes/README-fixinc
*************** b6ffc204128adbd2c41ac0cb4ce98dc7  fixinc
*** 369,381 ****
  77fbad4fc8ec7be3578d045d003446ec  fixincludes/fixinc.in
  8ca216a7024876b7eb9b8abc30a30775  fixincludes/fixincl.c
  adf245e3714f799eafba40af16be8eb5  fixincludes/fixincl.tpl
! 17e251630d3b32193d301ccac107f85c  fixincludes/fixincl.x
  545875b4fe1c26bc3e1befc75b34e9f5  fixincludes/fixlib.c
  620c770139fc32c75b975b614d3156e8  fixincludes/fixlib.h
  5b2c1fd3ef9d44fb6beb1a0d45ddd533  fixincludes/fixopts.c
  ed1415e9dbc8f421fd9288bde0d90ad1  fixincludes/fixtests.c
  51e915676df084b64297d3c4fb0d9c18  fixincludes/genfixes
! 9a22071077df0449fb7b7a1a2a1d3680  fixincludes/inclhack.def
  dd5ae70d9f725bcaf2a15212782db49a  fixincludes/mkfixinc.sh
  516608ac1550577d47f48809bb512629  fixincludes/mkheaders.in
  3aa0563cd682ee61ecd9eb6eea0b0bce  fixincludes/procopen.c
--- 369,381 ----
  77fbad4fc8ec7be3578d045d003446ec  fixincludes/fixinc.in
  8ca216a7024876b7eb9b8abc30a30775  fixincludes/fixincl.c
  adf245e3714f799eafba40af16be8eb5  fixincludes/fixincl.tpl
! 049f493fbdb0a60b1ced1477ae93d03c  fixincludes/fixincl.x
  545875b4fe1c26bc3e1befc75b34e9f5  fixincludes/fixlib.c
  620c770139fc32c75b975b614d3156e8  fixincludes/fixlib.h
  5b2c1fd3ef9d44fb6beb1a0d45ddd533  fixincludes/fixopts.c
  ed1415e9dbc8f421fd9288bde0d90ad1  fixincludes/fixtests.c
  51e915676df084b64297d3c4fb0d9c18  fixincludes/genfixes
! e3acc96ec7713b1d01e2d2dedf465177  fixincludes/inclhack.def
  dd5ae70d9f725bcaf2a15212782db49a  fixincludes/mkfixinc.sh
  516608ac1550577d47f48809bb512629  fixincludes/mkheaders.in
  3aa0563cd682ee61ecd9eb6eea0b0bce  fixincludes/procopen.c
*************** baf9b6e2583cff7f3b9de94370dd739e  gcc/AB
*** 505,511 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 7c9fedf0491106e241924435c64da53d  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
--- 505,511 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 6e7af0a71096436718a4a126007c79d1  gcc/ChangeLog
  a3b63c675afa7a655cc2bfa8a907af79  gcc/ChangeLog-1997
  d9a88529352a010253c2e8fb1ed6023b  gcc/ChangeLog-1998
  240f08f81cb4699e8b49347db38233db  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 541,547 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 406d7f0c9b643dafa76ca813b622a5e3  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 541,547 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! cd8714535e4a1e3c303ecd336ee62f58  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** ec6799501b2eb2923d5de6a66169dbd2  gcc/ON
*** 553,559 ****
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! cf702c0943a284eb17c77089c9d0f1b3  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
--- 553,559 ----
  4ff8b6b00464fd6c37969f80145dca46  gcc/acinclude.m4
  496cb89e62ed3dbfd1af1db0975a4c04  gcc/aclocal.m4
  16a499934b71eb6cf7c0d6899cd6006a  gcc/ada/.gitignore
! 1b8f9e424e102f07fd6e406d3c695ba3  gcc/ada/ChangeLog
  683be0b07dc4f64f118fd5e8ae9cb30d  gcc/ada/ChangeLog-2001
  7aff25efb203be4136b8776cdc812956  gcc/ada/ChangeLog-2002
  cd2379152000f40157d349018fb9364d  gcc/ada/ChangeLog-2003
*************** c81efe8ccbd5f5b8399a3496f5015859  gcc/ad
*** 581,587 ****
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  711afb6f8ec14edf7425445a669e85ed  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! d7575f332dc7c663b26141a23cabc413  gcc/ada/Makefile.rtl
  8fc60e49303a639f7ec7c61a44f3f460  gcc/ada/accessibility.adb
  d19afffa65b63be4a8fd705f4b3f891f  gcc/ada/accessibility.ads
  14559d7d76c0ae16e72bf37828ab86a6  gcc/ada/ada_get_targ.adb
--- 581,587 ----
  2cf41efa2dee24b2dda73018b855edd3  gcc/ada/ChangeLog.tree-ssa
  711afb6f8ec14edf7425445a669e85ed  gcc/ada/Make-generated.in
  6c9c3b4249e781ed48c7ae55e8ef9999  gcc/ada/Makefile.in
! ebd465b2e3467e1e5c6df06be9255707  gcc/ada/Makefile.rtl
  8fc60e49303a639f7ec7c61a44f3f460  gcc/ada/accessibility.adb
  d19afffa65b63be4a8fd705f4b3f891f  gcc/ada/accessibility.ads
  14559d7d76c0ae16e72bf37828ab86a6  gcc/ada/ada_get_targ.adb
*************** cf701fe3a4262464ce11918a1e7c1ac8  gcc/ad
*** 2081,2086 ****
--- 2081,2087 ----
  328356701909c0758b7d44f4e0cc2b93  gcc/ada/libgnat/s-dmotpr.ads
  3b5cd0081f88f550731d7ca672cb51a8  gcc/ada/libgnat/s-dorepr.adb
  1a7b1d1e3b1948a937b8efd2166afc9b  gcc/ada/libgnat/s-dorepr__fma.adb
+ 4d528424421585e18b2d22bdde89cb4b  gcc/ada/libgnat/s-dorepr__freebsd.adb
  d5c591097a806a2f01001c835f537bee  gcc/ada/libgnat/s-dourea.adb
  e1528dfa862f392276ecb1064b82234f  gcc/ada/libgnat/s-dourea.ads
  173efe308be0d8ddde3b4f9a767ad7db  gcc/ada/libgnat/s-dsaser.ads
*************** d7b7be0853c1adedc2ef4b171f9d8522  gcc/co
*** 3313,3319 ****
  ce915e557866ffa3df9a5b35ed401ce0  gcc/config.build
  19db7b0adf834602d18c4baffe9e6e0d  gcc/config.gcc
  a838f308e3dcdd63685c24e6ff2586be  gcc/config.host
! fc1daf6d4382b337124bb560440afd8a  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  9cdb6f241c973fd5ce4c0b36c5a282c6  gcc/config/aarch64/aarch64-arches.def
  bdcc560c68a31540ed1be0895b491d16  gcc/config/aarch64/aarch64-builtins.cc
--- 3314,3320 ----
  ce915e557866ffa3df9a5b35ed401ce0  gcc/config.build
  19db7b0adf834602d18c4baffe9e6e0d  gcc/config.gcc
  a838f308e3dcdd63685c24e6ff2586be  gcc/config.host
! 3b202d5bab614e2275378bef1f708574  gcc/config.in
  8e697813dc96ca90f5d0f4c196efe2cc  gcc/config/README
  9cdb6f241c973fd5ce4c0b36c5a282c6  gcc/config/aarch64/aarch64-arches.def
  bdcc560c68a31540ed1be0895b491d16  gcc/config/aarch64/aarch64-builtins.cc
*************** e74b8aa51ed0a0fd74ec97bb4009c55f  gcc/co
*** 3371,3377 ****
  93d2ce2396c397f594f146a9d7d80c52  gcc/config/aarch64/aarch64-vxworks.h
  70a57e9bbace36d6892e9aaa13ca3fdf  gcc/config/aarch64/aarch64.cc
  be8a897650902ba46d1df7cb3a50ca2c  gcc/config/aarch64/aarch64.h
! 20d9a92479a37a902c0ce06242730bf6  gcc/config/aarch64/aarch64.md
  3948f2f1b7b27ca528cac06ae5fe36ff  gcc/config/aarch64/aarch64.opt
  1277617373f7bad91a5af74470db72b3  gcc/config/aarch64/aarch64.opt.urls
  50444b4cc17d01769c6e4fe9b5ba9a04  gcc/config/aarch64/arm_acle.h
--- 3372,3378 ----
  93d2ce2396c397f594f146a9d7d80c52  gcc/config/aarch64/aarch64-vxworks.h
  70a57e9bbace36d6892e9aaa13ca3fdf  gcc/config/aarch64/aarch64.cc
  be8a897650902ba46d1df7cb3a50ca2c  gcc/config/aarch64/aarch64.h
! 356f40f57c28daebc2895871909cc2f6  gcc/config/aarch64/aarch64.md
  3948f2f1b7b27ca528cac06ae5fe36ff  gcc/config/aarch64/aarch64.opt
  1277617373f7bad91a5af74470db72b3  gcc/config/aarch64/aarch64.opt.urls
  50444b4cc17d01769c6e4fe9b5ba9a04  gcc/config/aarch64/arm_acle.h
*************** b812676480e10c55ca64c09cae522a6a  gcc/co
*** 3656,3662 ****
  f6bd61a4d455db58f9425812a337b890  gcc/config/avr/avr-stdint.h
  7c55f9227a7765e262484b93f6858d24  gcc/config/avr/avr.cc
  7cc3c5e2451b04c38f10f0bd06790ba0  gcc/config/avr/avr.h
! 2b693839bc501fa60df6955cef25c737  gcc/config/avr/avr.md
  d966b0c41bfba722c0e38c55d7256e8b  gcc/config/avr/avr.opt
  a8f95050d166f48c225a2f8e916c6324  gcc/config/avr/avr.opt.urls
  c303762800db2d03566efcca0c473770  gcc/config/avr/avrlibc.h
--- 3657,3663 ----
  f6bd61a4d455db58f9425812a337b890  gcc/config/avr/avr-stdint.h
  7c55f9227a7765e262484b93f6858d24  gcc/config/avr/avr.cc
  7cc3c5e2451b04c38f10f0bd06790ba0  gcc/config/avr/avr.h
! 90199e05652dd3c55b8064a234c53d28  gcc/config/avr/avr.md
  d966b0c41bfba722c0e38c55d7256e8b  gcc/config/avr/avr.opt
  a8f95050d166f48c225a2f8e916c6324  gcc/config/avr/avr.opt.urls
  c303762800db2d03566efcca0c473770  gcc/config/avr/avrlibc.h
*************** d420db205af99a4d1013bc0714bcca16  gcc/co
*** 3789,3795 ****
  ff647e6851cebecaf394272c183d4020  gcc/config/darwin-rust.cc
  3026a91e5feb107bf0b1acb32e14cac9  gcc/config/darwin-sections.def
  e55ce9dd176fe3245a6c58be151f15c4  gcc/config/darwin.cc
! bdd6dfb4765da49517c924fe69a16f1b  gcc/config/darwin.h
  249109171ae1a164efd609d1c92fd254  gcc/config/darwin.opt
  7c6d1c1425e31bca754e3318d5b15d32  gcc/config/darwin.opt.urls
  5e5bdc5302018d2fede1c68388c8577a  gcc/config/default-c.cc
--- 3790,3796 ----
  ff647e6851cebecaf394272c183d4020  gcc/config/darwin-rust.cc
  3026a91e5feb107bf0b1acb32e14cac9  gcc/config/darwin-sections.def
  e55ce9dd176fe3245a6c58be151f15c4  gcc/config/darwin.cc
! d2c7257820ad3673648aef527e587cf1  gcc/config/darwin.h
  249109171ae1a164efd609d1c92fd254  gcc/config/darwin.opt
  7c6d1c1425e31bca754e3318d5b15d32  gcc/config/darwin.opt.urls
  5e5bdc5302018d2fede1c68388c8577a  gcc/config/default-c.cc
*************** e5595c37dd7b9ea4344a7be0dc5d9d5a  gcc/co
*** 4189,4195 ****
  30b9c6f1a4b0b23de02c33b969a71348  gcc/config/i386/x86-tune-sched-bd.cc
  3a8550d487a86d6a596183d13fdca950  gcc/config/i386/x86-tune-sched-core.cc
  7f7cccfabb6c1a59b854f87166ebcfa6  gcc/config/i386/x86-tune-sched.cc
! 4361ae7abdaee38ffc26bcaf844b614e  gcc/config/i386/x86-tune.def
  53eb359a7a4854a587b6cf5ddde9a9b2  gcc/config/i386/x86gprintrin.h
  a1d442d51dcc0044d7b3e109d2bff5c2  gcc/config/i386/x86intrin.h
  a616ea353ccf63fc1b6f2254a35ee131  gcc/config/i386/xm-cygwin.h
--- 4190,4196 ----
  30b9c6f1a4b0b23de02c33b969a71348  gcc/config/i386/x86-tune-sched-bd.cc
  3a8550d487a86d6a596183d13fdca950  gcc/config/i386/x86-tune-sched-core.cc
  7f7cccfabb6c1a59b854f87166ebcfa6  gcc/config/i386/x86-tune-sched.cc
! 2625bb27f5de034b4bd71b73a7adacac  gcc/config/i386/x86-tune.def
  53eb359a7a4854a587b6cf5ddde9a9b2  gcc/config/i386/x86gprintrin.h
  a1d442d51dcc0044d7b3e109d2bff5c2  gcc/config/i386/x86intrin.h
  a616ea353ccf63fc1b6f2254a35ee131  gcc/config/i386/xm-cygwin.h
*************** a6b183f51e1f34cd2563d7457f285010  gcc/co
*** 4819,4825 ****
  654f267f76053c5658a1d061ada5ed32  gcc/config/riscv/riscv-vector-costs.cc
  d99509eaecd0c207104902aad225c650  gcc/config/riscv/riscv-vector-costs.h
  dade0b49152a8c59a779044da51013cc  gcc/config/riscv/riscv-vector-switch.def
! cef1b9b362391aada1d3ed9493d9a89e  gcc/config/riscv/riscv-vsetvl.cc
  d9d8e7a614d619aa6e8e2cf420880fd9  gcc/config/riscv/riscv-vsetvl.def
  0d4ed2619235b5b9fe54b4b0b8af4d03  gcc/config/riscv/riscv.cc
  01ea12366cb6b1aa2662c25a78b0943e  gcc/config/riscv/riscv.h
--- 4820,4826 ----
  654f267f76053c5658a1d061ada5ed32  gcc/config/riscv/riscv-vector-costs.cc
  d99509eaecd0c207104902aad225c650  gcc/config/riscv/riscv-vector-costs.h
  dade0b49152a8c59a779044da51013cc  gcc/config/riscv/riscv-vector-switch.def
! a7bbf8ddae77baba4eb18981d962b89d  gcc/config/riscv/riscv-vsetvl.cc
  d9d8e7a614d619aa6e8e2cf420880fd9  gcc/config/riscv/riscv-vsetvl.def
  0d4ed2619235b5b9fe54b4b0b8af4d03  gcc/config/riscv/riscv.cc
  01ea12366cb6b1aa2662c25a78b0943e  gcc/config/riscv/riscv.h
*************** e39fbc1efc9306edf11feb2c8e574d00  gcc/co
*** 5349,5356 ****
  091e4857c740530a3e86986eb0b00257  gcc/config/xtensa/xtensa.md
  46e0d23511cfc2a24b12db0a07e39093  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! 1d02a2ad975c2238400bdbcf0fe2826d  gcc/configure
! 83a0a8c0b25ffec6480dd26e22756cf7  gcc/configure.ac
  5972b8ff2fe88708ed4ec23776bf1701  gcc/context.cc
  52b17b28143186732f26298b000bc5bd  gcc/context.h
  ef6eb019220dc23fd0adccd9bdd5c35e  gcc/convert.cc
--- 5350,5357 ----
  091e4857c740530a3e86986eb0b00257  gcc/config/xtensa/xtensa.md
  46e0d23511cfc2a24b12db0a07e39093  gcc/config/xtensa/xtensa.opt
  db57d7603312357e8c0cfb21c32353d1  gcc/config/xtensa/xtensa.opt.urls
! f46acfa90c07297d8e8a134833f40636  gcc/configure
! 6c423e345ab9a6cf413426b34dec7c28  gcc/configure.ac
  5972b8ff2fe88708ed4ec23776bf1701  gcc/context.cc
  52b17b28143186732f26298b000bc5bd  gcc/context.h
  ef6eb019220dc23fd0adccd9bdd5c35e  gcc/convert.cc
*************** d36a2aabdf8da39363d9be0efef739b0  gcc/co
*** 5360,5366 ****
  c59586748f2760da4b4b93526be5cc64  gcc/coroutine-passes.cc
  f1ae4baa11bd5b6dd111907d100e7c0c  gcc/coverage.cc
  bf1a3b3570d1b69e07f60f5150f38a93  gcc/coverage.h
! 9442a753fecc46a9e1c28a91c0003a94  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
--- 5361,5367 ----
  c59586748f2760da4b4b93526be5cc64  gcc/coroutine-passes.cc
  f1ae4baa11bd5b6dd111907d100e7c0c  gcc/coverage.cc
  bf1a3b3570d1b69e07f60f5150f38a93  gcc/coverage.h
! ca6ea4b9857f4e9034b4ddda46a064a4  gcc/cp/ChangeLog
  d271e3663538ba1f3281cab3838e92cd  gcc/cp/ChangeLog-1993
  f5a44adbc05521162350ca409d1d95ce  gcc/cp/ChangeLog-1994
  ac55db48d964cb5469ff03c1cd3ee04d  gcc/cp/ChangeLog-1995
*************** eb0e2e62caf98260cc2641216d140ae9  gcc/cp
*** 5400,5410 ****
  dee1bc8866869d1becc1c1459cf3853d  gcc/cp/cfns.h
  cece9d48fd49b2e27c93c08c799d3a43  gcc/cp/class.cc
  c2cee7941d7a9d85eb87f70b7f8495ac  gcc/cp/config-lang.in
! d02471ef7f912fcb2221e0d3922db09a  gcc/cp/constexpr.cc
  e2342416928d82aea826d50f04c9f56c  gcc/cp/constraint.cc
! c454ea653413867402ff12c6ca04c7ed  gcc/cp/contracts.cc
! bd0b88c1ae53d9b381e7e6ca10b9c7b9  gcc/cp/contracts.h
! d1499a8302abd60e65299232a696a84f  gcc/cp/coroutines.cc
  c00c917a34a1da5c9fc0740ca6cf66ae  gcc/cp/cp-gimplify.cc
  d3243151c2dc95476f1ffe37daeac128  gcc/cp/cp-lang.cc
  7c2a3efea776c90aa874253dbc0d63d5  gcc/cp/cp-name-hint.h
--- 5401,5411 ----
  dee1bc8866869d1becc1c1459cf3853d  gcc/cp/cfns.h
  cece9d48fd49b2e27c93c08c799d3a43  gcc/cp/class.cc
  c2cee7941d7a9d85eb87f70b7f8495ac  gcc/cp/config-lang.in
! fdbccaa087b035a5aecd3be41b27dfc6  gcc/cp/constexpr.cc
  e2342416928d82aea826d50f04c9f56c  gcc/cp/constraint.cc
! 7f4cf1f0f93d7aa0443c94e023845d1c  gcc/cp/contracts.cc
! 5b547c5fd539f8a214ed271c5a475a85  gcc/cp/contracts.h
! 6967b0103077418c2e5ab5ead691d772  gcc/cp/coroutines.cc
  c00c917a34a1da5c9fc0740ca6cf66ae  gcc/cp/cp-gimplify.cc
  d3243151c2dc95476f1ffe37daeac128  gcc/cp/cp-lang.cc
  7c2a3efea776c90aa874253dbc0d63d5  gcc/cp/cp-name-hint.h
*************** d3243151c2dc95476f1ffe37daeac128  gcc/cp
*** 5412,5424 ****
  435279c2effa4bff943c983b01d2b6a5  gcc/cp/cp-objcp-common.h
  821d270a560d4fc013061cdea0f0a956  gcc/cp/cp-trait.def
  a5599d1cd180d05b45d78f09c98ceb60  gcc/cp/cp-tree.def
! 5e158a6c35075540d2bc83af016ae41f  gcc/cp/cp-tree.h
  e1f1e00efaa3ab325dcde6256bd453ea  gcc/cp/cp-ubsan.cc
  9c03298cd40d3b947e019ec428058338  gcc/cp/cvt.cc
  56f39bfaef18eed52575804302d7f065  gcc/cp/cxx-pretty-print.cc
  08e116dfeec3d3e6814661d5e4274639  gcc/cp/cxx-pretty-print.h
  8947390d58d06707b7fc5112da286233  gcc/cp/cxxapi-data.csv
! 057a92d80861aa7a9befd58065803193  gcc/cp/decl.cc
  1abb8e5bf838320c47bbb41c28ac53c8  gcc/cp/decl.h
  f98406f804a08b649a403ec03c6dda4b  gcc/cp/decl2.cc
  db1260dd767707d8dcbdbdcd7982bfad  gcc/cp/dump.cc
--- 5413,5425 ----
  435279c2effa4bff943c983b01d2b6a5  gcc/cp/cp-objcp-common.h
  821d270a560d4fc013061cdea0f0a956  gcc/cp/cp-trait.def
  a5599d1cd180d05b45d78f09c98ceb60  gcc/cp/cp-tree.def
! 800e2196786f6f509e098d6ccf2cc750  gcc/cp/cp-tree.h
  e1f1e00efaa3ab325dcde6256bd453ea  gcc/cp/cp-ubsan.cc
  9c03298cd40d3b947e019ec428058338  gcc/cp/cvt.cc
  56f39bfaef18eed52575804302d7f065  gcc/cp/cxx-pretty-print.cc
  08e116dfeec3d3e6814661d5e4274639  gcc/cp/cxx-pretty-print.h
  8947390d58d06707b7fc5112da286233  gcc/cp/cxxapi-data.csv
! a46cb7202bcedbfcb63c97baa7799138  gcc/cp/decl.cc
  1abb8e5bf838320c47bbb41c28ac53c8  gcc/cp/decl.h
  f98406f804a08b649a403ec03c6dda4b  gcc/cp/decl2.cc
  db1260dd767707d8dcbdbdcd7982bfad  gcc/cp/dump.cc
*************** e5de0a6c0e25db99122b38cfbd158f92  gcc/cp
*** 5443,5451 ****
  4c2302075ee88f154fe1d9d5bc880b38  gcc/cp/name-lookup.h
  9071e61b746a07f7ae419836317ea8d4  gcc/cp/operators.def
  1a28eaf049388507440c077078b27e23  gcc/cp/optimize.cc
! 19992f2ef7d9d433557746699c177234  gcc/cp/parser.cc
  64953966b085a9e770be93c5d1bdca4e  gcc/cp/parser.h
! 250772127656a1f3dfb746e0f531ee71  gcc/cp/pt.cc
  c59b967f38f4705696e11724814e2a06  gcc/cp/ptree.cc
  5e3e9c87ee323734a11e7081aaa64fa5  gcc/cp/rtti.cc
  7764edeba26dbb6b15962e6395cba9d2  gcc/cp/search.cc
--- 5444,5452 ----
  4c2302075ee88f154fe1d9d5bc880b38  gcc/cp/name-lookup.h
  9071e61b746a07f7ae419836317ea8d4  gcc/cp/operators.def
  1a28eaf049388507440c077078b27e23  gcc/cp/optimize.cc
! 858714f2d555e4551794ae01f5e0a5da  gcc/cp/parser.cc
  64953966b085a9e770be93c5d1bdca4e  gcc/cp/parser.h
! c5cecb5a2b5692e0e5862de7ec5c1c79  gcc/cp/pt.cc
  c59b967f38f4705696e11724814e2a06  gcc/cp/ptree.cc
  5e3e9c87ee323734a11e7081aaa64fa5  gcc/cp/rtti.cc
  7764edeba26dbb6b15962e6395cba9d2  gcc/cp/search.cc
*************** ca8df8ebc275aae3373b59e34155cc57  gcc/cp
*** 5454,5460 ****
  94fae0d321122a3989a40631ba86d13b  gcc/cp/std-name-hint.h
  41e87ed4f19ff0138f84bf27e143fc65  gcc/cp/tree.cc
  ade60cf10e86c87a2d3960a453e78059  gcc/cp/type-utils.h
! cca9cc2a8ea5a2ff06405f346518a9eb  gcc/cp/typeck.cc
  e8b7fc59f86c5a7c4e08ae88222ebbeb  gcc/cp/typeck2.cc
  b04e03a3822d8b9ab15575d78d4309f1  gcc/cp/vtable-class-hierarchy.cc
  d9039dac3f86bf082870bf78b964568b  gcc/cppbuiltin.cc
--- 5455,5461 ----
  94fae0d321122a3989a40631ba86d13b  gcc/cp/std-name-hint.h
  41e87ed4f19ff0138f84bf27e143fc65  gcc/cp/tree.cc
  ade60cf10e86c87a2d3960a453e78059  gcc/cp/type-utils.h
! 93805b7cd471c637c830567641d943d3  gcc/cp/typeck.cc
  e8b7fc59f86c5a7c4e08ae88222ebbeb  gcc/cp/typeck2.cc
  b04e03a3822d8b9ab15575d78d4309f1  gcc/cp/vtable-class-hierarchy.cc
  d9039dac3f86bf082870bf78b964568b  gcc/cppbuiltin.cc
*************** dce7dac7e905ada28c6563d930b531eb  gcc/fo
*** 5871,5877 ****
  090850db6c719557b18e35fafc041a4c  gcc/fold-const.cc
  62f9c541bc34eb653f289ecd29c7848a  gcc/fold-const.h
  5cce8057cb6a40c0ce23fcd6497d35c0  gcc/fold-mem-offsets.cc
! 78690319b137f794ffc99fdcaddcdf30  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
--- 5872,5878 ----
  090850db6c719557b18e35fafc041a4c  gcc/fold-const.cc
  62f9c541bc34eb653f289ecd29c7848a  gcc/fold-const.h
  5cce8057cb6a40c0ce23fcd6497d35c0  gcc/fold-mem-offsets.cc
! 913f1e0cbad18f6ba6b1c0b72ce5e4b2  gcc/fortran/ChangeLog
  3330102ad3a0217cba963be6b5eefd58  gcc/fortran/ChangeLog-2002
  d000ab985b1eeb1ad5749f98b8fef99f  gcc/fortran/ChangeLog-2003
  bf42f94f0c51dcc7d8051cc7fda1efdc  gcc/fortran/ChangeLog-2004
*************** ba11ab9ac11e6a78fa7706263e42f1fc  gcc/fo
*** 5948,5954 ****
  56af741644ab30aa09221a750079e265  gcc/fortran/parse.cc
  6afe26dd3f7a33ff8c524687d1958f05  gcc/fortran/parse.h
  9ac1b5b2244f94ac3c30803957d5c17a  gcc/fortran/primary.cc
! fab505de16cc49f9aa23e12f05d62d3b  gcc/fortran/resolve.cc
  bf73188a78ecc3c99bc6915db827d75f  gcc/fortran/scanner.cc
  1cfffbabece85f419a6ca2676917e619  gcc/fortran/scanner.h
  be0b83b5f771bbe50926a1109ebd9e09  gcc/fortran/simplify.cc
--- 5949,5955 ----
  56af741644ab30aa09221a750079e265  gcc/fortran/parse.cc
  6afe26dd3f7a33ff8c524687d1958f05  gcc/fortran/parse.h
  9ac1b5b2244f94ac3c30803957d5c17a  gcc/fortran/primary.cc
! e8c15377bf31a221c1961801acf6b0be  gcc/fortran/resolve.cc
  bf73188a78ecc3c99bc6915db827d75f  gcc/fortran/scanner.cc
  1cfffbabece85f419a6ca2676917e619  gcc/fortran/scanner.h
  be0b83b5f771bbe50926a1109ebd9e09  gcc/fortran/simplify.cc
*************** c4df74d81805c4bd5129d36bb2a68562  gcc/gi
*** 6126,6132 ****
  111dff63f363b5601fa6ea70225f869c  gcc/gimple.h
  38023efd45885e11111aa624febf5783  gcc/gimplify-me.cc
  85e953ee7730a9690d8c9449d974b5c9  gcc/gimplify-me.h
! d40f36513a867aabc07163159db3e18b  gcc/gimplify.cc
  8f261c08379d1ad7b5ca607ff26ae1fb  gcc/gimplify.h
  82fc433faa62fad9f37c79e38dc2bf1c  gcc/ginclude/float.h
  f792d34f340e2e7a7655cf10325a519d  gcc/ginclude/iso646.h
--- 6127,6133 ----
  111dff63f363b5601fa6ea70225f869c  gcc/gimple.h
  38023efd45885e11111aa624febf5783  gcc/gimplify-me.cc
  85e953ee7730a9690d8c9449d974b5c9  gcc/gimplify-me.h
! b095d84eaceeaa85a2eb95e90a0bd6f2  gcc/gimplify.cc
  8f261c08379d1ad7b5ca607ff26ae1fb  gcc/gimplify.h
  82fc433faa62fad9f37c79e38dc2bf1c  gcc/ginclude/float.h
  f792d34f340e2e7a7655cf10325a519d  gcc/ginclude/iso646.h
*************** f792d34f340e2e7a7655cf10325a519d  gcc/gi
*** 6135,6141 ****
  e61f7f48b5e505fc054bcb3b838462e3  gcc/ginclude/stdatomic.h
  e41775229e031cf6b904da72157b328f  gcc/ginclude/stdbool.h
  fbf7d548cfb69fda253e93c5e99f5ab6  gcc/ginclude/stdckdint.h
! b01ba8e2e1cee2ead32585a051b44a50  gcc/ginclude/stddef.h
  c3eea4149dcf122b8de68266ed989192  gcc/ginclude/stdfix.h
  d37a869af0d930a8a0c201d243f6891c  gcc/ginclude/stdint-gcc.h
  f85aa0745c3e9e0d32fa64753089b2f1  gcc/ginclude/stdint-wrap.h
--- 6136,6142 ----
  e61f7f48b5e505fc054bcb3b838462e3  gcc/ginclude/stdatomic.h
  e41775229e031cf6b904da72157b328f  gcc/ginclude/stdbool.h
  fbf7d548cfb69fda253e93c5e99f5ab6  gcc/ginclude/stdckdint.h
! 82e438231399094348b540d3da27ec8e  gcc/ginclude/stddef.h
  c3eea4149dcf122b8de68266ed989192  gcc/ginclude/stdfix.h
  d37a869af0d930a8a0c201d243f6891c  gcc/ginclude/stdint-gcc.h
  f85aa0745c3e9e0d32fa64753089b2f1  gcc/ginclude/stdint-wrap.h
*************** e8a9eb01b9451a357155e7152df1c669  gcc/ta
*** 8059,8065 ****
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! cffde644deb37ad2ddc4fceb5148b678  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
--- 8060,8066 ----
  a05663c52c607143c607d3ecf1391979  gcc/targhooks.cc
  51d240e574a3f9ecec346d64a04ac634  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 9eb513d36a10c4e1a18ca89d5c3a5684  gcc/testsuite/ChangeLog
  862f04afbd87da2cc6bc432c3f28430f  gcc/testsuite/ChangeLog-1993-2007
  029a5d8dacd25eb5d4711452ac448e5b  gcc/testsuite/ChangeLog-2008
  13ac28c41d51b66b4ec40dba6bd50f39  gcc/testsuite/ChangeLog-2009
*************** da7e9d42cf35a399a1a7eeaf4d2b278d  gcc/te
*** 14633,14638 ****
--- 14634,14640 ----
  5b9994a0d41a7ee4e89f793a435c6f57  gcc/testsuite/g++.dg/contracts/noexcept_preload_handler/README
  1eef935e17a9e42132e42fbaf5825bd3  gcc/testsuite/g++.dg/contracts/noexcept_preload_handler/assert_fail.cpp
  976d7e6f6d60f6f3099e288e26993286  gcc/testsuite/g++.dg/contracts/noexcept_preload_handler/handle_contract_violation.cpp
+ ada02b9a9c456759d36a413d2da07420  gcc/testsuite/g++.dg/contracts/pr115434.C
  c81f2cfc289a492c0914488fe8b63c60  gcc/testsuite/g++.dg/contracts/preload_handler/Makefile
  25782949ad51a3e368e55d72b148a8b7  gcc/testsuite/g++.dg/contracts/preload_handler/README
  a20f08cc18eaf6c3032e2d1b9cffe61d  gcc/testsuite/g++.dg/contracts/preload_handler/assert_fail.cpp
*************** ada1ece7347c7f19252ad084712f97d6  gcc/te
*** 14739,14745 ****
  f74a9d1bf6640b367d56a51317dbd163  gcc/testsuite/g++.dg/coroutines/co-await-moveonly1.C
  d2633a9d9bd295c903ea6a188821ac3c  gcc/testsuite/g++.dg/coroutines/co-await-syntax-00-needs-expr.C
  cbcf61ac3695e850097b05502475b900  gcc/testsuite/g++.dg/coroutines/co-await-syntax-01-outside-fn.C
! b9cdf449335374fa9e29301f8b540c5e  gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C
  682b88ecb570c0234a2c2fbefbf37596  gcc/testsuite/g++.dg/coroutines/co-await-syntax-03-auto.C
  57a82b1b4ee08a1b6b36d4bdf52ee97e  gcc/testsuite/g++.dg/coroutines/co-await-syntax-04-ctor-dtor.C
  59640cf5aa96f58eea4bbeb4e90545cf  gcc/testsuite/g++.dg/coroutines/co-await-syntax-05-constexpr.C
--- 14741,14747 ----
  f74a9d1bf6640b367d56a51317dbd163  gcc/testsuite/g++.dg/coroutines/co-await-moveonly1.C
  d2633a9d9bd295c903ea6a188821ac3c  gcc/testsuite/g++.dg/coroutines/co-await-syntax-00-needs-expr.C
  cbcf61ac3695e850097b05502475b900  gcc/testsuite/g++.dg/coroutines/co-await-syntax-01-outside-fn.C
! 29f562bc19ebf8b69c6ddeff88679485  gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C
  682b88ecb570c0234a2c2fbefbf37596  gcc/testsuite/g++.dg/coroutines/co-await-syntax-03-auto.C
  57a82b1b4ee08a1b6b36d4bdf52ee97e  gcc/testsuite/g++.dg/coroutines/co-await-syntax-04-ctor-dtor.C
  59640cf5aa96f58eea4bbeb4e90545cf  gcc/testsuite/g++.dg/coroutines/co-await-syntax-05-constexpr.C
*************** a8b153bbc8ce941d24c7c0e6ab6c5831  gcc/te
*** 14762,14768 ****
  6707f9fc8aacf660ae1beb8d09e4c119  gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C
  85e7e0815826bd828101765c5fd78a66  gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C
  aa517ad92377039530de5c9dc496beda  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-00-needs-expr.C
! 5e7fab059a6acab2c92b4dbc895ee573  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C
  8aaabb6f3807b758e6042bc711be4dae  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-02-outside-fn.C
  aae3e5eeb2e307720fe200ed5fa7f57e  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-03-auto.C
  a58ce7599a07fb71eceb363e9bf2e1f8  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-04-ctor-dtor.C
--- 14764,14770 ----
  6707f9fc8aacf660ae1beb8d09e4c119  gcc/testsuite/g++.dg/coroutines/co-return-syntax-10-movable.C
  85e7e0815826bd828101765c5fd78a66  gcc/testsuite/g++.dg/coroutines/co-return-warning-1.C
  aa517ad92377039530de5c9dc496beda  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-00-needs-expr.C
! 0abd63fb6f8e1606f97bfe8ff8a599e2  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C
  8aaabb6f3807b758e6042bc711be4dae  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-02-outside-fn.C
  aae3e5eeb2e307720fe200ed5fa7f57e  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-03-auto.C
  a58ce7599a07fb71eceb363e9bf2e1f8  gcc/testsuite/g++.dg/coroutines/co-yield-syntax-04-ctor-dtor.C
*************** d0ec9373b7671fe70b47e96812daa568  gcc/te
*** 14779,14784 ****
--- 14781,14787 ----
  a50880b566fed6d07b909ccdaa5107a7  gcc/testsuite/g++.dg/coroutines/coro-bad-grooaf-00-static.C
  bf25ae08316051d9833582ee358711b2  gcc/testsuite/g++.dg/coroutines/coro-bad-grooaf-01-grooaf-expected.C
  8e2244c730152e6c96e90cb463a33d11  gcc/testsuite/g++.dg/coroutines/coro-builtins.C
+ a20d9c7dba9d8ca91ca47515997e5b82  gcc/testsuite/g++.dg/coroutines/coro-function-decl.C
  2ee732d97a353f9dae689cd5e7a0e6bf  gcc/testsuite/g++.dg/coroutines/coro-missing-final-suspend.C
  c650db04adc1ddeff58daa89681ac083  gcc/testsuite/g++.dg/coroutines/coro-missing-gro.C
  d622746579a0968e8d80e69091842263  gcc/testsuite/g++.dg/coroutines/coro-missing-initial-suspend.C
*************** cb41fef7448625fa4e0c8fd96e24fc4d  gcc/te
*** 14809,14822 ****
  5a6ab803d16d71889bbcfbe081300785  gcc/testsuite/g++.dg/coroutines/pr102454.C
  fcf423593c66a6801268d44dcd7b6ae1  gcc/testsuite/g++.dg/coroutines/pr102489.C
  85cc1b4c4f0e73f17a81693bed3275fa  gcc/testsuite/g++.dg/coroutines/pr103328.C
! 0e86724aa7dbc01acaa7860397f33bb4  gcc/testsuite/g++.dg/coroutines/pr103868.C
  4be4670ffeb4857d864cfa5cfa5dc16f  gcc/testsuite/g++.dg/coroutines/pr104051.C
  b134bf48c5d1c37a3f48e0c7f25bd714  gcc/testsuite/g++.dg/coroutines/pr104981-preview-this.C
! 27e919b929acdcd5721b1869fde7cbf1  gcc/testsuite/g++.dg/coroutines/pr105287.C
! d790a308ebfc34da4805acce40128a0a  gcc/testsuite/g++.dg/coroutines/pr105301.C
  c5029b3ababd909d21fec108130560c2  gcc/testsuite/g++.dg/coroutines/pr106188.C
  7801d6d5799eadc6c00398b3003e9a6d  gcc/testsuite/g++.dg/coroutines/pr107768.C
  2dcf11bf73d45c90e6be4a5ed46555a5  gcc/testsuite/g++.dg/coroutines/pr115550-preview-this.C
  b75b654187426934820f1e2a8a63aaad  gcc/testsuite/g++.dg/coroutines/pr116327-preview-this.C
  cbb42d13b1660a8eb1d40a3d88308140  gcc/testsuite/g++.dg/coroutines/pr93458-1-missing-traits.C
  d9151fc224e4913ed7ffacd748769917  gcc/testsuite/g++.dg/coroutines/pr93458-2-bad-traits.C
--- 14812,14842 ----
  5a6ab803d16d71889bbcfbe081300785  gcc/testsuite/g++.dg/coroutines/pr102454.C
  fcf423593c66a6801268d44dcd7b6ae1  gcc/testsuite/g++.dg/coroutines/pr102489.C
  85cc1b4c4f0e73f17a81693bed3275fa  gcc/testsuite/g++.dg/coroutines/pr103328.C
! 72ed4197105a0e5b283253be79a963fa  gcc/testsuite/g++.dg/coroutines/pr103868.C
  4be4670ffeb4857d864cfa5cfa5dc16f  gcc/testsuite/g++.dg/coroutines/pr104051.C
  b134bf48c5d1c37a3f48e0c7f25bd714  gcc/testsuite/g++.dg/coroutines/pr104981-preview-this.C
! 9bcaec9fc97ae958d52ca93f20348767  gcc/testsuite/g++.dg/coroutines/pr105287.C
! 3ed2837ec0a605227e3db035996b80d7  gcc/testsuite/g++.dg/coroutines/pr105301.C
! 3736008e5e89f5e62c30e8101e5acef0  gcc/testsuite/g++.dg/coroutines/pr105475-1.C
! 8d0fa780fa98582b56eeda555793b5a4  gcc/testsuite/g++.dg/coroutines/pr105475-2.C
! 92371c0570249bfe00b9ce6c9a9d4b73  gcc/testsuite/g++.dg/coroutines/pr105475-3.C
! 27fa89ff3b58b37e4344c5e638040611  gcc/testsuite/g++.dg/coroutines/pr105475-4.C
! 4fe427417f7f5d8d525b4d0c90beace6  gcc/testsuite/g++.dg/coroutines/pr105475-5.C
! 7357458562c1e0d36e5cb6f67af27450  gcc/testsuite/g++.dg/coroutines/pr105475-6.C
! dc116348933b70af69665c9477f14450  gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec-2.C
! bfb4d4da5fe86af369bbdec84872cc96  gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec.C
! 2d3e12d9f28b3d12f5381192430ca293  gcc/testsuite/g++.dg/coroutines/pr105475.C
  c5029b3ababd909d21fec108130560c2  gcc/testsuite/g++.dg/coroutines/pr106188.C
  7801d6d5799eadc6c00398b3003e9a6d  gcc/testsuite/g++.dg/coroutines/pr107768.C
+ fcfad9d83adada266f7987b8339f2669  gcc/testsuite/g++.dg/coroutines/pr110871.C
+ 9ea2b6247ebc58dcea5e8b7eddd7adca  gcc/testsuite/g++.dg/coroutines/pr110872.C
+ dd1706e477862bd429aba56e40a12665  gcc/testsuite/g++.dg/coroutines/pr111728.C
+ bc13f9bef9dfbb9f378794dc144f6b7f  gcc/testsuite/g++.dg/coroutines/pr112341-2.C
+ c30585d33347e6eb25da9da916e1da25  gcc/testsuite/g++.dg/coroutines/pr112341-3.C
+ d94eaf98fb64f996342be49a4c220def  gcc/testsuite/g++.dg/coroutines/pr112341.C
  2dcf11bf73d45c90e6be4a5ed46555a5  gcc/testsuite/g++.dg/coroutines/pr115550-preview-this.C
+ 8496292f23f33e07ff0fe7b9e8f1eb91  gcc/testsuite/g++.dg/coroutines/pr115906-yield.C
+ 9514f224b21eb90bcef5ab37ae609a92  gcc/testsuite/g++.dg/coroutines/pr115906.C
  b75b654187426934820f1e2a8a63aaad  gcc/testsuite/g++.dg/coroutines/pr116327-preview-this.C
  cbb42d13b1660a8eb1d40a3d88308140  gcc/testsuite/g++.dg/coroutines/pr93458-1-missing-traits.C
  d9151fc224e4913ed7ffacd748769917  gcc/testsuite/g++.dg/coroutines/pr93458-2-bad-traits.C
*************** e9b715cb41c54f5b179b4725b788e338  gcc/te
*** 14824,14837 ****
  a692885ae53653cf5947fa818a85f111  gcc/testsuite/g++.dg/coroutines/pr93458-4-bad-coro-handle.C
  45bb42ea728f75ccdc6c21be6a6ee8c3  gcc/testsuite/g++.dg/coroutines/pr93458-5-bad-coro-type.C
  0af70b4922e5ac7412278825e6452eb8  gcc/testsuite/g++.dg/coroutines/pr94288.C
! 5b804bd8735580b8a8d6c70ec3f70df8  gcc/testsuite/g++.dg/coroutines/pr94528.C
  a3782dccef07620df707f8dac0a7c64a  gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C
  f94b132c0aae8eaa2355126af9e65707  gcc/testsuite/g++.dg/coroutines/pr94752.C
  c41c0f3460d21e0c4db49f70ce077c29  gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C
  bd516c5865d9e7ccb7376cdd2e004d0f  gcc/testsuite/g++.dg/coroutines/pr94817.C
  80f2ddf6e7fa3b7d98d16dcb37394788  gcc/testsuite/g++.dg/coroutines/pr94829.C
! 05a78501dd3c25375f0da2bfd7901151  gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C
! 3b2a895d498722a8ce8da6f99f96117e  gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C
  fa1dba5da47078603d79923b5b343d43  gcc/testsuite/g++.dg/coroutines/pr94886-folly-3.C
  f41f630eebfc858cbd9471df42c4a56a  gcc/testsuite/g++.dg/coroutines/pr95050.C
  9d01ddcc0b1513ede783b802cb9b0351  gcc/testsuite/g++.dg/coroutines/pr95345.C
--- 14844,14857 ----
  a692885ae53653cf5947fa818a85f111  gcc/testsuite/g++.dg/coroutines/pr93458-4-bad-coro-handle.C
  45bb42ea728f75ccdc6c21be6a6ee8c3  gcc/testsuite/g++.dg/coroutines/pr93458-5-bad-coro-type.C
  0af70b4922e5ac7412278825e6452eb8  gcc/testsuite/g++.dg/coroutines/pr94288.C
! 844da37d9c2a92221e79e7ca2f78001b  gcc/testsuite/g++.dg/coroutines/pr94528.C
  a3782dccef07620df707f8dac0a7c64a  gcc/testsuite/g++.dg/coroutines/pr94682-preview-this.C
  f94b132c0aae8eaa2355126af9e65707  gcc/testsuite/g++.dg/coroutines/pr94752.C
  c41c0f3460d21e0c4db49f70ce077c29  gcc/testsuite/g++.dg/coroutines/pr94760-mismatched-traits-and-promise-prev.C
  bd516c5865d9e7ccb7376cdd2e004d0f  gcc/testsuite/g++.dg/coroutines/pr94817.C
  80f2ddf6e7fa3b7d98d16dcb37394788  gcc/testsuite/g++.dg/coroutines/pr94829.C
! c5ae54387794567cbde9f25938e1f958  gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C
! 692b01e05c2f7e4502c21442ec225059  gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C
  fa1dba5da47078603d79923b5b343d43  gcc/testsuite/g++.dg/coroutines/pr94886-folly-3.C
  f41f630eebfc858cbd9471df42c4a56a  gcc/testsuite/g++.dg/coroutines/pr95050.C
  9d01ddcc0b1513ede783b802cb9b0351  gcc/testsuite/g++.dg/coroutines/pr95345.C
*************** f3711dab25fac8bb7802f39735ea954d  gcc/te
*** 14866,14872 ****
  c9053b02ff32311dfd9d7b646bb29551  gcc/testsuite/g++.dg/coroutines/pr96749-2.C
  0dd229753914401c8af3e84d3934dbfc  gcc/testsuite/g++.dg/coroutines/pr97438.C
  7f93d96e5cf64c45c34eb259e9bb9c11  gcc/testsuite/g++.dg/coroutines/pr97587.C
! f095b3e5361e6b39aaa76b256225bae8  gcc/testsuite/g++.dg/coroutines/pr98118.C
  13e8e708074a4e784b2756a16cffac95  gcc/testsuite/g++.dg/coroutines/pr98480.C
  e7ca2ef0f0db55f629fcfb4d4227cd60  gcc/testsuite/g++.dg/coroutines/pr99047.C
  609255984b51c63eb216d8341218b2c3  gcc/testsuite/g++.dg/coroutines/pr99575.C
--- 14886,14892 ----
  c9053b02ff32311dfd9d7b646bb29551  gcc/testsuite/g++.dg/coroutines/pr96749-2.C
  0dd229753914401c8af3e84d3934dbfc  gcc/testsuite/g++.dg/coroutines/pr97438.C
  7f93d96e5cf64c45c34eb259e9bb9c11  gcc/testsuite/g++.dg/coroutines/pr97587.C
! b1fb25f5e346d416ca26445cdb59a356  gcc/testsuite/g++.dg/coroutines/pr98118.C
  13e8e708074a4e784b2756a16cffac95  gcc/testsuite/g++.dg/coroutines/pr98480.C
  e7ca2ef0f0db55f629fcfb4d4227cd60  gcc/testsuite/g++.dg/coroutines/pr99047.C
  609255984b51c63eb216d8341218b2c3  gcc/testsuite/g++.dg/coroutines/pr99575.C
*************** ea04e15128b4f7c9dcd59c8345a9ef96  gcc/te
*** 14941,14946 ****
--- 14961,14967 ----
  481e88dcb84e8744e467881b52fdd35e  gcc/testsuite/g++.dg/coroutines/torture/co-yield-00-triv.C
  f798da99709b1e34b10a6c7bc124ae72  gcc/testsuite/g++.dg/coroutines/torture/co-yield-01-multi.C
  533f6b6779be624c787c3d8224581009  gcc/testsuite/g++.dg/coroutines/torture/co-yield-02-loop.C
+ 5003e20fecb99fcad4236b3f7fcc70be  gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl-nondependent.C
  1a64401f549123a860eb6546ecfc4047  gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl.C
  35fdd7c5f62c8ba93820920aed888617  gcc/testsuite/g++.dg/coroutines/torture/co-yield-04-complex-local-state.C
  7dc5c1c2ec9373380b4639dc7a5afeac  gcc/testsuite/g++.dg/coroutines/torture/co-yield-05-co-aw.C
*************** c0b015cd02e07242444c2700f64e070a  gcc/te
*** 20204,20209 ****
--- 20225,20231 ----
  5fd97c22b2996faaa87a3aa20de08243  gcc/testsuite/g++.dg/cpp2a/constexpr-union6.C
  22d0d1f2f3c677d12d0e844ae12fd688  gcc/testsuite/g++.dg/cpp2a/constexpr-union7.C
  e94cea4fa4255420603d88768e70b36c  gcc/testsuite/g++.dg/cpp2a/constexpr-union8.C
+ 4e80378ab3af70b20b34dcf87e46941d  gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C
  6d84a7bd78f9867ce0a07e6b0d26241b  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual1.C
  974c3f89c0f3ffa8993db35751b7f993  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual10.C
  90499949f9ce8adc6318bfabadf24305  gcc/testsuite/g++.dg/cpp2a/constexpr-virtual11.C
*************** fdacf3bee1e8bb4f226b833e6e15f7e8  gcc/te
*** 20420,20425 ****
--- 20442,20448 ----
  7b5ee3bc7139628fd11e7399df817e81  gcc/testsuite/g++.dg/cpp2a/lambda-targ13.C
  c7b2313c64f226651e97ebc4e634cc95  gcc/testsuite/g++.dg/cpp2a/lambda-targ13a.C
  7b82b863c8a6f3c30784d618a2e3c535  gcc/testsuite/g++.dg/cpp2a/lambda-targ14.C
+ 8c0cfd54130aa654e2e50e1925316cab  gcc/testsuite/g++.dg/cpp2a/lambda-targ15.C
  d363d5590bc863dbb1f6bb96bad95b3c  gcc/testsuite/g++.dg/cpp2a/lambda-targ2.C
  d948ecca981f7c5de5ca48afc987ea36  gcc/testsuite/g++.dg/cpp2a/lambda-targ2a.C
  096118fef57f992a05319e3b6f8ba6a7  gcc/testsuite/g++.dg/cpp2a/lambda-targ3.C
*************** d8f7b87db1014927f2070e74b2efaaf2  gcc/te
*** 28376,28381 ****
--- 28399,28406 ----
  5960be7ee000af985534bf9ae84e9615  gcc/testsuite/g++.dg/template/friend81a.C
  ae55d6e48a2ac8b72c938dc82c696408  gcc/testsuite/g++.dg/template/friend84.C
  7b1e5908f61421fb93ba70039b7baafb  gcc/testsuite/g++.dg/template/friend85.C
+ 40f2052ca29ac45703070d7e1c57ce4d  gcc/testsuite/g++.dg/template/friend86.C
+ ab0d4ef98f5934bea97966eb11b99f85  gcc/testsuite/g++.dg/template/friend87.C
  59b5bf61b7f6210d3cf3b9b45692794a  gcc/testsuite/g++.dg/template/friend9.C
  d5d24fc94d133229a10c5b13f44c253b  gcc/testsuite/g++.dg/template/func1.C
  1959538a6f69b747e873f9e029cc6fa6  gcc/testsuite/g++.dg/template/func2.C
*************** fd872aba23fcbd09e4b5cb3b61dbaadf  gcc/te
*** 30718,30723 ****
--- 30743,30749 ----
  a2a1c47c22d508bea7ea5f6ecfa4f8e0  gcc/testsuite/g++.dg/warn/Wfloat-equal-1.C
  eccc2b2ed947b72890c78d9f36703c07  gcc/testsuite/g++.dg/warn/Wformat-1.C
  410904ada3f7963a6e257984ca090127  gcc/testsuite/g++.dg/warn/Wformat-2.C
+ 043066dc34a8f88f0f8349d9f0370f8a  gcc/testsuite/g++.dg/warn/Wformat-3.C
  7176ad1e7207328b46fc3387dcae316c  gcc/testsuite/g++.dg/warn/Wformat-char8_t-1.C
  c051125966f7b3d00fdd612ba7549043  gcc/testsuite/g++.dg/warn/Wformat-method.C
  9af8ba70e2572530afefa641561d5f5c  gcc/testsuite/g++.dg/warn/Wformat-pr71863.C
*************** ac37e529bda1269045c3681cc4b425dd  gcc/te
*** 35262,35267 ****
--- 35288,35295 ----
  2a9c6586ee584715fe05091ad7b38284  gcc/testsuite/g++.target/riscv/riscv.exp
  33bc1e793360d958223c97bd0dd123ad  gcc/testsuite/g++.target/riscv/rvv/autovec/bug-1.C
  bbffb78a05c981886c82c4d7bb1ab46a  gcc/testsuite/g++.target/riscv/rvv/autovec/bug-2.C
+ 65e822c3566d2be95d4e4a1852d2d11e  gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C
+ e0fcda19753adb81a996dcb37c1e40f0  gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C
  b073f099736b28c243e723ac86cb8fd5  gcc/testsuite/g++.target/riscv/rvv/base/attribute-riscv_vector_cc-error.C
  1b1bc5039f56e1bab95c9773c435167c  gcc/testsuite/g++.target/riscv/rvv/base/bug-1.C
  a9f8f7f709e90bb091acda48cbbacae5  gcc/testsuite/g++.target/riscv/rvv/base/bug-10.C
*************** aace2ed034a2ab98ac7097658cded7d2  gcc/te
*** 57734,57739 ****
--- 57762,57768 ----
  78f94a7be65d717b8374c731aed0783e  gcc/testsuite/gcc.target/aarch64/cond_op_imm_1.c
  3811d4cc6f8390eed0076b9d9707162e  gcc/testsuite/gcc.target/aarch64/construct_lane_zero_1.c
  00a4ff8c32a4c83ca879cf99e246a37d  gcc/testsuite/gcc.target/aarch64/copysign-bsl.c
+ 927ef34630674bf9ac07298af2fead8f  gcc/testsuite/gcc.target/aarch64/copysign-pr118892.c
  c73cc232fbaefd2daefb49e11b874722  gcc/testsuite/gcc.target/aarch64/copysign_1.c
  e98cf41b7514e2efc8676f309b7ae2ed  gcc/testsuite/gcc.target/aarch64/copysign_2.c
  f0d278d66f3c6d099e299ada3c0f2f5a  gcc/testsuite/gcc.target/aarch64/cpu-diagnostics-1.c
*************** f12479eade051fc653baa3b9e92457a8  gcc/te
*** 58257,58263 ****
  c3b3090c8cc6b28f90027aceb08f6ad7  gcc/testsuite/gcc.target/aarch64/pr113618.c
  65b79dfa682a9ae7b9e39d7180ffd699  gcc/testsuite/gcc.target/aarch64/pr114196.c
  e95d7302a79bebe0c38e93d641a753d8  gcc/testsuite/gcc.target/aarch64/pr114741.c
! d4fcc8bfa27a48a221e199a5e0c405dc  gcc/testsuite/gcc.target/aarch64/pr115258.c
  66fd5df571798b50c635d6e8c98d2a43  gcc/testsuite/gcc.target/aarch64/pr115258_2.c
  aad77ff8d57a3f0e3712d2f32526716c  gcc/testsuite/gcc.target/aarch64/pr116258.c
  b9ca6f13a261db1602a13a0c96147059  gcc/testsuite/gcc.target/aarch64/pr117186.c
--- 58286,58292 ----
  c3b3090c8cc6b28f90027aceb08f6ad7  gcc/testsuite/gcc.target/aarch64/pr113618.c
  65b79dfa682a9ae7b9e39d7180ffd699  gcc/testsuite/gcc.target/aarch64/pr114196.c
  e95d7302a79bebe0c38e93d641a753d8  gcc/testsuite/gcc.target/aarch64/pr114741.c
! 42370fd3ed1ddc64cfc7a151052b9b3b  gcc/testsuite/gcc.target/aarch64/pr115258.c
  66fd5df571798b50c635d6e8c98d2a43  gcc/testsuite/gcc.target/aarch64/pr115258_2.c
  aad77ff8d57a3f0e3712d2f32526716c  gcc/testsuite/gcc.target/aarch64/pr116258.c
  b9ca6f13a261db1602a13a0c96147059  gcc/testsuite/gcc.target/aarch64/pr117186.c
*************** df238b64cc974628a48afaac0cd271a1  gcc/te
*** 62695,62700 ****
--- 62724,62731 ----
  1e6a531b2e65bc8f68af2fa7690637f3  gcc/testsuite/gcc.target/aarch64/sve/pr113572.c
  32ab14334cab1c6336c74f3dc7e201db  gcc/testsuite/gcc.target/aarch64/sve/pr116238.c
  1b79fc9f352eda12d6be24fe2d93d5bc  gcc/testsuite/gcc.target/aarch64/sve/pr116259-1.c
+ 7a9f592904bf8164d78f33c4a1999e6a  gcc/testsuite/gcc.target/aarch64/sve/pr119351.c
+ 8a98f47ab523e811941601e0a8a76e48  gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c
  7e2aaf0806edd37415079b5c2e48b66c  gcc/testsuite/gcc.target/aarch64/sve/pr81003.c
  00b752a6e175de8b1a300df08f275461  gcc/testsuite/gcc.target/aarch64/sve/pr87563.c
  c56eeba71ad463673a1bdb30e7a94863  gcc/testsuite/gcc.target/aarch64/sve/pr87815.c
*************** d78f457d6a14c13cb80ab5757454c71c  gcc/te
*** 68426,68431 ****
--- 68457,68467 ----
  e6f8c16f16933f4321616345f9504093  gcc/testsuite/gcc.target/avr/torture/pr116407-2.c
  e4a3459589124a7656ce0cc1ace448d3  gcc/testsuite/gcc.target/avr/torture/pr116407-4.c
  f5f0a4821b45497a6a7311f96ebbd9bc  gcc/testsuite/gcc.target/avr/torture/pr116953.c
+ c02c9b09a64e3c14adfe954730cf8f3c  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c
+ 4075d89600bfef80102e75d0d4108ef3  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c
+ caa7b81fc83f2373b987ae3dec63aa32  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c
+ 9d65901f178212417bd03274e7a0ff1d  gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c
+ 51d04706ca0c4216d8d453fbe55f52ca  gcc/testsuite/gcc.target/avr/torture/pr119989.h
  0844a939ea2464d30cc8892c85b4aecc  gcc/testsuite/gcc.target/avr/torture/pr39633.c
  8fb17af722ee890b7fa08b5610cdb80e  gcc/testsuite/gcc.target/avr/torture/pr41885.c
  70b849f57ecf42299230b99b7734dd2d  gcc/testsuite/gcc.target/avr/torture/pr51374-1.c
*************** ba056af537a5d0b759601127a968797b  gcc/te
*** 86047,86053 ****
  aeef26bc58e2d29602800ba19c113617  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-65.c
  5122b26281c049bf3715ab32bb1b34fd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c
  8ed95034d9d4e11d99b97ae7d44a7cf1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-67.c
! 7aa3311624e9fe6ea41b991794814b64  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c
  86947ef0aec9e92b82058a6f3b232093  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-69.c
  239a71991054d87165b9b4fb41022244  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-7.c
  1afe708eca9c2f4be668b997c0b9b546  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-70.c
--- 86083,86089 ----
  aeef26bc58e2d29602800ba19c113617  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-65.c
  5122b26281c049bf3715ab32bb1b34fd  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-66.c
  8ed95034d9d4e11d99b97ae7d44a7cf1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-67.c
! b0741b83556a5f2dcc4450511217f31c  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c
  86947ef0aec9e92b82058a6f3b232093  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-69.c
  239a71991054d87165b9b4fb41022244  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-7.c
  1afe708eca9c2f4be668b997c0b9b546  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-70.c
*************** aedb7500eb87a112f80fb4609b472748  gcc/te
*** 86251,86260 ****
  a6e85f1bf3d68b905f55eb7a3c5ea388  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c
  c0a5c2206ccb5cf2a7d4252a7f171aed  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c
  aa76ec6fcec01d05d6b7e67b164ae65d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c
! a0ccabaa56f4de23db0cc078e751382e  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c
  835d7f9ee00940eb208115ef87f2b36f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-13.c
  4aa61bc76d29783352fc122155853cb1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c
! 79ab5a358745a4c9625c4a93480c5abf  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c
  6dad560e0fe6f25d552e9d7564fcc323  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-4.c
  e64d9dead1e3f09caff223e861cbf8b5  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c
  3276cb746e6a5dbff84541fcbda21147  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-6.c
--- 86287,86296 ----
  a6e85f1bf3d68b905f55eb7a3c5ea388  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-1.c
  c0a5c2206ccb5cf2a7d4252a7f171aed  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-10.c
  aa76ec6fcec01d05d6b7e67b164ae65d  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-11.c
! 7e0961fe77821e125a6e271946471094  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c
  835d7f9ee00940eb208115ef87f2b36f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-13.c
  4aa61bc76d29783352fc122155853cb1  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-2.c
! 30b3024950e193cc3405763281bdd816  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c
  6dad560e0fe6f25d552e9d7564fcc323  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-4.c
  e64d9dead1e3f09caff223e861cbf8b5  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-5.c
  3276cb746e6a5dbff84541fcbda21147  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-6.c
*************** ad8c9db77e7c9613e44dda49fe473d0f  gcc/te
*** 86345,86351 ****
  04e99cb99f96b2b8c472e494b32135f9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-7.c
  0431d01db3243bcc2080b7c3f5df7bf6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-8.c
  f272a5f941dae54178996abf83a2d35f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-1.c
! 8f330203b47b99b85cfb134a96bf0573  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c
  861b8565e70a72c65cbabbbab3a2c957  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c
  74641d520de3f75906323a1cc88bbe61  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c
  d7fbcf64fbb0d5c5eafc00eaf59b4014  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c
--- 86381,86387 ----
  04e99cb99f96b2b8c472e494b32135f9  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-7.c
  0431d01db3243bcc2080b7c3f5df7bf6  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_single_vtype-8.c
  f272a5f941dae54178996abf83a2d35f  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-1.c
! 078a865bb4db96c4b8a3b820ca8079eb  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c
  861b8565e70a72c65cbabbbab3a2c957  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-11.c
  74641d520de3f75906323a1cc88bbe61  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-12.c
  d7fbcf64fbb0d5c5eafc00eaf59b4014  gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-13.c
*************** e3c69b81e7d385db78383732df227743  gcc/te
*** 99549,99554 ****
--- 99585,99591 ----
  e9e87e079e88e1bdbe28a6f7713a7a67  gcc/testsuite/gfortran.dg/pure_formal_proc_1.f90
  006224426a5d47d586dc67e3c0a1d85a  gcc/testsuite/gfortran.dg/pure_formal_proc_2.f90
  8e2be4aa51fece7f0e0f3d47a32eefd7  gcc/testsuite/gfortran.dg/pure_formal_proc_3.f90
+ 771ce14609de0ca10f0e5898e79fdad7  gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90
  705e27cebf71096beecc3e95d1e9d6f5  gcc/testsuite/gfortran.dg/pure_initializer_1.f90
  e004777cc16d5ca611aa373cfeb2476d  gcc/testsuite/gfortran.dg/pure_initializer_2.f90
  78598283a1854329ecefb2cb4f92fead  gcc/testsuite/gfortran.dg/pure_initializer_3.f90
*************** ec0e3914d3f5df5bec3a4fd8dcf1c0af  gcc/te
*** 105766,105771 ****
--- 105803,105810 ----
  f0f18b0d11f15d53150f63d507b4fe27  gcc/testsuite/go.dg/mapclear.go
  f4934ebcbb4c70da693926344d413e73  gcc/testsuite/go.dg/mapstring.go
  06684950b155e4bf5c6b312c04959201  gcc/testsuite/go.dg/pr113636.go
+ e101b1e8f56fbd988ceb64595039d449  gcc/testsuite/go.dg/pr119533-riscv-2.go
+ 7576e16c4b661bcce37c78e30773c400  gcc/testsuite/go.dg/pr119533-riscv.go
  a15752f522823a4bb86ac0b6d5e86305  gcc/testsuite/go.dg/undef-1.go
  922b41af54f5d7211d9ae73b47a46d1b  gcc/testsuite/go.go-torture/execute/array-1.go
  a06ac97125a90b106e6e0dfd7a0cd8cb  gcc/testsuite/go.go-torture/execute/array-2.go
*************** b7460c0b3311c71ba1ef5043c5447538  gcc/te
*** 107951,107957 ****
  aed587b341d738358d9328ab172f93da  gcc/testsuite/lib/gm2-dg.exp
  0c45478588b43265d66b10c2ffcf002a  gcc/testsuite/lib/gm2-simple.exp
  d0cdece43dd266f32823b9e46080120b  gcc/testsuite/lib/gm2-torture.exp
! 087dac28812f4cb43c225a62b65903d4  gcc/testsuite/lib/gm2.exp
  daf210c75c8c031bf07f93be2090cbd1  gcc/testsuite/lib/gnat-dg.exp
  98152f3b1fe75d1a3b2b86fa69c5f548  gcc/testsuite/lib/gnat.exp
  ea1a8984df21eb7b429a00bc3d0a99c7  gcc/testsuite/lib/go-dg.exp
--- 107990,107996 ----
  aed587b341d738358d9328ab172f93da  gcc/testsuite/lib/gm2-dg.exp
  0c45478588b43265d66b10c2ffcf002a  gcc/testsuite/lib/gm2-simple.exp
  d0cdece43dd266f32823b9e46080120b  gcc/testsuite/lib/gm2-torture.exp
! d9087c1e97ff4e4e47122b8e0728d9dd  gcc/testsuite/lib/gm2.exp
  daf210c75c8c031bf07f93be2090cbd1  gcc/testsuite/lib/gnat-dg.exp
  98152f3b1fe75d1a3b2b86fa69c5f548  gcc/testsuite/lib/gnat.exp
  ea1a8984df21eb7b429a00bc3d0a99c7  gcc/testsuite/lib/go-dg.exp
*************** b007b2d97ecc0ea9c1d6d6f84e9ebbeb  gcc/tr
*** 110242,110248 ****
  7ab93074a98aa287ba55a5656cd28374  gcc/tree-vect-patterns.cc
  7d8505e37be0d60874402ed24f0b78ff  gcc/tree-vect-slp-patterns.cc
  62afed2a3920f38b0d29565df04b36c8  gcc/tree-vect-slp.cc
! f3d57a11ffdd4b525cb3a0c75233ab98  gcc/tree-vect-stmts.cc
  795c5280c71f566f4b3e8c7fdcc3b609  gcc/tree-vector-builder.cc
  250ce9e7ca93bb776afda377af2c190d  gcc/tree-vector-builder.h
  c5a03f7f18d4c4b5f0a74529e044ddfe  gcc/tree-vectorizer.cc
--- 110281,110287 ----
  7ab93074a98aa287ba55a5656cd28374  gcc/tree-vect-patterns.cc
  7d8505e37be0d60874402ed24f0b78ff  gcc/tree-vect-slp-patterns.cc
  62afed2a3920f38b0d29565df04b36c8  gcc/tree-vect-slp.cc
! fdda4ebc0219dbf056f89bcd39de70d3  gcc/tree-vect-stmts.cc
  795c5280c71f566f4b3e8c7fdcc3b609  gcc/tree-vector-builder.cc
  250ce9e7ca93bb776afda377af2c190d  gcc/tree-vector-builder.h
  c5a03f7f18d4c4b5f0a74529e044ddfe  gcc/tree-vectorizer.cc
*************** c03a072efac9b30f8f8429ac52fd246b  libato
*** 110473,110479 ****
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! 8e09d5e498861bb0901c9f9843e2afae  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  f42ca6bde120a9a2e7ebab3dabe77083  libbacktrace/Makefile.am
  c8d10c863872511332b5d196c2937d5f  libbacktrace/Makefile.in
--- 110512,110518 ----
  8a7308fda7ed1543cb9e3be0f8e47bce  libatomic/testsuite/libatomic.c/atomic-store-5.c
  40618200985a15bcba64f871863da498  libatomic/testsuite/libatomic.c/c.exp
  97b0c9cdfcb733664bdf4efe0f5dc449  libatomic/testsuite/libatomic.c/generic-2.c
! d73420fc4dcb0eafa41d5a7b307d506d  libbacktrace/ChangeLog
  eb3a88b53140eb234a99a4b3a55e56bf  libbacktrace/ChangeLog.jit
  f42ca6bde120a9a2e7ebab3dabe77083  libbacktrace/Makefile.am
  c8d10c863872511332b5d196c2937d5f  libbacktrace/Makefile.in
*************** a3eb5dee2788fe0a6c42502ba658eddd  libffi
*** 111101,111111 ****
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 3700263e97d834322a38d17a9606d3d5  libgcc/ChangeLog
  3320df74831ba5bd1c34f226b49cc935  libgcc/Makefile.in
  23fc6c0b801b3b6af6581c2a632dc732  libgcc/c++-minimal/README
  90a82b364e40fe9eb1972d8000451364  libgcc/c++-minimal/guard.c
! e9c37840352bfc3c15883ff598a525c0  libgcc/config.host
  d3aae3117b3c5bd56670a3d96eccd46f  libgcc/config.in
  a1c25e1b6c64264e3d71b24592aaab9e  libgcc/config/aarch64/__aarch64_have_sme.c
  b5f68e932b1d70e09c198779aaf14e5f  libgcc/config/aarch64/__arm_sme_state.S
--- 111140,111150 ----
  0f3c94e520870e194cf525de7ec404dc  libffi/testsuite/libffi.go/ffitest.h
  6cfb66c1c00023abb2c2276d85f16e77  libffi/testsuite/libffi.go/go.exp
  189dc193fd0e627a2d55b2e84871edc5  libffi/testsuite/libffi.go/static-chain.h
! 14034f79f642dbb0cda1dba108892b43  libgcc/ChangeLog
  3320df74831ba5bd1c34f226b49cc935  libgcc/Makefile.in
  23fc6c0b801b3b6af6581c2a632dc732  libgcc/c++-minimal/README
  90a82b364e40fe9eb1972d8000451364  libgcc/c++-minimal/guard.c
! e072fd21c826562e8df7200d67fe023d  libgcc/config.host
  d3aae3117b3c5bd56670a3d96eccd46f  libgcc/config.in
  a1c25e1b6c64264e3d71b24592aaab9e  libgcc/config/aarch64/__aarch64_have_sme.c
  b5f68e932b1d70e09c198779aaf14e5f  libgcc/config/aarch64/__arm_sme_state.S
*************** c648b3441acf03960443d5a3d1b7e4d7  libgcc
*** 111486,111492 ****
  c6afe173595c17ffb20e9c76a90f5158  libgcc/config/i386/t-crtstuff
  9bd719f83d655207581528ab5e7b7354  libgcc/config/i386/t-cygming
  a56b9c84f7b8c5427982b9c1ac4d0268  libgcc/config/i386/t-cygwin
! ab24e8c90feb5a86f9ff59988a9bcc43  libgcc/config/i386/t-darwin
  2005c91878a4a69d60c9418077eefa97  libgcc/config/i386/t-dlldir
  0a87d076e42adda36ab55bbaaac59649  libgcc/config/i386/t-dlldir-x
  68adad1226ee1737a6a8d12b84a63297  libgcc/config/i386/t-dragonfly
--- 111525,111531 ----
  c6afe173595c17ffb20e9c76a90f5158  libgcc/config/i386/t-crtstuff
  9bd719f83d655207581528ab5e7b7354  libgcc/config/i386/t-cygming
  a56b9c84f7b8c5427982b9c1ac4d0268  libgcc/config/i386/t-cygwin
! e831a13e330d0eb6ffa779c755d5fe3d  libgcc/config/i386/t-darwin
  2005c91878a4a69d60c9418077eefa97  libgcc/config/i386/t-dlldir
  0a87d076e42adda36ab55bbaaac59649  libgcc/config/i386/t-dlldir-x
  68adad1226ee1737a6a8d12b84a63297  libgcc/config/i386/t-dragonfly
*************** e1e7c19e107b92d459cf5a479c67f241  libgcc
*** 112269,112275 ****
  53690e61b80619f105c4f40c5d9a8acd  libgcc/config/rs6000/sol-cn.S
  3fa6bf8673b3a7fa2278aeb2fe1824f4  libgcc/config/rs6000/t-aix-cxa
  0d6637a7e112c021e7ce371918c7659c  libgcc/config/rs6000/t-crtstuff
! b780b81d7bccdf7af090dbcd3e639dd1  libgcc/config/rs6000/t-darwin
  a8ea28c94f3264c3602a98b4728fed82  libgcc/config/rs6000/t-darwin-ehs
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-darwin64
  937ecf40521955d9efb093ab09a1e074  libgcc/config/rs6000/t-e500v1-fp
--- 112308,112314 ----
  53690e61b80619f105c4f40c5d9a8acd  libgcc/config/rs6000/sol-cn.S
  3fa6bf8673b3a7fa2278aeb2fe1824f4  libgcc/config/rs6000/t-aix-cxa
  0d6637a7e112c021e7ce371918c7659c  libgcc/config/rs6000/t-crtstuff
! bc91baf0523c8475334ca80d6ff265c4  libgcc/config/rs6000/t-darwin
  a8ea28c94f3264c3602a98b4728fed82  libgcc/config/rs6000/t-darwin-ehs
  a0014912b4b08cfbe887d9945460e370  libgcc/config/rs6000/t-darwin64
  937ecf40521955d9efb093ab09a1e074  libgcc/config/rs6000/t-e500v1-fp
*************** f199b38114ce849b77b38bd475d72cff  libgcc
*** 112369,112374 ****
--- 112408,112414 ----
  060a49bb5c4a53a2125123d4cbd571de  libgcc/config/t-crtstuff-pic
  3189748f203afc9349dffab9fb4b3225  libgcc/config/t-darwin
  f699f9e7159ba2c6033406086c5c8299  libgcc/config/t-darwin-ehs
+ 1b055dd68e433300709a246c1b88d25b  libgcc/config/t-darwin-libgccs1
  5f05c653ae1e197bae3fc3fc5ca1e59d  libgcc/config/t-darwin-min-1
  b1115059309b9095620433d14c0042cf  libgcc/config/t-darwin-min-11
  d8138086c2f686d6fb17804f19019954  libgcc/config/t-darwin-min-5
*************** d828e38384c506bf5e7d5a3c02725a37  libssp
*** 123487,123493 ****
  7bb3c32ba0a48d1cf785305e1b783eb6  libssp/strncpy-chk.c
  a19c79c1d86436e86b0fee41e6cf6b15  libssp/vsnprintf-chk.c
  145156e880b03115b393070d0ed37be3  libssp/vsprintf-chk.c
! b372d82d9088c30e4d44ac94f8713d16  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 123527,123533 ----
  7bb3c32ba0a48d1cf785305e1b783eb6  libssp/strncpy-chk.c
  a19c79c1d86436e86b0fee41e6cf6b15  libssp/vsnprintf-chk.c
  145156e880b03115b393070d0ed37be3  libssp/vsprintf-chk.c
! 663f0da2438793a8bb38e68ff50dcd98  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** afef6bb168d2a386d2dc4aaf2937c1d1  libstd
*** 124239,124245 ****
  59fb2d3661995c86a3996a5d1af055af  libstdc++-v3/include/bits/range_access.h
  b320b8e354287c4e241d67f2b75eff17  libstdc++-v3/include/bits/ranges_algo.h
  6cb193dd721dcfc25fcaee8dfea5e5fe  libstdc++-v3/include/bits/ranges_algobase.h
! ae1ab9fb68e2ef12d6d87c232016a29f  libstdc++-v3/include/bits/ranges_base.h
  2b75fae9285c2ca3120c6d7191768285  libstdc++-v3/include/bits/ranges_cmp.h
  66406b0b277e3b6df527a052145d6990  libstdc++-v3/include/bits/ranges_uninitialized.h
  6b723b82f7c41537c2bba4766e5d0639  libstdc++-v3/include/bits/ranges_util.h
--- 124279,124285 ----
  59fb2d3661995c86a3996a5d1af055af  libstdc++-v3/include/bits/range_access.h
  b320b8e354287c4e241d67f2b75eff17  libstdc++-v3/include/bits/ranges_algo.h
  6cb193dd721dcfc25fcaee8dfea5e5fe  libstdc++-v3/include/bits/ranges_algobase.h
! 8acf5ee995f9787021a67b3f8d9c591b  libstdc++-v3/include/bits/ranges_base.h
  2b75fae9285c2ca3120c6d7191768285  libstdc++-v3/include/bits/ranges_cmp.h
  66406b0b277e3b6df527a052145d6990  libstdc++-v3/include/bits/ranges_uninitialized.h
  6b723b82f7c41537c2bba4766e5d0639  libstdc++-v3/include/bits/ranges_util.h
*************** b95756c8b75f0ba0696fe0d53e25c2c8  libstd
*** 124900,124906 ****
  41cd6b791822b87ce3f2e3e2bc0d425d  libstdc++-v3/include/std/mutex
  b162db38fed9250df89cd38bf8a9f2a9  libstdc++-v3/include/std/numbers
  bdc0f4ffef7dc0e791075f89161516f2  libstdc++-v3/include/std/numeric
! fa06e136fe019296e0c5f918628cfaef  libstdc++-v3/include/std/optional
  353d6fc3c0221776b62d5b69214e7292  libstdc++-v3/include/std/ostream
  07e31c70075a842a98e81ebc3305e85a  libstdc++-v3/include/std/print
  d68f065be22a4221aaa0a24978377953  libstdc++-v3/include/std/queue
--- 124940,124946 ----
  41cd6b791822b87ce3f2e3e2bc0d425d  libstdc++-v3/include/std/mutex
  b162db38fed9250df89cd38bf8a9f2a9  libstdc++-v3/include/std/numbers
  bdc0f4ffef7dc0e791075f89161516f2  libstdc++-v3/include/std/numeric
! d7b2e090e45e539512d63eec607efb27  libstdc++-v3/include/std/optional
  353d6fc3c0221776b62d5b69214e7292  libstdc++-v3/include/std/ostream
  07e31c70075a842a98e81ebc3305e85a  libstdc++-v3/include/std/print
  d68f065be22a4221aaa0a24978377953  libstdc++-v3/include/std/queue
*************** bddbb7be2378eb8626192bffd40abb6a  libstd
*** 125923,125929 ****
  db0a805216c03f5a0a0db91705a543a1  libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
  598507498ac2d9a771f58691a2450753  libstdc++-v3/testsuite/20_util/function/cons/55320.cc
  82e211f19ed1a01a982a4282d0559136  libstdc++-v3/testsuite/20_util/function/cons/57465.cc
! ca608fcc60b0b1c480c8cea18bc2d21e  libstdc++-v3/testsuite/20_util/function/cons/70692.cc
  36ab35c19f1c162fe8810f0511535d8d  libstdc++-v3/testsuite/20_util/function/cons/72820.cc
  3b7c473d093933125998cbe7248db125  libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
  71bb895a176f7f859109376c80a523de  libstdc++-v3/testsuite/20_util/function/cons/callable.cc
--- 125963,125969 ----
  db0a805216c03f5a0a0db91705a543a1  libstdc++-v3/testsuite/20_util/function/cmp/cmp_neg.cc
  598507498ac2d9a771f58691a2450753  libstdc++-v3/testsuite/20_util/function/cons/55320.cc
  82e211f19ed1a01a982a4282d0559136  libstdc++-v3/testsuite/20_util/function/cons/57465.cc
! a4c70ba76af9268062433ab3a3bff6cc  libstdc++-v3/testsuite/20_util/function/cons/70692.cc
  36ab35c19f1c162fe8810f0511535d8d  libstdc++-v3/testsuite/20_util/function/cons/72820.cc
  3b7c473d093933125998cbe7248db125  libstdc++-v3/testsuite/20_util/function/cons/addressof.cc
  71bb895a176f7f859109376c80a523de  libstdc++-v3/testsuite/20_util/function/cons/callable.cc
*************** b5ce23996a64f1a88f204a44baa82865  libstd
*** 128596,128602 ****
  88c493721a3b1291aafd344de1cf9588  libstdc++-v3/testsuite/23_containers/map/23781_neg.cc
  871a239486b7e16f06af68d7262f5bc4  libstdc++-v3/testsuite/23_containers/map/48101-2_neg.cc
  42ed44e4d5d31eaca300187135b9154b  libstdc++-v3/testsuite/23_containers/map/48101-3_neg.cc
! 92e754067b9039a50abcbe1de92c8499  libstdc++-v3/testsuite/23_containers/map/48101_neg.cc
  86609a3c5d43743d2d219b14893ea6d8  libstdc++-v3/testsuite/23_containers/map/56613.cc
  4a4d3c9e0f69d7a3790ecfb70289ed64  libstdc++-v3/testsuite/23_containers/map/58764.cc
  bdd3f33789b732f27bcb28fc2f13523c  libstdc++-v3/testsuite/23_containers/map/59872.cc
--- 128636,128642 ----
  88c493721a3b1291aafd344de1cf9588  libstdc++-v3/testsuite/23_containers/map/23781_neg.cc
  871a239486b7e16f06af68d7262f5bc4  libstdc++-v3/testsuite/23_containers/map/48101-2_neg.cc
  42ed44e4d5d31eaca300187135b9154b  libstdc++-v3/testsuite/23_containers/map/48101-3_neg.cc
! 45863b52e52d9b621ca891dfa7b5640c  libstdc++-v3/testsuite/23_containers/map/48101_neg.cc
  86609a3c5d43743d2d219b14893ea6d8  libstdc++-v3/testsuite/23_containers/map/56613.cc
  4a4d3c9e0f69d7a3790ecfb70289ed64  libstdc++-v3/testsuite/23_containers/map/58764.cc
  bdd3f33789b732f27bcb28fc2f13523c  libstdc++-v3/testsuite/23_containers/map/59872.cc
*************** c776d7b3f34dff6474482d9b5de1880e  libstd
*** 128696,128702 ****
  6ccaee04985ce224c33e5fc73a956456  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
  150338a084f3a0738a36afc5f15ed10f  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
  c4624b6419b4f7adb80f886cc6aeb43f  libstdc++-v3/testsuite/23_containers/multimap/48101-3_neg.cc
! b614f8d8ebf7b70f2e84512fa25e8cbc  libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc
  b825a0f92eb4993a864667b2efd64cfd  libstdc++-v3/testsuite/23_containers/multimap/58764.cc
  29eec7cec87b92e6f2404ed82ac65ff1  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy.cc
  d9f45f7ea6025867790aaedde3f907fc  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy_assign.cc
--- 128736,128742 ----
  6ccaee04985ce224c33e5fc73a956456  libstdc++-v3/testsuite/23_containers/multimap/23781_neg.cc
  150338a084f3a0738a36afc5f15ed10f  libstdc++-v3/testsuite/23_containers/multimap/48101-2_neg.cc
  c4624b6419b4f7adb80f886cc6aeb43f  libstdc++-v3/testsuite/23_containers/multimap/48101-3_neg.cc
! 4e0fee712a2c8bbaffd24338f416b94f  libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc
  b825a0f92eb4993a864667b2efd64cfd  libstdc++-v3/testsuite/23_containers/multimap/58764.cc
  29eec7cec87b92e6f2404ed82ac65ff1  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy.cc
  d9f45f7ea6025867790aaedde3f907fc  libstdc++-v3/testsuite/23_containers/multimap/allocator/copy_assign.cc
*************** c893d8deea738e2cbab248ee750a4c96  libstd
*** 133909,133915 ****
  ab66f3fa4dc139afcc156c59a479336f  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
  7d11f440e59011cd0bc021ec389521c9  libstdc++-v3/testsuite/lib/dg-options.exp
  d7309c84b46425cbe14dfc56cd4fd2c4  libstdc++-v3/testsuite/lib/gdb-test.exp
! 4c7b663155b9ca86ed02bd0385249e31  libstdc++-v3/testsuite/lib/libstdc++.exp
  f0a7b9635ac2bde028508eae4e1b07d1  libstdc++-v3/testsuite/lib/prune.exp
  e99f7b2b082ed0e08179c7c2b4da912e  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
  69f91895143eb7ed5f04fbed3b016005  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
--- 133949,133955 ----
  ab66f3fa4dc139afcc156c59a479336f  libstdc++-v3/testsuite/ext/vstring/types/23767.cc
  7d11f440e59011cd0bc021ec389521c9  libstdc++-v3/testsuite/lib/dg-options.exp
  d7309c84b46425cbe14dfc56cd4fd2c4  libstdc++-v3/testsuite/lib/gdb-test.exp
! 779cbaf3c26c5f823d08bc193248854c  libstdc++-v3/testsuite/lib/libstdc++.exp
  f0a7b9635ac2bde028508eae4e1b07d1  libstdc++-v3/testsuite/lib/prune.exp
  e99f7b2b082ed0e08179c7c2b4da912e  libstdc++-v3/testsuite/libstdc++-abi/abi.exp
  69f91895143eb7ed5f04fbed3b016005  libstdc++-v3/testsuite/libstdc++-dg/conformance.exp
*************** cf134684ab65cd2ba549ffca0640fb98  libstd
*** 134195,134205 ****
  adf951476b71b82d5b9c948b4a722885  libstdc++-v3/testsuite/std/ranges/access/101782.cc
  210ac4a231ec17fb9a070c7981ba29ef  libstdc++-v3/testsuite/std/ranges/access/begin.cc
  6c9c13d6ff776ca4e793c7ee906a1ed0  libstdc++-v3/testsuite/std/ranges/access/begin_neg.cc
! 66a5ef2aabbf504b1d59bde113ab5e66  libstdc++-v3/testsuite/std/ranges/access/cbegin.cc
! bf36dbf46d04b0f6baeb7acbda70343b  libstdc++-v3/testsuite/std/ranges/access/cdata.cc
! 41559c4d6a630d6ef81c1018bdba7066  libstdc++-v3/testsuite/std/ranges/access/cend.cc
! 78aa0964159f240b50b1631d76dad66e  libstdc++-v3/testsuite/std/ranges/access/crbegin.cc
! 3f05bfcce99b1cb617e95addda53e1c5  libstdc++-v3/testsuite/std/ranges/access/crend.cc
  d2128b0082102a1cb5c2165cea8c1391  libstdc++-v3/testsuite/std/ranges/access/data.cc
  20c3074a30d80bcc84bd6f1d3eded3e3  libstdc++-v3/testsuite/std/ranges/access/empty.cc
  51299ab6655c15d166ed637184750b43  libstdc++-v3/testsuite/std/ranges/access/end.cc
--- 134235,134245 ----
  adf951476b71b82d5b9c948b4a722885  libstdc++-v3/testsuite/std/ranges/access/101782.cc
  210ac4a231ec17fb9a070c7981ba29ef  libstdc++-v3/testsuite/std/ranges/access/begin.cc
  6c9c13d6ff776ca4e793c7ee906a1ed0  libstdc++-v3/testsuite/std/ranges/access/begin_neg.cc
! 0bc7e8d1b5d9d43bfbdc7638e3c38cc4  libstdc++-v3/testsuite/std/ranges/access/cbegin.cc
! 3b4a90e903d06255a29023b88626994a  libstdc++-v3/testsuite/std/ranges/access/cdata.cc
! 36dbf6947ac9f8f9c8213535b70b6d52  libstdc++-v3/testsuite/std/ranges/access/cend.cc
! e887fd1743f35a0aad619089cb67b58a  libstdc++-v3/testsuite/std/ranges/access/crbegin.cc
! 776618922b82dd0a0d121aa35f8e11ec  libstdc++-v3/testsuite/std/ranges/access/crend.cc
  d2128b0082102a1cb5c2165cea8c1391  libstdc++-v3/testsuite/std/ranges/access/data.cc
  20c3074a30d80bcc84bd6f1d3eded3e3  libstdc++-v3/testsuite/std/ranges/access/empty.cc
  51299ab6655c15d166ed637184750b43  libstdc++-v3/testsuite/std/ranges/access/end.cc
*************** ee65a6de8ad143105b408542046b3555  libstd
*** 134233,134239 ****
  fe2fdbbc43ab07f7ee8c847580f30cfa  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
  f73af39b33a64ba02dc022a734aab875  libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
  5109b35cb89a31b5279ae5b25082e778  libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc
! 50c1180f3aca9863af474d8de23e11a6  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
  037c6e0dbd2e478a74843d86dddc6737  libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
  8b18ce8c4ce0aaa7f3ba523452a0939d  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
  21ecf6ed24c7b5d99de05b75bbf93812  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split_neg.cc
--- 134273,134279 ----
  fe2fdbbc43ab07f7ee8c847580f30cfa  libstdc++-v3/testsuite/std/ranges/adaptors/elements.cc
  f73af39b33a64ba02dc022a734aab875  libstdc++-v3/testsuite/std/ranges/adaptors/enumerate/1.cc
  5109b35cb89a31b5279ae5b25082e778  libstdc++-v3/testsuite/std/ranges/adaptors/filter.cc
! 5e7119997ede90d50635f58f7a4c6041  libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
  037c6e0dbd2e478a74843d86dddc6737  libstdc++-v3/testsuite/std/ranges/adaptors/join_with/1.cc
  8b18ce8c4ce0aaa7f3ba523452a0939d  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split.cc
  21ecf6ed24c7b5d99de05b75bbf93812  libstdc++-v3/testsuite/std/ranges/adaptors/lazy_split_neg.cc
*************** ea54d220ca18f153ec158224b3c21f3a  libstd
*** 134251,134258 ****
  90c2335f48a47534d686b693e690bdc5  libstdc++-v3/testsuite/std/ranges/adaptors/split.cc
  a0e630899068a41f2ddf2c81cbd386a4  libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc
  013c5d59b1d7d98320fd7d7586e0fca9  libstdc++-v3/testsuite/std/ranges/adaptors/take.cc
! bbebb8997ec35b5c8b696a0f0d25c54e  libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
! 4a7d73f001c0c9d42a830801a191ceb0  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
  c1b23609040e813a09294f54b708a162  libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
  41be7290c02060700426245314eda0c2  libstdc++-v3/testsuite/std/ranges/conv/1.cc
  63a2d6de25511179d0f6232f1739a1bd  libstdc++-v3/testsuite/std/ranges/conv/112803.cc
--- 134291,134298 ----
  90c2335f48a47534d686b693e690bdc5  libstdc++-v3/testsuite/std/ranges/adaptors/split.cc
  a0e630899068a41f2ddf2c81cbd386a4  libstdc++-v3/testsuite/std/ranges/adaptors/stride/1.cc
  013c5d59b1d7d98320fd7d7586e0fca9  libstdc++-v3/testsuite/std/ranges/adaptors/take.cc
! 38f2d82611b802b1b708e061df9fd674  libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
! 633f3ac39dd63c3936d88be7e19b24bc  libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
  c1b23609040e813a09294f54b708a162  libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
  41be7290c02060700426245314eda0c2  libstdc++-v3/testsuite/std/ranges/conv/1.cc
  63a2d6de25511179d0f6232f1739a1bd  libstdc++-v3/testsuite/std/ranges/conv/112803.cc
diff -Nrcpad gcc-14-20250425/fixincludes/ChangeLog gcc-14-20250502/fixincludes/ChangeLog
*** gcc-14-20250425/fixincludes/ChangeLog	Fri Apr 25 22:32:06 2025
--- gcc-14-20250502/fixincludes/ChangeLog	Fri May  2 22:32:15 2025
***************
*** 1,3 ****
--- 1,12 ----
+ 2025-05-01  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2024-06-27  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+ 
+ 	* fixincl.x: Regenerate.
+ 	* inclhack.def (apple_local_stdio_fn_deprecation): Also apply to
+ 	_stdio.h.
+ 
  2024-08-01  Release Manager
  
  	* GCC 14.2.0 released.
diff -Nrcpad gcc-14-20250425/fixincludes/fixincl.x gcc-14-20250502/fixincludes/fixincl.x
*** gcc-14-20250425/fixincludes/fixincl.x	Fri Apr 25 22:34:20 2025
--- gcc-14-20250502/fixincludes/fixincl.x	Fri May  2 22:33:44 2025
***************
*** 2,12 ****
   *
   * DO NOT EDIT THIS FILE   (fixincl.x)
   *
!  * It has been AutoGen-ed  August 17, 2023 at 10:16:38 AM by AutoGen 5.18.12
   * From the definitions    inclhack.def
   * and the template file   fixincl
   */
! /* DO NOT SVN-MERGE THIS FILE, EITHER Thu Aug 17 10:16:38 CEST 2023
   *
   * You must regenerate it.  Use the ./genfixes script.
   *
--- 2,12 ----
   *
   * DO NOT EDIT THIS FILE   (fixincl.x)
   *
!  * It has been AutoGen-ed  April  1, 2025 at 03:28:07 PM by AutoGen 5.18.16
   * From the definitions    inclhack.def
   * and the template file   fixincl
   */
! /* DO NOT SVN-MERGE THIS FILE, EITHER Tue Apr  1 15:28:07 BST 2025
   *
   * You must regenerate it.  Use the ./genfixes script.
   *
*************** tSCC zApple_Local_Stdio_Fn_DeprecationNa
*** 2619,2625 ****
   *  File name selection pattern
   */
  tSCC zApple_Local_Stdio_Fn_DeprecationList[] =
!   "stdio.h\0";
  /*
   *  Machine/OS name selection pattern
   */
--- 2619,2625 ----
   *  File name selection pattern
   */
  tSCC zApple_Local_Stdio_Fn_DeprecationList[] =
!   "stdio.h\0_stdio.h\0";
  /*
   *  Machine/OS name selection pattern
   */
diff -Nrcpad gcc-14-20250425/fixincludes/inclhack.def gcc-14-20250502/fixincludes/inclhack.def
*** gcc-14-20250425/fixincludes/inclhack.def	Fri Apr 25 22:32:06 2025
--- gcc-14-20250502/fixincludes/inclhack.def	Fri May  2 22:32:15 2025
*************** fix = {
*** 1273,1278 ****
--- 1273,1279 ----
      hackname  = apple_local_stdio_fn_deprecation;
      mach      = "*-*-*darwin2*";
      files     = stdio.h;
+     files     = _stdio.h;
      select    = "__deprecated_msg([^\n]*)$";
      c_fix     = format;
      c_fix_arg = "#if defined(__APPLE_LOCAL_DEPRECATIONS)\n"
diff -Nrcpad gcc-14-20250425/gcc/ChangeLog gcc-14-20250502/gcc/ChangeLog
*** gcc-14-20250425/gcc/ChangeLog	Fri Apr 25 22:32:06 2025
--- gcc-14-20250502/gcc/ChangeLog	Fri May  2 22:32:15 2025
***************
*** 1,3 ****
--- 1,97 ----
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2024-07-16  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/115434
+ 	PR c++/110871
+ 	PR c++/110872
+ 	* gimplify.cc (struct gimplify_ctx): Add a flag to show we are
+ 	expending a handler.
+ 	(gimplify_expr): When we are expanding a handler, and the body
+ 	transforms might have re-written DECL_RESULT into a gimple var,
+ 	ensure that hander references to DECL_RESULT are also re-written
+ 	to refer to the gimple var.  When we are processing an EH_ELSE
+ 	expression, then add it if either of the cleanup slots is in
+ 	use.
+ 
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* configure: Regenerate.
+ 	* configure.ac: Recognise PROJECT:ld-mmmm.nn.aa as an identifier
+ 	for Darwin's static linker.
+ 
+ 2025-05-01  Iain Sandoe  <iainsandoe@mini-05-seq.local>
+ 
+ 	Backported from master:
+ 	2025-04-15  Iain Sandoe  <iainsandoe@mini-05-seq.local>
+ 
+ 	PR target/116827
+ 	* ginclude/stddef.h: Undefine __PTRDIFF_T and __SIZE_T for module-
+ 	enabled c++ on Darwin/macOS platforms.
+ 
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 	    Andrew Pinski  <quic_apinski@quicinc.com>
+ 
+ 	PR target/119172
+ 	* config.in: Regenerate.
+ 	* config/darwin.h (DARWIN_PLATFORM_ID): Add the option to
+ 	use -macos_version_min where available.
+ 	* configure: Regenerate.
+ 	* configure.ac: Check for ld64 support of -macos_version_min.
+ 
+ 2025-04-30  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* config/avr/avr.md (xload_<mode>_libgcc): Clobber R21, Z.
+ 
+ 2025-04-30  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	PR target/119533
+ 	* config/riscv/riscv-vsetvl.cc (invalid_opt_bb_p): Check for
+ 	EDGE_ABNOMAL.
+ 	(pre_vsetvl::compute_lcm_local_properties): Initialize kill
+ 	bitmap.
+ 	Debug dump skipped edge.
+ 
+ 2025-04-30  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/119547
+ 	* config/riscv/riscv-vsetvl.cc (pre_vsetvl::earliest_fuse_vsetvl_info):
+ 	Do not perform lift if block is not transparent.
+ 
+ 2025-04-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	Backported from master:
+ 	2025-04-29  liuhongt  <hongtao.liu@intel.com>
+ 
+ 	* config/i386/x86-tune.def (X86_TUNE_DEST_FALSE_DEP_FOR_GLC):
+ 	Remove other processor except for GLC since this one is only
+ 	for GLC.
+ 
+ 2025-04-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/119351
+ 	* tree-vect-stmts.cc (vectorizable_early_exit): Mask both operands of
+ 	the gcond for partial masking support.
+ 
+ 2025-04-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/118892
+ 	* config/aarch64/aarch64.md (copysign<GPF:mode>3): Use
+ 	force_lowpart_subreg instead of lowpart_subreg.
+ 
  2025-04-24  Martin Jambor  <mjambor@suse.cz>
  
  	Backported from master:
diff -Nrcpad gcc-14-20250425/gcc/DATESTAMP gcc-14-20250502/gcc/DATESTAMP
*** gcc-14-20250425/gcc/DATESTAMP	Fri Apr 25 22:32:06 2025
--- gcc-14-20250502/gcc/DATESTAMP	Fri May  2 22:32:15 2025
***************
*** 1 ****
! 20250425
--- 1 ----
! 20250502
diff -Nrcpad gcc-14-20250425/gcc/ada/ChangeLog gcc-14-20250502/gcc/ada/ChangeLog
*** gcc-14-20250425/gcc/ada/ChangeLog	Fri Apr 25 22:32:06 2025
--- gcc-14-20250502/gcc/ada/ChangeLog	Fri May  2 22:32:15 2025
***************
*** 1,3 ****
--- 1,10 ----
+ 2025-04-30  Eric Botcazou  <ebotcazou@adacore.com>
+ 
+ 	PR ada/112958
+ 	* Makefile.rtl (LIBGNAT_TARGET_PAIRS) [x86 FreeBSD]: Add specific
+ 	version of s-dorepr.adb.
+ 	* libgnat/s-dorepr__freebsd.adb: New file.
+ 
  2025-04-04  Eric Botcazou  <ebotcazou@adacore.com>
  
  	* libgnat/a-ngcoar.adb (Eigensystem): Adjust notation and fix the
diff -Nrcpad gcc-14-20250425/gcc/ada/Makefile.rtl gcc-14-20250502/gcc/ada/Makefile.rtl
*** gcc-14-20250425/gcc/ada/Makefile.rtl	Fri Apr 25 22:32:06 2025
--- gcc-14-20250502/gcc/ada/Makefile.rtl	Fri May  2 22:32:16 2025
*************** ifeq ($(strip $(filter-out %86 freebsd%,
*** 1730,1735 ****
--- 1730,1736 ----
    $(TRASYM_DWARF_UNIX_PAIRS) \
    $(ATOMICS_TARGET_PAIRS) \
    $(X86_TARGET_PAIRS) \
+   s-dorepr.adb<libgnat/s-dorepr__freebsd.adb \
    system.ads<libgnat/system-freebsd.ads
  
    GNATLIB_SHARED = gnatlib-shared-dual
diff -Nrcpad gcc-14-20250425/gcc/ada/libgnat/s-dorepr__freebsd.adb gcc-14-20250502/gcc/ada/libgnat/s-dorepr__freebsd.adb
*** gcc-14-20250425/gcc/ada/libgnat/s-dorepr__freebsd.adb	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/ada/libgnat/s-dorepr__freebsd.adb	Fri May  2 22:32:16 2025
***************
*** 0 ****
--- 1,172 ----
+ ------------------------------------------------------------------------------
+ --                                                                          --
+ --                         GNAT COMPILER COMPONENTS                         --
+ --                                                                          --
+ --            S Y S T E M . D O U B L E _ R E A L . P R O D U C T           --
+ --                                                                          --
+ --                                 B o d y                                  --
+ --                                                                          --
+ --            Copyright (C) 2021-2025, Free Software Foundation, Inc.       --
+ --                                                                          --
+ -- GNAT is free software;  you can  redistribute it  and/or modify it under --
+ -- terms of the  GNU General Public License as published  by the Free Soft- --
+ -- ware  Foundation;  either version 3,  or (at your option) any later ver- --
+ -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
+ -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
+ -- or FITNESS FOR A PARTICULAR PURPOSE.                                     --
+ --                                                                          --
+ -- As a special exception 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/>.                                          --
+ --                                                                          --
+ -- GNAT was originally developed  by the GNAT team at  New York University. --
+ -- Extensive contributions were provided by Ada Core Technologies Inc.      --
+ --                                                                          --
+ ------------------------------------------------------------------------------
+ 
+ --  This is the x86/FreeBSD version of the separate package body
+ 
+ with Interfaces; use Interfaces;
+ 
+ separate (System.Double_Real)
+ 
+ package body Product is
+ 
+    procedure Split (N : Num; Hi : out Num; Lo : out Num);
+    --  Compute high part and low part of N
+ 
+    -----------
+    -- Split --
+    -----------
+ 
+    --  We use a bit manipulation algorithm instead of Veltkamp's splitting
+    --  because it is faster and has the property that the magnitude of the
+    --  high part is never larger than that of the input number, which will
+    --  avoid spurious overflows in the Two_Prod algorithm.
+ 
+    --  See the recent paper by Claude-Pierre Jeannerod, Jean-Michel Muller
+    --  and Paul Zimmermann: On various ways to split a floating-point number
+    --  ARITH 2018 - 25th IEEE Symposium on Computer Arithmetic, Jun 2018,
+    --  Amherst (MA), United States, pages 53-60.
+ 
+    procedure Split (N : Num; Hi : out Num; Lo : out Num) is
+       X : Num;
+ 
+    begin
+       --  Spill the input into the appropriate (maybe larger) bit container,
+       --  mask out the low bits and reload the modified value.
+ 
+       case Num'Machine_Mantissa is
+          when 24 =>
+             declare
+                Rep32 : aliased Interfaces.Unsigned_32;
+                Temp  : Num := N with Address => Rep32'Address;
+                pragma Annotate (CodePeer, Modified, Rep32);
+ 
+             begin
+                --  Mask out the low 12 bits
+ 
+                Rep32 := Rep32 and 16#FFFFF000#;
+ 
+                X := Temp;
+             end;
+ 
+          when 53 =>
+             declare
+                Rep64 : aliased array (1 .. 2) of Interfaces.Unsigned_64;
+                Temp  : Num := N with Address => Rep64'Address;
+                pragma Annotate (CodePeer, Modified, Rep64);
+ 
+             begin
+                --  Mask out the low 27 bits
+ 
+                Rep64 (1) := Rep64 (1) and 16#FFFFFFFFF8000000#;
+ 
+                X := Temp;
+             end;
+ 
+          when 64 =>
+             declare
+                Rep80 : aliased array (1 .. 2) of Interfaces.Unsigned_64;
+                Temp  : Num := N with Address => Rep80'Address;
+                pragma Annotate (CodePeer, Modified, Rep80);
+ 
+             begin
+                --  Mask out the low 32 bits
+ 
+                if System.Default_Bit_Order = High_Order_First then
+                   Rep80 (1) := Rep80 (1) and 16#FFFFFFFFFFFF0000#;
+                   Rep80 (2) := Rep80 (2) and 16#0000FFFFFFFFFFFF#;
+                else
+                   Rep80 (1) := Rep80 (1) and 16#FFFFFFFF00000000#;
+                end if;
+ 
+                X := Temp;
+             end;
+ 
+          when others =>
+             raise Program_Error;
+       end case;
+ 
+       --  Deal with denormalized numbers
+ 
+       if X = 0.0 then
+          Hi := N;
+          Lo := 0.0;
+       else
+          Hi := X;
+          Lo := N - X;
+       end if;
+    end Split;
+ 
+    --------------
+    -- Two_Prod --
+    --------------
+ 
+    function Two_Prod (A, B : Num) return Double_T is
+       P : constant Num := A * B;
+ 
+       Ahi, Alo, Bhi, Blo, E : Num;
+ 
+    begin
+       if Is_Infinity (P) or else Is_Zero (P) then
+          return (P, 0.0);
+ 
+       else
+          Split (A, Ahi, Alo);
+          Split (B, Bhi, Blo);
+ 
+          E := ((Ahi * Bhi - P) + Ahi * Blo + Alo * Bhi) + Alo * Blo;
+ 
+          return (P, E);
+       end if;
+    end Two_Prod;
+ 
+    -------------
+    -- Two_Sqr --
+    -------------
+ 
+    function Two_Sqr (A : Num) return Double_T is
+       Q : constant Num := A * A;
+ 
+       Hi, Lo, E : Num;
+ 
+    begin
+       if Is_Infinity (Q) or else Is_Zero (Q) then
+          return (Q, 0.0);
+ 
+       else
+          Split (A, Hi, Lo);
+ 
+          E := ((Hi * Hi - Q) + 2.0 * Hi * Lo) + Lo * Lo;
+ 
+          return (Q, E);
+       end if;
+    end Two_Sqr;
+ 
+ end Product;
diff -Nrcpad gcc-14-20250425/gcc/config/aarch64/aarch64.md gcc-14-20250502/gcc/config/aarch64/aarch64.md
*** gcc-14-20250425/gcc/config/aarch64/aarch64.md	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/config/aarch64/aarch64.md	Fri May  2 22:32:16 2025
***************
*** 7210,7216 ****
  
        emit_insn (gen_iorv2<v_int_equiv>3 (
  	lowpart_subreg (V2<V_INT_EQUIV>mode, operands[0], <MODE>mode),
! 	lowpart_subreg (V2<V_INT_EQUIV>mode, operands[1], <MODE>mode),
  	v_bitmask));
        DONE;
      }
--- 7210,7216 ----
  
        emit_insn (gen_iorv2<v_int_equiv>3 (
  	lowpart_subreg (V2<V_INT_EQUIV>mode, operands[0], <MODE>mode),
! 	force_lowpart_subreg (V2<V_INT_EQUIV>mode, operands[1], <MODE>mode),
  	v_bitmask));
        DONE;
      }
diff -Nrcpad gcc-14-20250425/gcc/config/avr/avr.md gcc-14-20250502/gcc/config/avr/avr.md
*** gcc-14-20250425/gcc/config/avr/avr.md	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/config/avr/avr.md	Fri May  2 22:32:16 2025
***************
*** 674,685 ****
--- 674,689 ----
    [(parallel [(set (reg:MOVMODE 22)
                (mem:MOVMODE (lo_sum:PSI (reg:QI 21)
                                         (reg:HI REG_Z))))
+               (clobber (reg:QI 21))
+               (clobber (reg:HI REG_Z))
                (clobber (reg:CC REG_CC))])])
  
  (define_insn "*xload_<mode>_libgcc"
    [(set (reg:MOVMODE 22)
          (mem:MOVMODE (lo_sum:PSI (reg:QI 21)
                                   (reg:HI REG_Z))))
+    (clobber (reg:QI 21))
+    (clobber (reg:HI REG_Z))
     (clobber (reg:CC REG_CC))]
    "avr_xload_libgcc_p (<MODE>mode)
     && reload_completed"
diff -Nrcpad gcc-14-20250425/gcc/config/darwin.h gcc-14-20250502/gcc/config/darwin.h
*** gcc-14-20250425/gcc/config/darwin.h	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/config/darwin.h	Fri May  2 22:32:16 2025
*************** extern GTY(()) int darwin_ms_struct;
*** 284,295 ****
  #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}"
  #endif
  
! #if LD64_HAS_PLATFORM_VERSION
! #define DARWIN_PLATFORM_ID \
!   "%{mmacosx-version-min=*: -platform_version macos %* 0.0} "
  #else
! #define DARWIN_PLATFORM_ID \
    "%{mmacosx-version-min=*:-macosx_version_min %*} "
  #endif
  
  /* Code built with mdynamic-no-pic does not support PIE/PIC, so  we disallow
--- 284,300 ----
  #define DARWIN_RDYNAMIC "%{rdynamic:%nrdynamic is not supported}"
  #endif
  
! #if LD64_HAS_MACOS_VERSION_MIN
! # define DARWIN_PLATFORM_ID \
!   "%{mmacosx-version-min=*:-macos_version_min %*} "
  #else
! # if LD64_HAS_PLATFORM_VERSION
! #  define DARWIN_PLATFORM_ID \
!   "%{mmacosx-version-min=*: -platform_version macos %* 0.0} "
! # else
! #  define DARWIN_PLATFORM_ID \
    "%{mmacosx-version-min=*:-macosx_version_min %*} "
+ # endif
  #endif
  
  /* Code built with mdynamic-no-pic does not support PIE/PIC, so  we disallow
diff -Nrcpad gcc-14-20250425/gcc/config/i386/x86-tune.def gcc-14-20250502/gcc/config/i386/x86-tune.def
*** gcc-14-20250425/gcc/config/i386/x86-tune.def	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/config/i386/x86-tune.def	Fri May  2 22:32:17 2025
*************** DEF_TUNE (X86_TUNE_SSE_PARTIAL_REG_CONVE
*** 87,94 ****
     several insns to break false dependency on the dest register for GLC
     micro-architecture.  */
  DEF_TUNE (X86_TUNE_DEST_FALSE_DEP_FOR_GLC,
! 	  "dest_false_dep_for_glc", m_SAPPHIRERAPIDS | m_GRANITERAPIDS
! 	  | m_GRANITERAPIDS_D | m_CORE_HYBRID | m_CORE_ATOM)
  
  /* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
     are resolved on SSE register parts instead of whole registers, so we may
--- 87,93 ----
     several insns to break false dependency on the dest register for GLC
     micro-architecture.  */
  DEF_TUNE (X86_TUNE_DEST_FALSE_DEP_FOR_GLC,
! 	  "dest_false_dep_for_glc", m_SAPPHIRERAPIDS | m_ALDERLAKE)
  
  /* X86_TUNE_SSE_SPLIT_REGS: Set for machines where the type and dependencies
     are resolved on SSE register parts instead of whole registers, so we may
diff -Nrcpad gcc-14-20250425/gcc/config/riscv/riscv-vsetvl.cc gcc-14-20250502/gcc/config/riscv/riscv-vsetvl.cc
*** gcc-14-20250425/gcc/config/riscv/riscv-vsetvl.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/config/riscv/riscv-vsetvl.cc	Fri May  2 22:32:17 2025
*************** invalid_opt_bb_p (basic_block cfg_bb)
*** 684,690 ****
    /* We only do LCM optimizations on blocks that are post dominated by
       EXIT block, that is, we don't do LCM optimizations on infinite loop.  */
    FOR_EACH_EDGE (e, ei, cfg_bb->succs)
!     if (e->flags & EDGE_FAKE)
        return true;
  
    return false;
--- 684,690 ----
    /* We only do LCM optimizations on blocks that are post dominated by
       EXIT block, that is, we don't do LCM optimizations on infinite loop.  */
    FOR_EACH_EDGE (e, ei, cfg_bb->succs)
!     if ((e->flags & EDGE_FAKE) || (e->flags & EDGE_ABNORMAL))
        return true;
  
    return false;
*************** pre_vsetvl::compute_lcm_local_properties
*** 2654,2659 ****
--- 2654,2660 ----
    m_avout = sbitmap_vector_alloc (last_basic_block_for_fn (cfun), num_exprs);
  
    bitmap_vector_clear (m_avloc, last_basic_block_for_fn (cfun));
+   bitmap_vector_clear (m_kill, last_basic_block_for_fn (cfun));
    bitmap_vector_clear (m_antloc, last_basic_block_for_fn (cfun));
    bitmap_vector_ones (m_transp, last_basic_block_for_fn (cfun));
  
*************** pre_vsetvl::compute_lcm_local_properties
*** 2705,2710 ****
--- 2706,2715 ----
  
        if (invalid_opt_bb_p (bb->cfg_bb ()))
  	{
+ 	  if (dump_file && (dump_flags & TDF_DETAILS))
+ 	    fprintf (dump_file, "\n --- skipping bb %u due to weird edge",
+ 		     bb->index ());
+ 
  	  bitmap_clear (m_antloc[bb_index]);
  	  bitmap_clear (m_transp[bb_index]);
  	}
*************** pre_vsetvl::earliest_fuse_vsetvl_info (i
*** 2965,2970 ****
--- 2970,2987 ----
  		  continue;
  		}
  
+ 	      /* We cannot lift a vsetvl into the source block if the block is
+ 		 not transparent WRT to it.
+ 		 This is too restrictive for blocks where a register's use only
+ 		 feeds into vsetvls and no regular insns.  One example is the
+ 		 test rvv/vsetvl/avl_single-68.c which is currently XFAILed for
+ 		 that reason.
+ 		 In order to support this case we'd need to check the vsetvl's
+ 		 AVL operand's uses in the source block and make sure they are
+ 		 only used in other vsetvls.  */
+ 	      if (!bitmap_bit_p (m_transp[eg->src->index], expr_index))
+ 		continue;
+ 
  	      if (dump_file && (dump_flags & TDF_DETAILS))
  		{
  		  fprintf (dump_file,
diff -Nrcpad gcc-14-20250425/gcc/config.in gcc-14-20250502/gcc/config.in
*** gcc-14-20250425/gcc/config.in	Fri Apr 25 22:34:20 2025
--- gcc-14-20250502/gcc/config.in	Fri May  2 22:33:45 2025
***************
*** 2296,2301 ****
--- 2296,2307 ----
  #endif
  
  
+ /* Define to 1 if ld64 supports '-macos_version_min'. */
+ #ifndef USED_FOR_TARGET
+ #undef LD64_HAS_MACOS_VERSION_MIN
+ #endif
+ 
+ 
  /* Define to 1 if ld64 supports '-platform_version'. */
  #ifndef USED_FOR_TARGET
  #undef LD64_HAS_PLATFORM_VERSION
diff -Nrcpad gcc-14-20250425/gcc/configure gcc-14-20250502/gcc/configure
*** gcc-14-20250425/gcc/configure	Fri Apr 25 22:34:20 2025
--- gcc-14-20250502/gcc/configure	Fri May  2 22:33:45 2025
*************** if test x"${DEFAULT_LINKER+set}" = x"set
*** 3940,3946 ****
      as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then
      ld64_flag=yes
    fi
  
--- 3940,3946 ----
      as_fn_error $? "cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER" "$LINENO" 5
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
      ld64_flag=yes
    fi
  
*************** if test x"$ld64_flag" = x"yes"; then
*** 32741,32746 ****
--- 32741,32747 ----
    # Set defaults for possibly untestable items.
    gcc_cv_ld64_export_dynamic=0
    gcc_cv_ld64_platform_version=0
+   gcc_cv_ld64_macos_version_min=0
    gcc_cv_ld64_demangle=0
  
    if test "$build" = "$host"; then
*************** $as_echo "$gcc_cv_ld64_major" >&6; }
*** 32773,32786 ****
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5
  $as_echo_n "checking linker version... " >&6; }
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'`
      fi
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5
  $as_echo "$gcc_cv_ld64_version" >&6; }
--- 32774,32789 ----
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
+       gcc_cv_ld64_macos_version_min=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker version" >&5
  $as_echo_n "checking linker version... " >&6; }
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \
!       | awk '{print $1}'`
      fi
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_version" >&5
  $as_echo "$gcc_cv_ld64_version" >&6; }
*************** $as_echo_n "checking linker for -platfor
*** 32811,32816 ****
--- 32814,32828 ----
      fi
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_platform_version" >&5
  $as_echo "$gcc_cv_ld64_platform_version" >&6; }
+ 
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking linker for -macos_version_min" >&5
+ $as_echo_n "checking linker for -macos_version_min... " >&6; }
+     gcc_cv_ld64_macos_version_min=1
+     if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
+       gcc_cv_ld64_macos_version_min=0
+     fi
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_ld64_macos_version_min" >&5
+ $as_echo "$gcc_cv_ld64_macos_version_min" >&6; }
    fi
  
    if test x"${gcc_cv_ld64_version}" != x; then
*************** cat >>confdefs.h <<_ACEOF
*** 32838,32843 ****
--- 32850,32861 ----
  #define LD64_HAS_PLATFORM_VERSION $gcc_cv_ld64_platform_version
  _ACEOF
  
+ 
+ 
+ cat >>confdefs.h <<_ACEOF
+ #define LD64_HAS_MACOS_VERSION_MIN $gcc_cv_ld64_macos_version_min
+ _ACEOF
+ 
  fi
  
  if test x"$dsymutil_flag" = x"yes"; then
diff -Nrcpad gcc-14-20250425/gcc/configure.ac gcc-14-20250502/gcc/configure.ac
*** gcc-14-20250425/gcc/configure.ac	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/configure.ac	Fri May  2 22:32:17 2025
*************** if test x"${DEFAULT_LINKER+set}" = x"set
*** 358,364 ****
      AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep ld64- > /dev/null; then
      ld64_flag=yes
    fi
    AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
--- 358,364 ----
      AC_MSG_ERROR([cannot execute: $DEFAULT_LINKER: check --with-ld or env. var. DEFAULT_LINKER])
    elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep GNU > /dev/null; then
      gnu_ld_flag=yes
!   elif $DEFAULT_LINKER -v < /dev/null 2>&1 | grep 'PROJECT:ld\(64\)*-' > /dev/null; then
      ld64_flag=yes
    fi
    AC_DEFINE_UNQUOTED(DEFAULT_LINKER,"$DEFAULT_LINKER",
*************** if test x"$ld64_flag" = x"yes"; then
*** 6430,6435 ****
--- 6430,6436 ----
    # Set defaults for possibly untestable items.
    gcc_cv_ld64_export_dynamic=0
    gcc_cv_ld64_platform_version=0
+   gcc_cv_ld64_macos_version_min=0
    gcc_cv_ld64_demangle=0
  
    if test "$build" = "$host"; then
*************** if test x"$ld64_flag" = x"yes"; then
*** 6460,6472 ****
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      AC_MSG_CHECKING(linker version)
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//'| awk '{print $1}'`
      fi
      AC_MSG_RESULT($gcc_cv_ld64_version)
  
--- 6461,6475 ----
      fi
      if test "$gcc_cv_ld64_major" -ge 512; then
        gcc_cv_ld64_platform_version=1
+       gcc_cv_ld64_macos_version_min=1
      fi
    elif test -x "$gcc_cv_ld" -a "$darwin_try_test" -eq 1; then
      # If the version was not specified, try to find it.
      AC_MSG_CHECKING(linker version)
      if test x"${gcc_cv_ld64_version}" = x; then
!       gcc_cv_ld64_version=`$gcc_cv_ld -v 2>&1 | $EGREP 'ld64|dyld|PROJECT:ld' \
!       | sed -e 's/.*ld64-//' -e 's/.*dyld-//' -e 's/.*PROJECT:ld-//' \
!       | awk '{print $1}'`
      fi
      AC_MSG_RESULT($gcc_cv_ld64_version)
  
*************** if test x"$ld64_flag" = x"yes"; then
*** 6490,6495 ****
--- 6493,6505 ----
        gcc_cv_ld64_platform_version=0
      fi
      AC_MSG_RESULT($gcc_cv_ld64_platform_version)
+ 
+     AC_MSG_CHECKING(linker for -macos_version_min)
+     gcc_cv_ld64_macos_version_min=1
+     if $gcc_cv_ld -macos_version_min 10.5 < /dev/null 2>&1 | grep 'unknown option' > /dev/null; then
+       gcc_cv_ld64_macos_version_min=0
+     fi
+     AC_MSG_RESULT($gcc_cv_ld64_macos_version_min)
    fi
  
    if test x"${gcc_cv_ld64_version}" != x; then
*************** if test x"$ld64_flag" = x"yes"; then
*** 6505,6510 ****
--- 6515,6523 ----
  
    AC_DEFINE_UNQUOTED(LD64_HAS_PLATFORM_VERSION, $gcc_cv_ld64_platform_version,
    [Define to 1 if ld64 supports '-platform_version'.])
+ 
+   AC_DEFINE_UNQUOTED(LD64_HAS_MACOS_VERSION_MIN, $gcc_cv_ld64_macos_version_min,
+   [Define to 1 if ld64 supports '-macos_version_min'.])
  fi
  
  if test x"$dsymutil_flag" = x"yes"; then
diff -Nrcpad gcc-14-20250425/gcc/cp/ChangeLog gcc-14-20250502/gcc/cp/ChangeLog
*** gcc-14-20250425/gcc/cp/ChangeLog	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/ChangeLog	Fri May  2 22:32:17 2025
***************
*** 1,3 ****
--- 1,167 ----
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2024-08-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 		    Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/105475
+ 	* coroutines.cc (struct coroutine_info): Add from_address.
+ 	Carries the from_address member we looked up earlier.
+ 	(coro_resume_identifier): Remove.  Unused.
+ 	(coro_init_identifiers): Do not initialize the above.
+ 	(struct susp_frame_data): Remove unused members, provide a CTOR.
+ 	(void_coro_handle_address): New variable.  Contains the baselink
+ 	for the std::coroutine_handle<void>::address() instance method.
+ 	(get_handle_type_address): New function.  Looks up and validates
+ 	handle_type::address in a given handle_type.
+ 	(get_handle_type_from_address): New function.  Looks up and
+ 	validates handle_type::from_address in a given handle_type.
+ 	(coro_promise_type_found_p): Remove reliance on
+ 	coroutine_handle<> defaulting the promise type to void.  Store
+ 	get_handle_type_* results where appropriate.
+ 	(struct local_vars_frame_data): Add a CTOR.
+ 	(replace_continue): Look up expression type.
+ 	(get_coroutine_from_address): New helper.  Gets the
+ 	handle_type::from_address BASELINK from a coroutine_info.
+ 	(morph_fn_to_coro): Use susp_frame_data CTOR, and make the suspend
+ 	state hash map local to the morph function. Use CTOR for
+ 	local_vars_frame_data instead of brace init.
+ 	(build_actor_fn): Use the get_coroutine_from_address helper and
+ 	void_coro_handle_address.
+ 
+ 2025-05-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-08-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/112341
+ 	* coroutines.cc (struct coroutine_info): Also cache the
+ 	traits type.
+ 	(ensure_coro_initialized): New function.  Makes sure we have
+ 	initialized the coroutine state successfully, or informs the
+ 	caller should it fail to do so.  Extracted from
+ 	coro_promise_type_found_p.
+ 	(coro_get_traits_class): New function.  Gets the (cached)
+ 	coroutine traits type for a given coroutine.  Extracted from
+ 	coro_promise_type_found_p and refactored to cache the result.
+ 	(coro_promise_type_found_p): Use the two functions above.
+ 	(build_template_co_await_expr): New function.  Builds a
+ 	CO_AWAIT_EXPR representing a CO_AWAIT_EXPR in a template
+ 	declaration.
+ 	(build_co_await): Use the above if processing_template_decl, and
+ 	give it a proper type.
+ 	(coro_dependent_p): New function.  Returns true iff its
+ 	argument is a type-dependent expression OR the current functions
+ 	traits class is type dependent.
+ 	(finish_co_await_expr): Defer expansion only in the case
+ 	coro_dependent_p returns true.
+ 	(finish_co_yield_expr): Ditto.
+ 	(finish_co_return_stmt): Ditto.
+ 	* pt.cc (type_dependent_expression_p): Do not treat
+ 	CO_AWAIT/CO_YIELD specially.
+ 
+ 2025-05-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-07-30  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/115906
+ 	* parser.cc (cp_parser_unary_expression): Reject await
+ 	expressions if use of local variables is currently forbidden.
+ 	(cp_parser_yield_expression): Reject yield expressions if use of
+ 	local variables is currently forbidden.
+ 
+ 2025-05-01  Arsen Arsenovic  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-07-30  Arsen Arsenovic  <arsen@aarsen.me>
+ 
+ 	PR c++/115906
+ 	* coroutines.cc (register_local_var_uses): Only process
+ 	PARM_DECL and VAR_DECLs.
+ 
+ 2025-05-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-07-25  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/111728
+ 	* coroutines.cc (rewrite_param_uses): Skip unevaluated
+ 	subexpressions.
+ 
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2024-07-16  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/115434
+ 	PR c++/110871
+ 	PR c++/110872
+ 	* constexpr.cc (cxx_eval_constant_expression): Handle EH_ELSE_EXPR.
+ 	* contracts.cc (finish_contract_attribute): Remove excess line.
+ 	(build_contract_condition_function): Post condition handlers are
+ 	void now.
+ 	(emit_postconditions_cleanup): Remove.
+ 	(emit_postconditions): New.
+ 	(add_pre_condition_fn_call): New.
+ 	(add_post_condition_fn_call): New.
+ 	(apply_preconditions): New.
+ 	(apply_postconditions): New.
+ 	(maybe_apply_function_contracts): New.
+ 	(apply_postcondition_to_return): Remove.
+ 	* contracts.h (apply_postcondition_to_return): Remove.
+ 	(maybe_apply_function_contracts): Add.
+ 	* coroutines.cc (coro_build_actor_or_destroy_function): Do not
+ 	copy contracts to coroutine helpers.
+ 	* decl.cc (finish_function): Handle wrapping a possibly
+ 	transformed function body in contract checks.
+ 	* typeck.cc (check_return_expr): Remove handling of post
+ 	conditions on return expressions.
+ 
+ 2025-04-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/119981
+ 	PR c++/119378
+ 	* pt.cc (tsubst) <case UNBOUND_CLASS_TEMPLATE>: Substitute
+ 	into template parameter list first.  When substituting the
+ 	context, only set processing_template_decl if there's more
+ 	than one level of introduced template parameters.
+ 
+ 2025-04-29  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/119807
+ 	PR c++/112288
+ 	* pt.cc (tsubst_friend_function): Skip remapping an
+ 	existing specialization if it doesn't match the shape of
+ 	the new friend definition.
+ 
+ 2025-04-28  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/116954
+ 	* contracts.cc (remove_contract_attributes): Preserve flags
+ 	on the attribute list.
+ 
+ 2025-04-28  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/113835
+ 	* cp-tree.h (is_std_class): Declare.
+ 	* constexpr.cc (is_std_class): New function.
+ 	(is_std_allocator): Use it.
+ 	(cxx_eval_outermost_constant_expr): Bail out early
+ 	for std::vector(N).
+ 
  2025-04-23  Jason Merrill  <jason@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-14-20250425/gcc/cp/constexpr.cc gcc-14-20250502/gcc/cp/constexpr.cc
*** gcc-14-20250425/gcc/cp/constexpr.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/constexpr.cc	Fri May  2 22:32:17 2025
*************** is_std_construct_at (const constexpr_cal
*** 2356,2377 ****
  	  && is_std_construct_at (call->fundef->decl));
  }
  
! /* True if CTX is an instance of std::allocator.  */
  
  bool
! is_std_allocator (tree ctx)
  {
    if (ctx == NULL_TREE || !CLASS_TYPE_P (ctx) || !TYPE_MAIN_DECL (ctx))
      return false;
  
    tree decl = TYPE_MAIN_DECL (ctx);
!   tree name = DECL_NAME (decl);
!   if (name == NULL_TREE || !id_equal (name, "allocator"))
      return false;
  
    return decl_in_std_namespace_p (decl);
  }
  
  /* Return true if FNDECL is std::allocator<T>::{,de}allocate.  */
  
  static inline bool
--- 2356,2385 ----
  	  && is_std_construct_at (call->fundef->decl));
  }
  
! /* True if CTX is an instance of std::NAME class.  */
  
  bool
! is_std_class (tree ctx, const char *name)
  {
    if (ctx == NULL_TREE || !CLASS_TYPE_P (ctx) || !TYPE_MAIN_DECL (ctx))
      return false;
  
    tree decl = TYPE_MAIN_DECL (ctx);
!   tree dname = DECL_NAME (decl);
!   if (dname == NULL_TREE || !id_equal (dname, name))
      return false;
  
    return decl_in_std_namespace_p (decl);
  }
  
+ /* True if CTX is an instance of std::allocator.  */
+ 
+ bool
+ is_std_allocator (tree ctx)
+ {
+   return is_std_class (ctx, "allocator");
+ }
+ 
  /* Return true if FNDECL is std::allocator<T>::{,de}allocate.  */
  
  static inline bool
*************** cxx_eval_constant_expression (const cons
*** 7868,7873 ****
--- 7876,7889 ----
  				      non_constant_p, overflow_p);
        break;
  
+     case EH_ELSE_EXPR:
+       /* Evaluate any cleanup that applies to non-EH exits.  */
+       cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), vc_discard,
+ 				    non_constant_p, overflow_p);
+ 
+       /* We do not have constexpr exceptions yet, so skip the EH path.  */
+       break;
+ 
      case CLEANUP_STMT:
        r = cxx_eval_constant_expression (ctx, CLEANUP_BODY (t), lval,
  					non_constant_p, overflow_p,
*************** cxx_eval_outermost_constant_expr (tree t
*** 8851,8856 ****
--- 8867,8881 ----
  	  tree fndecl = cp_get_callee_fndecl_nofold (x);
  	  if (fndecl && DECL_IMMEDIATE_FUNCTION_P (fndecl))
  	    is_consteval = true;
+       /* Don't try to evaluate a std::vector constructor taking an integer, it
+ 	 will fail in the 'if (heap_var)' block below after doing all the work
+ 	 (c++/113835).  This will need adjustment if P3554 is accepted.  Note
+ 	 that evaluation of e.g. the vector default constructor can succeed, so
+ 	 we don't shortcut all vector constructors.  */
+       if (fndecl && DECL_CONSTRUCTOR_P (fndecl) && allow_non_constant
+ 	  && is_std_class (type, "vector") && call_expr_nargs (x) > 1
+ 	  && TREE_CODE (TREE_TYPE (get_nth_callarg (x, 1))) == INTEGER_TYPE)
+ 	return t;
  	}
      }
    if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
diff -Nrcpad gcc-14-20250425/gcc/cp/contracts.cc gcc-14-20250502/gcc/cp/contracts.cc
*** gcc-14-20250425/gcc/cp/contracts.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/contracts.cc	Fri May  2 22:32:17 2025
*************** along with GCC; see the file COPYING3.
*** 88,151 ****
         return -v;
       }
  
!    The original decl is left alone and instead calls are generated to pre/post
!    functions within the body:
  
!      void fun.pre(int v)
!      {
!        [[ assert: v > 0 ]];
!      }
!      int fun.post(int v, int __r)
       {
!        [[ assert: __r < 0 ]];
!        return __r;
       }
!      int fun(int v)
       {
!        fun.pre(v);
!        return fun.post(v, -v);
       }
! 
!    If fun returns in memory, the return value is not passed through the post
!    function; instead, the return object is initialized directly and then passed
!    to the post function by invisible reference.
! 
!    This sides steps a number of issues with having to rewrite the bodies or
!    rewrite the parsed conditions as the parameters to the original function
!    changes (as happens during redeclaration). The ultimate goal is to get
!    something that optimizes well along the lines of
! 
!      int fun(int v)
       {
!        [[ assert: v > 0 ]];
!        auto &&__r = -v;
!        goto out;
!      out:
!        [[ assert: __r < 0 ]];
!        return __r;
       }
  
!    With the idea being that multiple return statements could collapse the
!    function epilogue after inlining the pre/post functions. clang is able
!    to collapse common function epilogues, while gcc needs -O3 -Os combined.
! 
!    Directly laying the pre contracts down in the function body doesn't have
!    many issues. The post contracts may need to be repeated multiple times, once
!    for each return, or a goto epilogue would need to be generated.
!    For this initial implementation, generating function calls and letting
!    later optimizations decide whether to inline and duplicate the actual
!    checks or whether to collapse the shared epilogue was chosen.
! 
!    For cdtors a post contract is implemented using a CLEANUP_STMT.
  
!    FIXME the compiler already shores cleanup code on multiple exit paths, so
!    this outlining seems unnecessary if we represent the postcondition as a
!    cleanup for all functions.
  
     More helpful for optimization might be to make the contracts a wrapper
!    function (for non-variadic functions), that could be inlined into a
!    caller while preserving the call to the actual function?  Either that or
!    mirror a never-continue post contract with an assume in the caller.  */
  
  #include "config.h"
  #include "system.h"
--- 88,134 ----
         return -v;
       }
  
!    We implement the checking as follows:
  
!    For functions with no post-conditions we wrap the original function body as
!    follows:
! 
!    {
!       handle_pre_condition_checking ();
!       original_function_body ();
!    }
! 
!    This implements the intent that the preconditions are processed after the
!    function parameters are initialised but before any other actions.
! 
!    For functions with post-conditions:
! 
!    if (preconditions_exist)
!      handle_pre_condition_checking ();
!    try
       {
!        original_function_body ();
       }
!    finally
       {
!        handle_post_condition_checking ();
       }
!    else [only if the function is not marked noexcept(true) ]
       {
!        ;
       }
  
!    In this, post-conditions [that might apply to the return value etc.] are
!    evaluated on every non-exceptional edge out of the function.
  
!    FIXME outlining contract checks into separate functions was motivated
!    partly by wanting to call the postcondition function at each return
!    statement, which we no longer do; at this point outlining doesn't seem to
!    have any advantage over emitting the contracts directly in the function
!    body.
  
     More helpful for optimization might be to make the contracts a wrapper
!    function that could be inlined into the caller, the callee, or both.  */
  
  #include "config.h"
  #include "system.h"
*************** finish_contract_attribute (tree identifi
*** 801,807 ****
    tree attribute = build_tree_list (build_tree_list (NULL_TREE, identifier),
  				    build_tree_list (NULL_TREE, contract));
  
- 
    /* Mark the attribute as dependent if the condition is dependent.
  
       TODO: I'm not sure this is strictly necessary. It's going to be marked as
--- 784,789 ----
*************** cp_contract_assertion_p (const_tree attr
*** 870,879 ****
  void
  remove_contract_attributes (tree fndecl)
  {
    tree list = NULL_TREE;
    for (tree p = DECL_ATTRIBUTES (fndecl); p; p = TREE_CHAIN (p))
      if (!cxx_contract_attribute_p (p))
!       list = tree_cons (TREE_PURPOSE (p), TREE_VALUE (p), list);
    DECL_ATTRIBUTES (fndecl) = nreverse (list);
  }
  
--- 852,868 ----
  void
  remove_contract_attributes (tree fndecl)
  {
+   if (!flag_contracts)
+     return;
+ 
    tree list = NULL_TREE;
    for (tree p = DECL_ATTRIBUTES (fndecl); p; p = TREE_CHAIN (p))
      if (!cxx_contract_attribute_p (p))
!       {
! 	tree nl = copy_node (p);
! 	TREE_CHAIN (nl) = list;
! 	list = nl;
!       }
    DECL_ATTRIBUTES (fndecl) = nreverse (list);
  }
  
*************** build_contract_condition_function (tree
*** 1444,1453 ****
        *last = build_tree_list (NULL_TREE, value_type);
        TREE_CHAIN (*last) = void_list_node;
  
!       if (aggregate_value_p (value_type, fndecl))
! 	/* If FNDECL returns in memory, don't return the value from the
! 	   postcondition.  */
! 	value_type = void_type_node;
      }
  
    TREE_TYPE (fn) = build_function_type (value_type, arg_types);
--- 1433,1440 ----
        *last = build_tree_list (NULL_TREE, value_type);
        TREE_CHAIN (*last) = void_list_node;
  
!       /* The handler is a void return.  */
!       value_type = void_type_node;
      }
  
    TREE_TYPE (fn) = build_function_type (value_type, arg_types);
*************** emit_preconditions (tree attr)
*** 1885,1896 ****
  /* Emit statements for postcondition attributes.  */
  
  static void
! emit_postconditions_cleanup (tree contracts)
  {
!   tree stmts = push_stmt_list ();
!   emit_contract_conditions (contracts, POSTCONDITION_STMT);
!   stmts = pop_stmt_list (stmts);
!   push_cleanup (NULL_TREE, stmts, /*eh_only*/false);
  }
  
  /* We're compiling the pre/postcondition function CONDFN; remap any FN
--- 1872,1880 ----
  /* Emit statements for postcondition attributes.  */
  
  static void
! emit_postconditions (tree attr)
  {
!   return emit_contract_conditions (attr, POSTCONDITION_STMT);
  }
  
  /* We're compiling the pre/postcondition function CONDFN; remap any FN
*************** start_function_contracts (tree decl1)
*** 1993,2022 ****
    if (!handle_contracts_p (decl1))
      return;
  
    if (!outline_contracts_p (decl1))
!     {
!       emit_preconditions (DECL_CONTRACTS (current_function_decl));
!       emit_postconditions_cleanup (DECL_CONTRACTS (current_function_decl));
!       return;
!     }
  
    /* Contracts may have just been added without a chance to parse them, though
       we still need the PRE_FN available to generate a call to it.  */
    if (!DECL_PRE_FN (decl1))
      build_contract_function_decls (decl1);
  
    /* If we're starting a guarded function with valid contracts, we need to
       insert a call to the pre function.  */
!   if (DECL_PRE_FN (decl1)
!       && DECL_PRE_FN (decl1) != error_mark_node)
      {
!       releasing_vec args = build_arg_list (decl1);
!       tree call = build_call_a (DECL_PRE_FN (decl1),
! 				args->length (),
! 				args->address ());
!       CALL_FROM_THUNK_P (call) = true;
!       finish_expr_stmt (call);
      }
  }
  
  /* Finish up the pre & post function definitions for a guarded FNDECL,
--- 1977,2118 ----
    if (!handle_contracts_p (decl1))
      return;
  
+   /* For cdtors, we evaluate the contracts check inline.  */
    if (!outline_contracts_p (decl1))
!     return;
  
    /* Contracts may have just been added without a chance to parse them, though
       we still need the PRE_FN available to generate a call to it.  */
    if (!DECL_PRE_FN (decl1))
      build_contract_function_decls (decl1);
  
+ }
+ 
+ /* If we have a precondition function and it's valid, call it.  */
+ 
+ static void
+ add_pre_condition_fn_call (tree fndecl)
+ {
    /* If we're starting a guarded function with valid contracts, we need to
       insert a call to the pre function.  */
!   gcc_checking_assert (DECL_PRE_FN (fndecl)
! 		       && DECL_PRE_FN (fndecl) != error_mark_node);
! 
!   releasing_vec args = build_arg_list (fndecl);
!   tree call = build_call_a (DECL_PRE_FN (fndecl), args->length (),
! 			    args->address ());
!   CALL_FROM_THUNK_P (call) = true;
!   finish_expr_stmt (call);
! }
! 
! /* Build and add a call to the post-condition checking function, when that
!    is in use.  */
! 
! static void
! add_post_condition_fn_call (tree fndecl)
! {
!   gcc_checking_assert (DECL_POST_FN (fndecl)
! 		       && DECL_POST_FN (fndecl) != error_mark_node);
! 
!   releasing_vec args = build_arg_list (fndecl);
!   if (get_postcondition_result_parameter (fndecl))
!     vec_safe_push (args, DECL_RESULT (fndecl));
!   tree call = build_call_a (DECL_POST_FN (fndecl), args->length (),
! 			    args->address ());
!   CALL_FROM_THUNK_P (call) = true;
!   finish_expr_stmt (call);
! }
! 
! /* Add a call or a direct evaluation of the pre checks.  */
! 
! static void
! apply_preconditions (tree fndecl)
! {
!   if (outline_contracts_p (fndecl))
!     add_pre_condition_fn_call (fndecl);
!   else
!     emit_preconditions (DECL_CONTRACTS (fndecl));
! }
! 
! /* Add a call or a direct evaluation of the post checks.  */
! 
! static void
! apply_postconditions (tree fndecl)
! {
!   if (outline_contracts_p (fndecl))
!     add_post_condition_fn_call (fndecl);
!   else
!     emit_postconditions (DECL_CONTRACTS (fndecl));
! }
! 
! /* Add contract handling to the function in FNDECL.
! 
!    When we have only pre-conditions, this simply prepends a call (or a direct
!    evaluation, for cdtors) to the existing function body.
! 
!    When we have post conditions we build a try-finally block.
!    If the function might throw then the handler in the try-finally is an
!    EH_ELSE expression, where the post condition check is applied to the
!    non-exceptional path, and an empty statement is added to the EH path.  If
!    the function has a non-throwing eh spec, then the handler is simply the
!    post-condition checker.  */
! 
! void
! maybe_apply_function_contracts (tree fndecl)
! {
!   if (!handle_contracts_p (fndecl))
!     /* We did nothing and the original function body statement list will be
!        popped by our caller.  */
!     return;
! 
!   bool do_pre = has_active_preconditions (fndecl);
!   bool do_post = has_active_postconditions (fndecl);
!   /* We should not have reached here with nothing to do... */
!   gcc_checking_assert (do_pre || do_post);
! 
!   /* This copies the approach used for function try blocks.  */
!   tree fnbody = pop_stmt_list (DECL_SAVED_TREE (fndecl));
!   DECL_SAVED_TREE (fndecl) = push_stmt_list ();
!   tree compound_stmt = begin_compound_stmt (0);
!   current_binding_level->artificial = 1;
! 
!   /* Do not add locations for the synthesised code.  */
!   location_t loc = UNKNOWN_LOCATION;
! 
!   /* For other cases, we call a function to process the check.  */
! 
!   /* If we have a pre, but not a post, then just emit that and we are done.  */
!   if (!do_post)
      {
!       apply_preconditions (fndecl);
!       add_stmt (fnbody);
!       finish_compound_stmt (compound_stmt);
!       return;
!     }
! 
!   if (do_pre)
!     /* Add a precondition call, if we have one. */
!     apply_preconditions (fndecl);
!   tree try_fin = build_stmt (loc, TRY_FINALLY_EXPR, fnbody, NULL_TREE);
!   add_stmt (try_fin);
!   TREE_OPERAND (try_fin, 1) = push_stmt_list ();
!   /* If we have exceptions, and a function that might throw, then add
!      an EH_ELSE clause that allows the exception to propagate upwards
!      without encountering the post-condition checks.  */
!   if (flag_exceptions && !type_noexcept_p (TREE_TYPE (fndecl)))
!     {
!       tree eh_else = build_stmt (loc, EH_ELSE_EXPR, NULL_TREE, NULL_TREE);
!       add_stmt (eh_else);
!       TREE_OPERAND (eh_else, 0) = push_stmt_list ();
!       apply_postconditions (fndecl);
!       TREE_OPERAND (eh_else, 0) = pop_stmt_list (TREE_OPERAND (eh_else, 0));
!       TREE_OPERAND (eh_else, 1) = build_empty_stmt (loc);
      }
+   else
+     apply_postconditions (fndecl);
+   TREE_OPERAND (try_fin, 1) = pop_stmt_list (TREE_OPERAND (try_fin, 1));
+   finish_compound_stmt (compound_stmt);
+   /* The DECL_SAVED_TREE stmt list will be popped by our caller.  */
  }
  
  /* Finish up the pre & post function definitions for a guarded FNDECL,
*************** finish_function_contracts (tree fndecl)
*** 2071,2104 ****
      }
  }
  
- /* Rewrite the expression of a returned expression so that it invokes the
-    postcondition function as needed.  */
- 
- tree
- apply_postcondition_to_return (tree expr)
- {
-   tree fn = current_function_decl;
-   tree post = DECL_POST_FN (fn);
-   if (!post)
-     return NULL_TREE;
- 
-   /* If FN returns in memory, POST has a void return type and we call it when
-      EXPR is DECL_RESULT (fn).  If FN returns a scalar, POST has the same
-      return type and we call it when EXPR is the value being returned.  */
-   if (VOID_TYPE_P (TREE_TYPE (TREE_TYPE (post)))
-       != (expr == DECL_RESULT (fn)))
-     return NULL_TREE;
- 
-   releasing_vec args = build_arg_list (fn);
-   if (get_postcondition_result_parameter (fn))
-     vec_safe_push (args, expr);
-   tree call = build_call_a (post,
- 			    args->length (),
- 			    args->address ());
-   CALL_FROM_THUNK_P (call) = true;
- 
-   return call;
- }
  
  /* A subroutine of duplicate_decls. Diagnose issues in the redeclaration of
     guarded functions.  */
--- 2167,2172 ----
diff -Nrcpad gcc-14-20250425/gcc/cp/contracts.h gcc-14-20250502/gcc/cp/contracts.h
*** gcc-14-20250425/gcc/cp/contracts.h	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/contracts.h	Fri May  2 22:32:17 2025
*************** extern void update_late_contract		(tree,
*** 295,302 ****
  extern tree splice_out_contracts		(tree);
  extern bool all_attributes_are_contracts_p	(tree);
  extern void inherit_base_contracts		(tree, tree);
- extern tree apply_postcondition_to_return	(tree);
  extern void start_function_contracts		(tree);
  extern void finish_function_contracts		(tree);
  extern void set_contract_functions		(tree, tree, tree);
  extern tree build_contract_check		(tree);
--- 295,302 ----
  extern tree splice_out_contracts		(tree);
  extern bool all_attributes_are_contracts_p	(tree);
  extern void inherit_base_contracts		(tree, tree);
  extern void start_function_contracts		(tree);
+ extern void maybe_apply_function_contracts	(tree);
  extern void finish_function_contracts		(tree);
  extern void set_contract_functions		(tree, tree, tree);
  extern tree build_contract_check		(tree);
diff -Nrcpad gcc-14-20250425/gcc/cp/coroutines.cc gcc-14-20250502/gcc/cp/coroutines.cc
*** gcc-14-20250425/gcc/cp/coroutines.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/coroutines.cc	Fri May  2 22:32:17 2025
*************** struct GTY((for_user)) coroutine_info
*** 85,95 ****
--- 85,97 ----
    tree actor_decl;    /* The synthesized actor function.  */
    tree destroy_decl;  /* The synthesized destroy function.  */
    tree promise_type;  /* The cached promise type for this function.  */
+   tree traits_type;   /* The cached traits type for this function.  */
    tree handle_type;   /* The cached coroutine handle for this function.  */
    tree self_h_proxy;  /* A handle instance that is used as the proxy for the
  			 one that will eventually be allocated in the coroutine
  			 frame.  */
    tree promise_proxy; /* Likewise, a proxy promise instance.  */
+   tree from_address;  /* handle_type from_address function.  */
    tree return_void;   /* The expression for p.return_void() if it exists.  */
    location_t first_coro_keyword; /* The location of the keyword that made this
  				    function into a coroutine.  */
*************** static GTY(()) tree coro_final_suspend_i
*** 202,208 ****
  static GTY(()) tree coro_return_void_identifier;
  static GTY(()) tree coro_return_value_identifier;
  static GTY(()) tree coro_yield_value_identifier;
- static GTY(()) tree coro_resume_identifier;
  static GTY(()) tree coro_address_identifier;
  static GTY(()) tree coro_from_address_identifier;
  static GTY(()) tree coro_get_return_object_identifier;
--- 204,209 ----
*************** coro_init_identifiers ()
*** 242,248 ****
    coro_return_void_identifier = get_identifier ("return_void");
    coro_return_value_identifier = get_identifier ("return_value");
    coro_yield_value_identifier = get_identifier ("yield_value");
-   coro_resume_identifier = get_identifier ("resume");
    coro_address_identifier = get_identifier ("address");
    coro_from_address_identifier = get_identifier ("from_address");
    coro_get_return_object_identifier = get_identifier ("get_return_object");
--- 243,248 ----
*************** coro_init_identifiers ()
*** 270,275 ****
--- 270,276 ----
  static GTY(()) tree coro_traits_templ;
  static GTY(()) tree coro_handle_templ;
  static GTY(()) tree void_coro_handle_type;
+ static GTY(()) tree void_coro_handle_address;
  
  /* ================= Parse, Semantics and Type checking ================= */
  
*************** find_coro_handle_template_decl (location
*** 388,394 ****
      return handle_decl;
  }
  
! /* Instantiate the handle template for a given promise type.  */
  
  static tree
  instantiate_coro_handle_for_promise_type (location_t kw, tree promise_type)
--- 389,485 ----
      return handle_decl;
  }
  
! /* Get and validate HANDLE_TYPE::address.  The resulting function, if any, will
!    be a non-overloaded member function that takes no arguments and returns
!    void*.  If that is not the case, signals an error and returns NULL_TREE.  */
! 
! static tree
! get_handle_type_address (location_t kw, tree handle_type)
! {
!   tree addr_getter = lookup_member (handle_type, coro_address_identifier, 1,
! 				    0, tf_warning_or_error);
!   if (!addr_getter || addr_getter == error_mark_node)
!     {
!       qualified_name_lookup_error (handle_type, coro_address_identifier,
! 				   error_mark_node, kw);
!       return NULL_TREE;
!     }
! 
!   if (!BASELINK_P (addr_getter)
!       || TREE_CODE (TREE_TYPE (addr_getter)) != METHOD_TYPE)
!     {
!       error_at (kw, "%qE must be a non-overloaded method", addr_getter);
!       return NULL_TREE;
!     }
! 
!   tree fn_t = TREE_TYPE (addr_getter);
!   tree arg = TYPE_ARG_TYPES (fn_t);
! 
!   /* Skip the 'this' pointer.  */
!   arg = TREE_CHAIN (arg);
! 
!   /* Check that from_addr has the argument list ().  */
!   if (arg != void_list_node)
!     {
!       error_at (kw, "%qE must take no arguments", addr_getter);
!       return NULL_TREE;
!     }
! 
!   tree ret_t = TREE_TYPE (fn_t);
!   if (!same_type_p (ret_t, ptr_type_node))
!     {
!       error_at (kw, "%qE must return %qT, not %qT",
! 		addr_getter, ptr_type_node, ret_t);
!       return NULL_TREE;
!     }
! 
!   return addr_getter;
! }
! 
! /* Get and validate HANDLE_TYPE::from_address.  The resulting function, if
!    any, will be a non-overloaded static function that takes a single void* and
!    returns HANDLE_TYPE.  If that is not the case, signals an error and returns
!    NULL_TREE.  */
! 
! static tree
! get_handle_type_from_address (location_t kw, tree handle_type)
! {
!   tree from_addr = lookup_member (handle_type, coro_from_address_identifier, 1,
! 				  0, tf_warning_or_error);
!   if (!from_addr || from_addr == error_mark_node)
!     {
!       qualified_name_lookup_error (handle_type, coro_from_address_identifier,
! 				   error_mark_node, kw);
!       return NULL_TREE;
!     }
!   if (!BASELINK_P (from_addr)
!       || TREE_CODE (TREE_TYPE (from_addr)) != FUNCTION_TYPE)
!     {
!       error_at (kw, "%qE must be a non-overloaded static function", from_addr);
!       return NULL_TREE;
!     }
! 
!   tree fn_t = TREE_TYPE (from_addr);
!   tree arg = TYPE_ARG_TYPES (fn_t);
!   /* Check that from_addr has the argument list (void*).  */
!   if (!arg
!       || !same_type_p (TREE_VALUE (arg), ptr_type_node)
!       || TREE_CHAIN (arg) != void_list_node)
!     {
!       error_at (kw, "%qE must take a single %qT", from_addr, ptr_type_node);
!       return NULL_TREE;
!     }
! 
!   tree ret_t = TREE_TYPE (fn_t);
!   if (!same_type_p (ret_t, handle_type))
!     {
!       error_at (kw, "%qE must return %qT, not %qT",
! 		from_addr, handle_type, ret_t);
!       return NULL_TREE;
!     }
! 
!   return from_addr;
! }
  
  static tree
  instantiate_coro_handle_for_promise_type (location_t kw, tree promise_type)
*************** find_promise_type (tree traits_class)
*** 429,439 ****
    return promise_type;
  }
  
  static bool
! coro_promise_type_found_p (tree fndecl, location_t loc)
  {
-   gcc_assert (fndecl != NULL_TREE);
- 
    if (!coro_initialized)
      {
        /* Trees we only need to create once.
--- 520,531 ----
    return promise_type;
  }
  
+ /* Perform initialization of the coroutine processor state, if not done
+    before.  */
+ 
  static bool
! ensure_coro_initialized (location_t loc)
  {
    if (!coro_initialized)
      {
        /* Trees we only need to create once.
*************** coro_promise_type_found_p (tree fndecl,
*** 451,461 ****
  	return false;
  
        /*  We can also instantiate the void coroutine_handle<>  */
!       void_coro_handle_type =
! 	instantiate_coro_handle_for_promise_type (loc, NULL_TREE);
        if (void_coro_handle_type == NULL_TREE)
  	return false;
  
        /* A table to hold the state, per coroutine decl.  */
        gcc_checking_assert (coroutine_info_table == NULL);
        coroutine_info_table =
--- 543,558 ----
  	return false;
  
        /*  We can also instantiate the void coroutine_handle<>  */
!       void_coro_handle_type
! 	= instantiate_coro_handle_for_promise_type (loc, void_type_node);
        if (void_coro_handle_type == NULL_TREE)
  	return false;
  
+       void_coro_handle_address
+ 	= get_handle_type_address (loc, void_coro_handle_type);
+       if (!void_coro_handle_address)
+ 	return false;
+ 
        /* A table to hold the state, per coroutine decl.  */
        gcc_checking_assert (coroutine_info_table == NULL);
        coroutine_info_table =
*************** coro_promise_type_found_p (tree fndecl,
*** 466,471 ****
--- 563,592 ----
  
        coro_initialized = true;
      }
+   return true;
+ }
+ 
+ /* Try to get the coroutine traits class.  */
+ static tree
+ coro_get_traits_class (tree fndecl, location_t loc)
+ {
+   gcc_assert (fndecl != NULL_TREE);
+   gcc_assert (coro_initialized);
+ 
+   coroutine_info *coro_info = get_or_insert_coroutine_info (fndecl);
+   auto& traits_type = coro_info->traits_type;
+   if (!traits_type)
+     traits_type = instantiate_coro_traits (fndecl, loc);
+   return traits_type;
+ }
+ 
+ static bool
+ coro_promise_type_found_p (tree fndecl, location_t loc)
+ {
+   gcc_assert (fndecl != NULL_TREE);
+ 
+   if (!ensure_coro_initialized (loc))
+     return false;
  
    /* Save the coroutine data on the side to avoid the overhead on every
       function decl tree.  */
*************** coro_promise_type_found_p (tree fndecl,
*** 480,486 ****
        /* Get the coroutine traits template class instance for the function
  	 signature we have - coroutine_traits <R, ...>  */
  
!       tree templ_class = instantiate_coro_traits (fndecl, loc);
  
        /* Find the promise type for that.  */
        coro_info->promise_type = find_promise_type (templ_class);
--- 601,607 ----
        /* Get the coroutine traits template class instance for the function
  	 signature we have - coroutine_traits <R, ...>  */
  
!       tree templ_class = coro_get_traits_class (fndecl, loc);
  
        /* Find the promise type for that.  */
        coro_info->promise_type = find_promise_type (templ_class);
*************** coro_promise_type_found_p (tree fndecl,
*** 526,538 ****
  	}
  
        /* Try to find the handle type for the promise.  */
!       tree handle_type =
! 	instantiate_coro_handle_for_promise_type (loc, coro_info->promise_type);
        if (handle_type == NULL_TREE)
  	return false;
  
        /* Complete this, we're going to use it.  */
        coro_info->handle_type = complete_type_or_else (handle_type, fndecl);
  
        /* Diagnostic would be emitted by complete_type_or_else.  */
        if (!coro_info->handle_type)
--- 647,663 ----
  	}
  
        /* Try to find the handle type for the promise.  */
!       tree handle_type
! 	= instantiate_coro_handle_for_promise_type (loc, coro_info->promise_type);
        if (handle_type == NULL_TREE)
  	return false;
+       tree from_address = get_handle_type_from_address (loc, handle_type);
+       if (from_address == NULL_TREE)
+ 	return false;
  
        /* Complete this, we're going to use it.  */
        coro_info->handle_type = complete_type_or_else (handle_type, fndecl);
+       coro_info->from_address = from_address;
  
        /* Diagnostic would be emitted by complete_type_or_else.  */
        if (!coro_info->handle_type)
*************** get_coroutine_promise_proxy (tree decl)
*** 636,641 ****
--- 761,775 ----
  }
  
  static tree
+ get_coroutine_from_address (tree decl)
+ {
+   if (coroutine_info *info = get_coroutine_info (decl))
+     return info->from_address;
+ 
+   return NULL_TREE;
+ }
+ 
+ static tree
  lookup_promise_method (tree fndecl, tree member_id, location_t loc,
  		       bool musthave)
  {
*************** coro_diagnose_throwing_final_aw_expr (tr
*** 901,906 ****
--- 1035,1053 ----
    return coro_diagnose_throwing_fn (fn);
  }
  
+ /* Build a co_await suitable for later expansion.  */
+ 
+ tree
+ build_template_co_await_expr (location_t kw, tree type, tree expr, tree kind)
+ {
+   tree aw_expr = build5_loc (kw, CO_AWAIT_EXPR, type, expr,
+ 			     NULL_TREE, NULL_TREE, NULL_TREE,
+ 			     kind);
+   TREE_SIDE_EFFECTS (aw_expr) = true;
+   return aw_expr;
+ }
+ 
+ 
  /*  This performs [expr.await] bullet 3.3 and validates the interface obtained.
      It is also used to build the initial and final suspend points.
  
*************** coro_diagnose_throwing_final_aw_expr (tr
*** 909,919 ****
      A, the original yield/await expr, is found at source location LOC.
  
      We will be constructing a CO_AWAIT_EXPR for a suspend point of one of
!     the four suspend_point_kind kinds.  This is indicated by SUSPEND_KIND.  */
  
  static tree
! build_co_await (location_t loc, tree a, suspend_point_kind suspend_kind)
  {
    /* Try and overload of operator co_await, .... */
    tree o;
    if (MAYBE_CLASS_TYPE_P (TREE_TYPE (a)))
--- 1056,1079 ----
      A, the original yield/await expr, is found at source location LOC.
  
      We will be constructing a CO_AWAIT_EXPR for a suspend point of one of
!     the four suspend_point_kind kinds.  This is indicated by SUSPEND_KIND.
! 
!     In the case that we're processing a template declaration, we can't save
!     actual awaiter expressions as the frame type will differ between
!     instantiations, but we can generate them to type-check them and compute the
!     resulting expression type.  In those cases, we will return a
!     template-appropriate CO_AWAIT_EXPR and throw away the rest of the results.
!     Such an expression requires the original co_await operand unaltered.  Pass
!     it as ORIG_OPERAND.  If it is the same as 'a', you can pass NULL_TREE (the
!     default) to use 'a' as the value.  */
  
  static tree
! build_co_await (location_t loc, tree a, suspend_point_kind suspend_kind,
! 		tree orig_operand = NULL_TREE)
  {
+   if (orig_operand == NULL_TREE)
+     orig_operand = a;
+ 
    /* Try and overload of operator co_await, .... */
    tree o;
    if (MAYBE_CLASS_TYPE_P (TREE_TYPE (a)))
*************** build_co_await (location_t loc, tree a,
*** 1118,1128 ****
    if (REFERENCE_REF_P (e_proxy))
      e_proxy = TREE_OPERAND (e_proxy, 0);
  
    tree await_expr = build5_loc (loc, CO_AWAIT_EXPR,
! 				TREE_TYPE (TREE_TYPE (awrs_func)),
  				a, e_proxy, o, awaiter_calls,
! 				build_int_cst (integer_type_node,
! 					       (int) suspend_kind));
    TREE_SIDE_EFFECTS (await_expr) = true;
    if (te)
      {
--- 1278,1290 ----
    if (REFERENCE_REF_P (e_proxy))
      e_proxy = TREE_OPERAND (e_proxy, 0);
  
+   tree awrs_type = TREE_TYPE (TREE_TYPE (awrs_func));
+   tree suspend_kind_cst = build_int_cst (integer_type_node,
+ 					 (int) suspend_kind);
    tree await_expr = build5_loc (loc, CO_AWAIT_EXPR,
! 				awrs_type,
  				a, e_proxy, o, awaiter_calls,
! 				suspend_kind_cst);
    TREE_SIDE_EFFECTS (await_expr) = true;
    if (te)
      {
*************** build_co_await (location_t loc, tree a,
*** 1131,1137 ****
        await_expr = te;
      }
    SET_EXPR_LOCATION (await_expr, loc);
!   return convert_from_reference (await_expr);
  }
  
  tree
--- 1293,1315 ----
        await_expr = te;
      }
    SET_EXPR_LOCATION (await_expr, loc);
! 
!   if (processing_template_decl)
!     return build_template_co_await_expr (loc, awrs_type, orig_operand,
! 					 suspend_kind_cst);
!  return convert_from_reference (await_expr);
! }
! 
! /* Returns true iff EXPR or the TRAITS_CLASS, which should be a
!    coroutine_traits instance, are dependent.  In those cases, we can't decide
!    what the types of our co_{await,yield,return} expressions are, so we defer
!    expansion entirely.  */
! 
! static bool
! coro_dependent_p (tree expr, tree traits_class)
! {
!   return type_dependent_expression_p (expr)
!     || dependent_type_p (traits_class);
  }
  
  tree
*************** finish_co_await_expr (location_t kw, tre
*** 1153,1172 ****
       extraneous warnings during substitution.  */
    suppress_warning (current_function_decl, OPT_Wreturn_type);
  
!   /* Defer expansion when we are processing a template.
!      FIXME: If the coroutine function's type is not dependent, and the operand
!      is not dependent, we should determine the type of the co_await expression
!      using the DEPENDENT_EXPR wrapper machinery.  That allows us to determine
!      the subexpression type, but leave its operand unchanged and then
!      instantiate it later.  */
!   if (processing_template_decl)
!     {
!       tree aw_expr = build5_loc (kw, CO_AWAIT_EXPR, unknown_type_node, expr,
! 				 NULL_TREE, NULL_TREE, NULL_TREE,
! 				 integer_zero_node);
!       TREE_SIDE_EFFECTS (aw_expr) = true;
!       return aw_expr;
!     }
  
    /* We must be able to look up the "await_transform" method in the scope of
       the promise type, and obtain its return type.  */
--- 1331,1354 ----
       extraneous warnings during substitution.  */
    suppress_warning (current_function_decl, OPT_Wreturn_type);
  
!   /* Prepare for coroutine transformations.  */
!   if (!ensure_coro_initialized (kw))
!     return error_mark_node;
! 
!   /* Get our traits class.  */
!   tree traits_class = coro_get_traits_class (current_function_decl, kw);
! 
!   /* Defer expansion when we are processing a template, unless the traits type
!      and expression would not be dependent.  In the case that the types are
!      not dependent but we are processing a template declaration, we will do
!      most of the computation but throw away the results (except for the
!      await_resume type).  Otherwise, if our co_await is type-dependent
!      (i.e. the promise type or operand type is dependent), we can't do much,
!      and just return early with a NULL_TREE type (indicating that we cannot
!      compute the type yet).  */
!   if (coro_dependent_p (expr, traits_class))
!     return build_template_co_await_expr (kw, NULL_TREE, expr,
! 					 integer_zero_node);
  
    /* We must be able to look up the "await_transform" method in the scope of
       the promise type, and obtain its return type.  */
*************** finish_co_await_expr (location_t kw, tre
*** 1203,1209 ****
      }
  
    /* Now we want to build co_await a.  */
!   return build_co_await (kw, a, CO_AWAIT_SUSPEND_POINT);
  }
  
  /* Take the EXPR given and attempt to build:
--- 1385,1391 ----
      }
  
    /* Now we want to build co_await a.  */
!   return build_co_await (kw, a, CO_AWAIT_SUSPEND_POINT, expr);
  }
  
  /* Take the EXPR given and attempt to build:
*************** finish_co_yield_expr (location_t kw, tre
*** 1230,1239 ****
       extraneous warnings during substitution.  */
    suppress_warning (current_function_decl, OPT_Wreturn_type);
  
!   /* Defer expansion when we are processing a template; see FIXME in the
!      co_await code.  */
!   if (processing_template_decl)
!     return build2_loc (kw, CO_YIELD_EXPR, unknown_type_node, expr, NULL_TREE);
  
    if (!coro_promise_type_found_p (current_function_decl, kw))
      /* We must be able to look up the "yield_value" method in the scope of
--- 1412,1433 ----
       extraneous warnings during substitution.  */
    suppress_warning (current_function_decl, OPT_Wreturn_type);
  
!   /* Prepare for coroutine transformations.  */
!   if (!ensure_coro_initialized (kw))
!     return error_mark_node;
! 
!   /* Get our traits class.  */
!   tree traits_class = coro_get_traits_class (current_function_decl, kw);
! 
!   /* Defer expansion when we are processing a template; see note in
!      finish_co_await_expr.  Also note that a yield is equivalent to
! 
!        co_await p.yield_value(EXPR)
! 
!       If either p or EXPR are type-dependent, then the whole expression is
!       certainly type-dependent, and we can't proceed.  */
!   if (coro_dependent_p (expr, traits_class))
!     return build2_loc (kw, CO_YIELD_EXPR, NULL_TREE, expr, NULL_TREE);
  
    if (!coro_promise_type_found_p (current_function_decl, kw))
      /* We must be able to look up the "yield_value" method in the scope of
*************** finish_co_return_stmt (location_t kw, tr
*** 1310,1322 ****
       extraneous warnings during substitution.  */
    suppress_warning (current_function_decl, OPT_Wreturn_type);
  
    if (processing_template_decl
        && check_for_bare_parameter_packs (expr))
      return error_mark_node;
  
!   /* Defer expansion when we are processing a template; see FIXME in the
!      co_await code.  */
!   if (processing_template_decl)
      {
        /* co_return expressions are always void type, regardless of the
  	 expression type.  */
--- 1504,1523 ----
       extraneous warnings during substitution.  */
    suppress_warning (current_function_decl, OPT_Wreturn_type);
  
+   /* Prepare for coroutine transformations.  */
+   if (!ensure_coro_initialized (kw))
+     return error_mark_node;
+ 
+   /* Get our traits class.  */
+   tree traits_class = coro_get_traits_class (current_function_decl, kw);
+ 
    if (processing_template_decl
        && check_for_bare_parameter_packs (expr))
      return error_mark_node;
  
!   /* Defer expansion when we must and are processing a template; see note in
!      finish_co_await_expr.  */
!   if (coro_dependent_p (expr, traits_class))
      {
        /* co_return expressions are always void type, regardless of the
  	 expression type.  */
*************** struct suspend_point_info
*** 1882,1893 ****
    tree await_field_id;
  };
  
- static hash_map<tree, suspend_point_info> *suspend_points;
- 
  struct await_xform_data
  {
    tree actor_fn;   /* Decl for context.  */
    tree actor_frame;
  };
  
  /* When we built the await expressions, we didn't know the coro frame
--- 2083,2093 ----
    tree await_field_id;
  };
  
  struct await_xform_data
  {
    tree actor_fn;   /* Decl for context.  */
    tree actor_frame;
+   hash_map<tree, suspend_point_info> *suspend_points;
  };
  
  /* When we built the await expressions, we didn't know the coro frame
*************** struct await_xform_data
*** 1897,1903 ****
  static tree
  transform_await_expr (tree await_expr, await_xform_data *xform)
  {
!   suspend_point_info *si = suspend_points->get (await_expr);
    location_t loc = EXPR_LOCATION (await_expr);
    if (!si)
      {
--- 2097,2103 ----
  static tree
  transform_await_expr (tree await_expr, await_xform_data *xform)
  {
!   suspend_point_info *si = xform->suspend_points->get (await_expr);
    location_t loc = EXPR_LOCATION (await_expr);
    if (!si)
      {
*************** coro_get_frame_dtor (tree coro_fp, tree
*** 2121,2132 ****
  static void
  build_actor_fn (location_t loc, tree coro_frame_type, tree actor, tree fnbody,
  		tree orig, hash_map<tree, local_var_info> *local_var_uses,
  		vec<tree, va_gc> *param_dtor_list,
  		tree resume_idx_var, unsigned body_count, tree frame_size)
  {
    verify_stmt_tree (fnbody);
    /* Some things we inherit from the original function.  */
-   tree handle_type = get_coroutine_handle_type (orig);
    tree promise_type = get_coroutine_promise_type (orig);
    tree promise_proxy = get_coroutine_promise_proxy (orig);
  
--- 2321,2332 ----
  static void
  build_actor_fn (location_t loc, tree coro_frame_type, tree actor, tree fnbody,
  		tree orig, hash_map<tree, local_var_info> *local_var_uses,
+ 		hash_map<tree, suspend_point_info> *suspend_points,
  		vec<tree, va_gc> *param_dtor_list,
  		tree resume_idx_var, unsigned body_count, tree frame_size)
  {
    verify_stmt_tree (fnbody);
    /* Some things we inherit from the original function.  */
    tree promise_type = get_coroutine_promise_type (orig);
    tree promise_proxy = get_coroutine_promise_proxy (orig);
  
*************** build_actor_fn (location_t loc, tree cor
*** 2286,2293 ****
    tree ash = build_class_member_access_expr (actor_frame, ash_m, NULL_TREE,
  					     false, tf_warning_or_error);
    /* So construct the self-handle from the frame address.  */
!   tree hfa_m = lookup_member (handle_type, coro_from_address_identifier, 1,
! 			      0, tf_warning_or_error);
  
    r = build1 (CONVERT_EXPR, build_pointer_type (void_type_node), actor_fp);
    vec<tree, va_gc> *args = make_tree_vector_single (r);
--- 2486,2494 ----
    tree ash = build_class_member_access_expr (actor_frame, ash_m, NULL_TREE,
  					     false, tf_warning_or_error);
    /* So construct the self-handle from the frame address.  */
!   tree hfa_m = get_coroutine_from_address (orig);
!   /* Should have been set earlier by coro_promise_type_found_p.  */
!   gcc_assert (hfa_m);
  
    r = build1 (CONVERT_EXPR, build_pointer_type (void_type_node), actor_fp);
    vec<tree, va_gc> *args = make_tree_vector_single (r);
*************** build_actor_fn (location_t loc, tree cor
*** 2301,2307 ****
    /* Now we know the real promise, and enough about the frame layout to
       decide where to put things.  */
  
!   await_xform_data xform = {actor, actor_frame};
  
    /* Transform the await expressions in the function body.  Only do each
       await tree once!  */
--- 2502,2508 ----
    /* Now we know the real promise, and enough about the frame layout to
       decide where to put things.  */
  
!   await_xform_data xform = {actor, actor_frame, suspend_points};
  
    /* Transform the await expressions in the function body.  Only do each
       await tree once!  */
*************** build_actor_fn (location_t loc, tree cor
*** 2382,2393 ****
    r = build_stmt (loc, LABEL_EXPR, continue_label);
    add_stmt (r);
  
    /* We want to force a tail-call even for O0/1, so this expands the resume
       call into its underlying implementation.  */
!   tree addr = lookup_member (void_coro_handle_type, coro_address_identifier,
! 			       1, 0, tf_warning_or_error);
!   addr = build_new_method_call (continuation, addr, NULL, NULL_TREE,
! 				  LOOKUP_NORMAL, NULL, tf_warning_or_error);
    tree resume = build_call_expr_loc
      (loc, builtin_decl_explicit (BUILT_IN_CORO_RESUME), 1, addr);
  
--- 2583,2596 ----
    r = build_stmt (loc, LABEL_EXPR, continue_label);
    add_stmt (r);
  
+   /* Should have been set earlier by the coro_initialized code.  */
+   gcc_assert (void_coro_handle_address);
+ 
    /* We want to force a tail-call even for O0/1, so this expands the resume
       call into its underlying implementation.  */
!   tree addr = build_new_method_call (continuation, void_coro_handle_address,
! 				     NULL, NULL_TREE, LOOKUP_NORMAL, NULL,
! 				     tf_warning_or_error);
    tree resume = build_call_expr_loc
      (loc, builtin_decl_explicit (BUILT_IN_CORO_RESUME), 1, addr);
  
*************** build_init_or_final_await (location_t lo
*** 2536,2542 ****
     function.  */
  
  static bool
! register_await_info (tree await_expr, tree aw_type, tree aw_nam)
  {
    bool seen;
    suspend_point_info &s
--- 2739,2746 ----
     function.  */
  
  static bool
! register_await_info (tree await_expr, tree aw_type, tree aw_nam,
! 		     hash_map<tree, suspend_point_info> *suspend_points)
  {
    bool seen;
    suspend_point_info &s
*************** register_await_info (tree await_expr, tr
*** 2557,2577 ****
  struct susp_frame_data
  {
    /* Function-wide.  */
!   tree *field_list; /* The current coroutine frame field list.  */
!   tree handle_type; /* The self-handle type for this coroutine.  */
!   tree fs_label;    /* The destination for co_returns.  */
    vec<tree, va_gc> *block_stack; /* Track block scopes.  */
    vec<tree, va_gc> *bind_stack;  /* Track current bind expr.  */
!   unsigned await_number;	 /* Which await in the function.  */
!   unsigned cond_number;		 /* Which replaced condition in the fn.  */
    /* Temporary values for one statement or expression being analyzed.  */
!   hash_set<tree> captured_temps; /* The suspend captured these temps.  */
!   vec<tree, va_gc> *to_replace;  /* The VAR decls to replace.  */
!   hash_set<tree> *truth_aoif_to_expand; /* The set of TRUTH exprs to expand.  */
!   unsigned saw_awaits;		 /* Count of awaits in this statement  */
!   bool captures_temporary;	 /* This expr captures temps by ref.  */
!   bool needs_truth_if_exp;	 /* We must expand a truth_if expression.  */
!   bool has_awaiter_init;	 /* We must handle initializing an awaiter.  */
  };
  
  /* If this is an await expression, then count it (both uniquely within the
--- 2761,2786 ----
  struct susp_frame_data
  {
    /* Function-wide.  */
!   tree fs_label;		/* The destination for co_returns.  */
!   hash_map<tree, suspend_point_info> *suspend_points; /* Not owned.  */
    vec<tree, va_gc> *block_stack; /* Track block scopes.  */
    vec<tree, va_gc> *bind_stack;  /* Track current bind expr.  */
!   unsigned await_number = 0;	 /* Which await in the function.  */
!   unsigned cond_number = 0;		 /* Which replaced condition in the fn.  */
! 
    /* Temporary values for one statement or expression being analyzed.  */
!   hash_set<tree> *truth_aoif_to_expand = nullptr; /* The set of TRUTH exprs to expand.  */
!   unsigned saw_awaits = 0;		 /* Count of awaits in this statement  */
!   bool captures_temporary = false;	 /* This expr captures temps by ref.  */
!   bool needs_truth_if_exp = false;	 /* We must expand a truth_if expression.  */
!   bool has_awaiter_init = false;	 /* We must handle initializing an awaiter.  */
! 
!   susp_frame_data (tree _final_susp, hash_map<tree, suspend_point_info> *_spt)
!     : fs_label (_final_susp), suspend_points (_spt)
!   {
!     block_stack = make_tree_vector ();
!     bind_stack = make_tree_vector ();
!   }
  };
  
  /* If this is an await expression, then count it (both uniquely within the
*************** register_awaits (tree *stmt, int *, void
*** 2602,2608 ****
  
    tree aw_field_type = TREE_TYPE (aw);
    tree aw_field_nam = NULL_TREE;
!   register_await_info (aw_expr, aw_field_type, aw_field_nam);
  
    /* Rewrite target expressions on the await_suspend () to remove extraneous
       cleanups for the awaitables, which are now promoted to frame vars and
--- 2811,2817 ----
  
    tree aw_field_type = TREE_TYPE (aw);
    tree aw_field_nam = NULL_TREE;
!   register_await_info (aw_expr, aw_field_type, aw_field_nam, data->suspend_points);
  
    /* Rewrite target expressions on the await_suspend () to remove extraneous
       cleanups for the awaitables, which are now promoted to frame vars and
*************** replace_continue (tree *stmt, int *do_su
*** 3327,3333 ****
    tree expr = *stmt;
    if (TREE_CODE (expr) == CLEANUP_POINT_EXPR)
      expr = TREE_OPERAND (expr, 0);
!   if (CONVERT_EXPR_P (expr) && VOID_TYPE_P (expr))
      expr = TREE_OPERAND (expr, 0);
    STRIP_NOPS (expr);
    if (!STATEMENT_CLASS_P (expr))
--- 3536,3542 ----
    tree expr = *stmt;
    if (TREE_CODE (expr) == CLEANUP_POINT_EXPR)
      expr = TREE_OPERAND (expr, 0);
!   if (CONVERT_EXPR_P (expr) && VOID_TYPE_P (TREE_TYPE (expr)))
      expr = TREE_OPERAND (expr, 0);
    STRIP_NOPS (expr);
    if (!STATEMENT_CLASS_P (expr))
*************** rewrite_param_uses (tree *stmt, int *do_
*** 3755,3760 ****
--- 3964,3976 ----
        return cp_walk_tree (&t, rewrite_param_uses, d, NULL);
      }
  
+   if (unevaluated_p (TREE_CODE (*stmt)))
+     {
+       /* No odr-uses in unevaluated operands.  */
+       *do_subtree = 0;
+       return NULL_TREE;
+     }
+ 
    if (TREE_CODE (*stmt) != PARM_DECL)
      return NULL_TREE;
  
*************** struct local_vars_frame_data
*** 3870,3879 ****
  {
    tree *field_list;
    hash_map<tree, local_var_info> *local_var_uses;
!   unsigned int nest_depth, bind_indx;
!   location_t loc;
!   bool saw_capture;
!   bool local_var_seen;
  };
  
  /* A tree-walk callback that processes one bind expression noting local
--- 4086,4099 ----
  {
    tree *field_list;
    hash_map<tree, local_var_info> *local_var_uses;
!   unsigned int nest_depth = 0;
!   unsigned int bind_indx = 0;
!   location_t loc = UNKNOWN_LOCATION;
!   bool saw_capture = false;
!   bool local_var_seen = false;
! 
!   local_vars_frame_data (tree *_fl, hash_map<tree, local_var_info> *_lvu)
!     : field_list (_fl), local_var_uses (_lvu) {}
  };
  
  /* A tree-walk callback that processes one bind expression noting local
*************** register_local_var_uses (tree *stmt, int
*** 3907,3914 ****
  	  local_var.field_idx = local_var.field_id = NULL_TREE;
  
  	  /* Make sure that we only present vars to the tests below.  */
! 	  if (TREE_CODE (lvar) == TYPE_DECL
! 	      || TREE_CODE (lvar) == NAMESPACE_DECL)
  	    continue;
  
  	  /* We don't move static vars into the frame. */
--- 4127,4134 ----
  	  local_var.field_idx = local_var.field_id = NULL_TREE;
  
  	  /* Make sure that we only present vars to the tests below.  */
! 	  if (TREE_CODE (lvar) != PARM_DECL
! 	      && TREE_CODE (lvar) != VAR_DECL)
  	    continue;
  
  	  /* We don't move static vars into the frame. */
*************** coro_build_actor_or_destroy_function (tr
*** 4014,4019 ****
--- 4234,4241 ----
    DECL_USER_ALIGN (fn) = DECL_USER_ALIGN (orig);
    /* Apply attributes from the original fn.  */
    DECL_ATTRIBUTES (fn) = copy_list (DECL_ATTRIBUTES (orig));
+   /* but we do not want ones for contracts.  */
+   remove_contract_attributes (fn);
  
    /* A void return.  */
    tree resdecl = build_decl (loc, RESULT_DECL, 0, void_type_node);
*************** morph_fn_to_coro (tree orig, tree *resum
*** 4425,4431 ****
       1. Types we already know.  */
  
    tree fn_return_type = TREE_TYPE (TREE_TYPE (orig));
-   tree handle_type = get_coroutine_handle_type (orig);
    tree promise_type = get_coroutine_promise_type (orig);
  
    /* 2. Types we need to define or look up.  */
--- 4647,4652 ----
*************** morph_fn_to_coro (tree orig, tree *resum
*** 4457,4486 ****
    /* Build our dummy coro frame layout.  */
    coro_frame_type = begin_class_definition (coro_frame_type);
  
-   /* The fields for the coro frame.  */
-   tree field_list = NULL_TREE;
  
    /* We need to know, and inspect, each suspend point in the function
       in several places.  It's convenient to place this map out of line
       since it's used from tree walk callbacks.  */
-   suspend_points = new hash_map<tree, suspend_point_info>;
  
    /* Now insert the data for any body await points, at this time we also need
       to promote any temporaries that are captured by reference (to regular
       vars) they will get added to the coro frame along with other locals.  */
!   susp_frame_data body_aw_points
!     = {&field_list, handle_type, fs_label, NULL, NULL, 0, 0,
!        hash_set<tree> (), NULL, NULL, 0, false, false, false};
!   body_aw_points.block_stack = make_tree_vector ();
!   body_aw_points.bind_stack = make_tree_vector ();
!   body_aw_points.to_replace = make_tree_vector ();
    cp_walk_tree (&fnbody, await_statement_walker, &body_aw_points, NULL);
  
    /* 4. Now make space for local vars, this is conservative again, and we
!      would expect to delete unused entries later.  */
    hash_map<tree, local_var_info> local_var_uses;
!   local_vars_frame_data local_vars_data
!     = {&field_list, &local_var_uses, 0, 0, fn_start, false, false};
    cp_walk_tree (&fnbody, register_local_var_uses, &local_vars_data, NULL);
  
    /* Tie off the struct for now, so that we can build offsets to the
--- 4678,4703 ----
    /* Build our dummy coro frame layout.  */
    coro_frame_type = begin_class_definition (coro_frame_type);
  
  
    /* We need to know, and inspect, each suspend point in the function
       in several places.  It's convenient to place this map out of line
       since it's used from tree walk callbacks.  */
  
+   hash_map<tree, suspend_point_info> suspend_points;
    /* Now insert the data for any body await points, at this time we also need
       to promote any temporaries that are captured by reference (to regular
       vars) they will get added to the coro frame along with other locals.  */
!   susp_frame_data body_aw_points (fs_label, &suspend_points);
    cp_walk_tree (&fnbody, await_statement_walker, &body_aw_points, NULL);
  
    /* 4. Now make space for local vars, this is conservative again, and we
!      would expect to delete unused entries later.  Compose the frame entries
!      list.  */
! 
!   /* The fields for the coro frame.  */
!   tree field_list = NULL_TREE;
    hash_map<tree, local_var_info> local_var_uses;
!   local_vars_frame_data local_vars_data (&field_list, &local_var_uses);
    cp_walk_tree (&fnbody, register_local_var_uses, &local_vars_data, NULL);
  
    /* Tie off the struct for now, so that we can build offsets to the
*************** morph_fn_to_coro (tree orig, tree *resum
*** 5162,5168 ****
  
    /* Build the actor...  */
    build_actor_fn (fn_start, coro_frame_type, actor, fnbody, orig,
! 		  &local_var_uses, param_dtor_list,
  		  resume_idx_var, body_aw_points.await_number, frame_size);
  
    /* Destroyer ... */
--- 5379,5385 ----
  
    /* Build the actor...  */
    build_actor_fn (fn_start, coro_frame_type, actor, fnbody, orig,
! 		  &local_var_uses, &suspend_points, param_dtor_list,
  		  resume_idx_var, body_aw_points.await_number, frame_size);
  
    /* Destroyer ... */
*************** morph_fn_to_coro (tree orig, tree *resum
*** 5179,5186 ****
    *resumer = actor;
    *destroyer = destroy;
  
-   delete suspend_points;
-   suspend_points = NULL;
    return true;
  }
  
--- 5396,5401 ----
diff -Nrcpad gcc-14-20250425/gcc/cp/cp-tree.h gcc-14-20250502/gcc/cp/cp-tree.h
*** gcc-14-20250425/gcc/cp/cp-tree.h	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/cp-tree.h	Fri May  2 22:32:17 2025
*************** extern bool is_rvalue_constant_expressio
*** 8683,8688 ****
--- 8683,8689 ----
  extern bool is_nondependent_constant_expression (tree);
  extern bool is_nondependent_static_init_expression (tree);
  extern bool is_static_init_expression    (tree);
+ extern bool is_std_class (tree, const char *);
  extern bool is_std_allocator (tree);
  extern bool potential_rvalue_constant_expression (tree);
  extern bool require_potential_constant_expression (tree);
diff -Nrcpad gcc-14-20250425/gcc/cp/decl.cc gcc-14-20250502/gcc/cp/decl.cc
*** gcc-14-20250425/gcc/cp/decl.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/decl.cc	Fri May  2 22:32:17 2025
*************** finish_function (bool inline_p)
*** 18564,18579 ****
    tree fndecl = current_function_decl;
    tree fntype, ctype = NULL_TREE;
    tree resumer = NULL_TREE, destroyer = NULL_TREE;
-   bool coro_p = flag_coroutines
- 		&& !processing_template_decl
- 		&& DECL_COROUTINE_P (fndecl);
-   bool coro_emit_helpers = false;
  
    /* When we get some parse errors, we can end up without a
       current_function_decl, so cope.  */
!   if (fndecl == NULL_TREE)
      return error_mark_node;
  
    if (!DECL_OMP_DECLARE_REDUCTION_P (fndecl))
      finish_lambda_scope ();
  
--- 18564,18582 ----
    tree fndecl = current_function_decl;
    tree fntype, ctype = NULL_TREE;
    tree resumer = NULL_TREE, destroyer = NULL_TREE;
  
    /* When we get some parse errors, we can end up without a
       current_function_decl, so cope.  */
!   if (fndecl == NULL_TREE || fndecl == error_mark_node)
      return error_mark_node;
  
+   bool coro_p = (flag_coroutines
+ 		 && !processing_template_decl
+ 		 && DECL_COROUTINE_P (fndecl));
+   bool coro_emit_helpers = false;
+   bool do_contracts = (DECL_HAS_CONTRACTS_P (fndecl)
+ 		       && !processing_template_decl);
+ 
    if (!DECL_OMP_DECLARE_REDUCTION_P (fndecl))
      finish_lambda_scope ();
  
*************** finish_function (bool inline_p)
*** 18609,18614 ****
--- 18612,18621 ----
  	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
  			      (TREE_TYPE (fndecl)),
  			      current_eh_spec_block);
+ 
+      /* If outlining succeeded, then add contracts handling if needed.  */
+      if (coro_emit_helpers && do_contracts)
+ 	maybe_apply_function_contracts (fndecl);
      }
    else
    /* For a cloned function, we've already got all the code we need;
*************** finish_function (bool inline_p)
*** 18624,18629 ****
--- 18631,18640 ----
  	finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
  			      (TREE_TYPE (current_function_decl)),
  			      current_eh_spec_block);
+ 
+      if (do_contracts)
+ 	maybe_apply_function_contracts (current_function_decl);
+ 
      }
  
    /* If we're saving up tree structure, tie off the function now.  */
*************** finish_function (bool inline_p)
*** 18876,18885 ****
    --function_depth;
  
    /* Clean up.  */
-   current_function_decl = NULL_TREE;
- 
    invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
  
    finish_function_contracts (fndecl);
  
    return fndecl;
--- 18887,18896 ----
    --function_depth;
  
    /* Clean up.  */
    invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
  
+   /* If we have used outlined contracts checking functions, build and emit
+      them here.  */
    finish_function_contracts (fndecl);
  
    return fndecl;
diff -Nrcpad gcc-14-20250425/gcc/cp/parser.cc gcc-14-20250502/gcc/cp/parser.cc
*** gcc-14-20250425/gcc/cp/parser.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/parser.cc	Fri May  2 22:32:17 2025
*************** cp_parser_unary_expression (cp_parser *p
*** 9220,9225 ****
--- 9220,9233 ----
  	    if (expr == error_mark_node)
  	      return error_mark_node;
  
+ 	    /* ... but, we cannot use co_await in default arguments.  */
+ 	    if (parser->local_variables_forbidden_p & LOCAL_VARS_FORBIDDEN)
+ 	      {
+ 		error_at (kw_loc,
+ 			  "%<co_await%> cannot be used in default arguments");
+ 		return error_mark_node;
+ 	      }
+ 
  	    /* Handle [expr.await].  */
  	    return cp_expr (finish_co_await_expr (kw_loc, expr));
  	  }
*************** cp_parser_yield_expression (cp_parser* p
*** 29407,29412 ****
--- 29415,29429 ----
    else
      expr = cp_parser_assignment_expression (parser);
  
+   /* Similar to co_await, we cannot use co_yield in default arguments (as
+      co_awaits underlie co_yield).  */
+   if (parser->local_variables_forbidden_p & LOCAL_VARS_FORBIDDEN)
+     {
+       error_at (kw_loc,
+ 		"%<co_yield%> cannot be used in default arguments");
+       return error_mark_node;
+     }
+ 
    if (expr == error_mark_node)
      return expr;
  
diff -Nrcpad gcc-14-20250425/gcc/cp/pt.cc gcc-14-20250502/gcc/cp/pt.cc
*** gcc-14-20250425/gcc/cp/pt.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/pt.cc	Fri May  2 22:32:17 2025
*************** tsubst_friend_function (tree decl, tree
*** 11634,11639 ****
--- 11634,11643 ----
  		      elt.args = DECL_TI_ARGS (spec);
  		      elt.spec = NULL_TREE;
  
+ 		      if (TMPL_ARGS_HAVE_MULTIPLE_LEVELS (DECL_TI_ARGS (spec))
+ 			  && !is_specialization_of_friend (spec, new_template))
+ 			continue;
+ 
  		      decl_specializations->remove_elt (&elt);
  
  		      tree& spec_args = DECL_TI_ARGS (spec);
*************** tsubst (tree t, tree args, tsubst_flags_
*** 16950,16967 ****
  
      case UNBOUND_CLASS_TEMPLATE:
        {
- 	++processing_template_decl;
- 	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
- 				     in_decl, /*entering_scope=*/1);
- 	--processing_template_decl;
  	tree name = TYPE_IDENTIFIER (t);
  	tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
  
! 	if (ctx == error_mark_node || name == error_mark_node)
  	  return error_mark_node;
  
- 	if (parm_list)
- 	  parm_list = tsubst_template_parms (parm_list, args, complain);
  	return make_unbound_class_template (ctx, name, parm_list, complain);
        }
  
--- 16954,16977 ----
  
      case UNBOUND_CLASS_TEMPLATE:
        {
  	tree name = TYPE_IDENTIFIER (t);
+ 	if (name == error_mark_node)
+ 	  return error_mark_node;
+ 
  	tree parm_list = DECL_TEMPLATE_PARMS (TYPE_NAME (t));
+ 	parm_list = tsubst_template_parms (parm_list, args, complain);
+ 	if (parm_list == error_mark_node)
+ 	  return error_mark_node;
  
! 	if (parm_list && TMPL_PARMS_DEPTH (parm_list) > 1)
! 	  ++processing_template_decl;
! 	tree ctx = tsubst_aggr_type (TYPE_CONTEXT (t), args, complain,
! 				     in_decl, /*entering_scope=*/1);
! 	if (parm_list && TMPL_PARMS_DEPTH (parm_list) > 1)
! 	  --processing_template_decl;
! 	if (ctx == error_mark_node)
  	  return error_mark_node;
  
  	return make_unbound_class_template (ctx, name, parm_list, complain);
        }
  
*************** type_dependent_expression_p (tree expres
*** 28721,28731 ****
        if (TREE_CODE (expression) == SCOPE_REF)
  	return false;
  
-       /* CO_AWAIT/YIELD_EXPR with unknown type is always dependent.  */
-       if (TREE_CODE (expression) == CO_AWAIT_EXPR
- 	  || TREE_CODE (expression) == CO_YIELD_EXPR)
- 	return true;
- 
        if (BASELINK_P (expression))
  	{
  	  if (BASELINK_OPTYPE (expression)
--- 28731,28736 ----
diff -Nrcpad gcc-14-20250425/gcc/cp/typeck.cc gcc-14-20250502/gcc/cp/typeck.cc
*** gcc-14-20250425/gcc/cp/typeck.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/cp/typeck.cc	Fri May  2 22:32:17 2025
*************** check_return_expr (tree retval, bool *no
*** 11426,11438 ****
  
    /* Actually copy the value returned into the appropriate location.  */
    if (retval && retval != result)
!     {
!       /* If there's a postcondition for a scalar return value, wrap
! 	 retval in a call to the postcondition function.  */
!       if (tree post = apply_postcondition_to_return (retval))
! 	retval = post;
!       retval = cp_build_init_expr (result, retval);
!     }
  
    if (current_function_return_value == bare_retval)
      INIT_EXPR_NRV_P (retval) = true;
--- 11426,11432 ----
  
    /* Actually copy the value returned into the appropriate location.  */
    if (retval && retval != result)
!     retval = cp_build_init_expr (result, retval);
  
    if (current_function_return_value == bare_retval)
      INIT_EXPR_NRV_P (retval) = true;
*************** check_return_expr (tree retval, bool *no
*** 11440,11450 ****
    if (tree set = maybe_set_retval_sentinel ())
      retval = build2 (COMPOUND_EXPR, void_type_node, retval, set);
  
-   /* If there's a postcondition for an aggregate return value, call the
-      postcondition function after the return object is initialized.  */
-   if (tree post = apply_postcondition_to_return (result))
-     retval = build2 (COMPOUND_EXPR, void_type_node, retval, post);
- 
    return retval;
  }
  
--- 11434,11439 ----
diff -Nrcpad gcc-14-20250425/gcc/fortran/ChangeLog gcc-14-20250502/gcc/fortran/ChangeLog
*** gcc-14-20250425/gcc/fortran/ChangeLog	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/fortran/ChangeLog	Fri May  2 22:32:17 2025
***************
*** 1,3 ****
--- 1,13 ----
+ 2025-04-30  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-04-16  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/106948
+ 	* resolve.cc (gfc_pure_function): If a function has been resolved,
+ 	but esym is not yet set, look at its attributes to see whether it
+ 	is pure or elemental.
+ 
  2025-04-14  Harald Anlauf  <anlauf@gmx.de>
  
  	Backported from master:
diff -Nrcpad gcc-14-20250425/gcc/fortran/resolve.cc gcc-14-20250502/gcc/fortran/resolve.cc
*** gcc-14-20250425/gcc/fortran/resolve.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/fortran/resolve.cc	Fri May  2 22:32:17 2025
*************** gfc_pure_function (gfc_expr *e, const ch
*** 3155,3160 ****
--- 3155,3167 ----
  	     || e->value.function.isym->elemental;
        *name = e->value.function.isym->name;
      }
+   else if (e->symtree && e->symtree->n.sym && e->symtree->n.sym->attr.dummy)
+     {
+       /* The function has been resolved, but esym is not yet set.
+ 	 This can happen with functions as dummy argument.  */
+       pure = e->symtree->n.sym->attr.pure;
+       *name = e->symtree->n.sym->name;
+     }
    else
      {
        /* Implicit functions are not pure.  */
diff -Nrcpad gcc-14-20250425/gcc/gimplify.cc gcc-14-20250502/gcc/gimplify.cc
*** gcc-14-20250425/gcc/gimplify.cc	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/gimplify.cc	Fri May  2 22:32:17 2025
*************** struct gimplify_ctx
*** 227,232 ****
--- 227,233 ----
    unsigned keep_stack : 1;
    unsigned save_stack : 1;
    unsigned in_switch_expr : 1;
+   unsigned in_handler_expr : 1;
  };
  
  enum gimplify_defaultmap_kind
*************** gimplify_expr (tree *expr_p, gimple_seq
*** 18244,18265 ****
  	    input_location = UNKNOWN_LOCATION;
  	    eval = cleanup = NULL;
  	    gimplify_and_add (TREE_OPERAND (*expr_p, 0), &eval);
  	    if (TREE_CODE (*expr_p) == TRY_FINALLY_EXPR
  		&& TREE_CODE (TREE_OPERAND (*expr_p, 1)) == EH_ELSE_EXPR)
  	      {
  		gimple_seq n = NULL, e = NULL;
  		gimplify_and_add (TREE_OPERAND (TREE_OPERAND (*expr_p, 1),
  						0), &n);
  		gimplify_and_add (TREE_OPERAND (TREE_OPERAND (*expr_p, 1),
  						1), &e);
! 		if (!gimple_seq_empty_p (n) && !gimple_seq_empty_p (e))
  		  {
  		    geh_else *stmt = gimple_build_eh_else (n, e);
  		    gimple_seq_add_stmt (&cleanup, stmt);
  		  }
  	      }
  	    else
! 	      gimplify_and_add (TREE_OPERAND (*expr_p, 1), &cleanup);
  	    /* Don't create bogus GIMPLE_TRY with empty cleanup.  */
  	    if (gimple_seq_empty_p (cleanup))
  	      {
--- 18245,18272 ----
  	    input_location = UNKNOWN_LOCATION;
  	    eval = cleanup = NULL;
  	    gimplify_and_add (TREE_OPERAND (*expr_p, 0), &eval);
+ 	    bool save_in_handler_expr = gimplify_ctxp->in_handler_expr;
  	    if (TREE_CODE (*expr_p) == TRY_FINALLY_EXPR
  		&& TREE_CODE (TREE_OPERAND (*expr_p, 1)) == EH_ELSE_EXPR)
  	      {
  		gimple_seq n = NULL, e = NULL;
+ 		gimplify_ctxp->in_handler_expr = true;
  		gimplify_and_add (TREE_OPERAND (TREE_OPERAND (*expr_p, 1),
  						0), &n);
  		gimplify_and_add (TREE_OPERAND (TREE_OPERAND (*expr_p, 1),
  						1), &e);
! 		if (!gimple_seq_empty_p (n) || !gimple_seq_empty_p (e))
  		  {
  		    geh_else *stmt = gimple_build_eh_else (n, e);
  		    gimple_seq_add_stmt (&cleanup, stmt);
  		  }
  	      }
  	    else
! 	      {
! 		gimplify_ctxp->in_handler_expr = true;
! 		gimplify_and_add (TREE_OPERAND (*expr_p, 1), &cleanup);
! 	      }
! 	    gimplify_ctxp->in_handler_expr = save_in_handler_expr;
  	    /* Don't create bogus GIMPLE_TRY with empty cleanup.  */
  	    if (gimple_seq_empty_p (cleanup))
  	      {
*************** gimplify_expr (tree *expr_p, gimple_seq
*** 18359,18364 ****
--- 18366,18375 ----
  	  /* When within an OMP context, notice uses of variables.  */
  	  if (gimplify_omp_ctxp)
  	    omp_notice_variable (gimplify_omp_ctxp, *expr_p, true);
+ 	  /* Handlers can refer to the function result; if that has been
+ 	     moved, we need to track it.  */
+ 	  if (gimplify_ctxp->in_handler_expr && gimplify_ctxp->return_temp)
+ 	    *expr_p = gimplify_ctxp->return_temp;
  	  ret = GS_ALL_DONE;
  	  break;
  
diff -Nrcpad gcc-14-20250425/gcc/ginclude/stddef.h gcc-14-20250502/gcc/ginclude/stddef.h
*** gcc-14-20250425/gcc/ginclude/stddef.h	Fri Apr 25 22:32:09 2025
--- gcc-14-20250502/gcc/ginclude/stddef.h	Fri May  2 22:32:17 2025
*************** see the files COPYING3 and COPYING.RUNTI
*** 89,94 ****
--- 89,109 ----
  #undef _PTRDIFF_T_
  #endif
  
+ /* When modular code is enabled with macOS SDKs from version 15, the
+    include guards are set in the includers of this code, rather than as
+    part of it.  This means the we must unset them or the intended code
+    here will be bypassed (resulting in undefined values).  */
+ #if defined (__APPLE__)
+ # if defined(__has_feature) && __has_feature(modules)
+ #  if defined (__need_ptrdiff_t)
+ #   undef __PTRDIFF_T
+ #  endif
+ #  if defined (__need_size_t)
+ #   undef __SIZE_T
+ #  endif
+ # endif
+ #endif
+ 
  /* On VxWorks, <type/vxTypesBase.h> may have defined macros like
     _TYPE_size_t which will typedef size_t.  fixincludes patched the
     vxTypesBase.h so that this macro is only defined if _GCC_SIZE_T is
diff -Nrcpad gcc-14-20250425/gcc/testsuite/ChangeLog gcc-14-20250502/gcc/testsuite/ChangeLog
*** gcc-14-20250425/gcc/testsuite/ChangeLog	Fri Apr 25 22:32:10 2025
--- gcc-14-20250502/gcc/testsuite/ChangeLog	Fri May  2 22:32:22 2025
***************
*** 1,3 ****
--- 1,182 ----
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2024-08-02  Iain Sandoe  <iain@sandoe.co.uk>
+ 		    Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/105475
+ 	* g++.dg/coroutines/pr103868.C: Add std::coroutine_handle
+ 	members we check for now.
+ 	* g++.dg/coroutines/pr105287.C: Ditto.
+ 	* g++.dg/coroutines/pr105301.C: Ditto.
+ 	* g++.dg/coroutines/pr94528.C: Ditto.
+ 	* g++.dg/coroutines/pr94879-folly-1.C: Ditto.
+ 	* g++.dg/coroutines/pr94883-folly-2.C: Ditto.
+ 	* g++.dg/coroutines/pr98118.C: Ditto.
+ 	* g++.dg/coroutines/pr105475.C: New test.
+ 	* g++.dg/coroutines/pr105475-1.C: New test.
+ 	* g++.dg/coroutines/pr105475-2.C: New test.
+ 	* g++.dg/coroutines/pr105475-3.C: New test.
+ 	* g++.dg/coroutines/pr105475-4.C: New test.
+ 	* g++.dg/coroutines/pr105475-5.C: New test.
+ 	* g++.dg/coroutines/pr105475-6.C: New test.
+ 	* g++.dg/coroutines/pr105475-broken-spec.C: New test.
+ 	* g++.dg/coroutines/pr105475-broken-spec-2.C: New test.
+ 
+ 2025-05-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-08-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/112341
+ 	* g++.dg/coroutines/pr112341-2.C: New test.
+ 	* g++.dg/coroutines/pr112341-3.C: New test.
+ 	* g++.dg/coroutines/torture/co-yield-03-tmpl-nondependent.C: New
+ 	test.
+ 	* g++.dg/coroutines/pr112341.C: New test.
+ 
+ 2025-05-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-07-30  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/115906
+ 	* g++.dg/coroutines/pr115906-yield.C: New test.
+ 	* g++.dg/coroutines/pr115906.C: New test.
+ 	* g++.dg/coroutines/co-await-syntax-02-outside-fn.C: Don't rely
+ 	on default arguments.
+ 	* g++.dg/coroutines/co-yield-syntax-01-outside-fn.C: Ditto.
+ 
+ 2025-05-01  Arsen Arsenovic  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-07-30  Arsen Arsenovic  <arsen@aarsen.me>
+ 
+ 	PR c++/115906
+ 	* g++.dg/coroutines/coro-function-decl.C: New test.
+ 
+ 2025-05-01  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	Backported from master:
+ 	2024-07-25  Arsen Arsenović  <arsen@aarsen.me>
+ 
+ 	PR c++/111728
+ 	* g++.dg/coroutines/pr111728.C: New test.
+ 
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2024-07-16  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	PR c++/115434
+ 	PR c++/110871
+ 	PR c++/110872
+ 	* g++.dg/contracts/pr115434.C: New test.
+ 	* g++.dg/coroutines/pr110871.C: New test.
+ 	* g++.dg/coroutines/pr110872.C: New test.
+ 
+ 2025-05-01  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	Backported from master:
+ 	2025-03-13  Iain Sandoe  <iain@sandoe.co.uk>
+ 
+ 	* lib/gm2.exp: Arrange for a '-B' option to be added for the
+ 	libstdc++ paths on targets that need it.
+ 
+ 2025-04-30  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-04-16  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/106948
+ 	* gfortran.dg/pure_formal_proc_4.f90: New test.
+ 
+ 2025-04-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-30  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/119981
+ 	PR c++/119378
+ 	* g++.dg/cpp2a/lambda-targ15.C: New test.
+ 
+ 2025-04-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-30  Richard Sandiford  <richard.sandiford@arm.com>
+ 
+ 	* gcc.target/aarch64/pr115258.c: Add -mcmodel=small.
+ 
+ 2025-04-30  Georg-Johann Lay  <avr@gjlay.de>
+ 
+ 	* gcc.target/avr/torture/pr119989.h: New file.
+ 	* gcc.target/avr/torture/pr119989-memx-1.c: New test.
+ 	* gcc.target/avr/torture/pr119989-memx-2.c: New test.
+ 	* gcc.target/avr/torture/pr119989-memx-3.c: New test.
+ 	* gcc.target/avr/torture/pr119989-memx-4.c: New test.
+ 
+ 2025-04-30  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Vineet Gupta  <vineetg@rivosinc.com>
+ 
+ 	PR target/119533
+ 	* go.dg/pr119533-riscv.go: New test.
+ 	* go.dg/pr119533-riscv-2.go: New test.
+ 
+ 2025-04-30  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Robin Dapp  <rdapp@ventanamicro.com>
+ 
+ 	PR target/119547
+ 	* gcc.target/riscv/rvv/vsetvl/avl_single-68.c: xfail.
+ 	* g++.target/riscv/rvv/autovec/pr119547.C: New test.
+ 	* g++.target/riscv/rvv/autovec/pr119547-2.C: New test.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c: Adjust.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c: Adjust.
+ 	* gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c: Adjust.
+ 
+ 2025-04-29  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR c++/119807
+ 	PR c++/112288
+ 	* g++.dg/template/friend86.C: New test.
+ 	* g++.dg/template/friend87.C: New test.
+ 
+ 2025-04-28  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-16  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/116954
+ 	* g++.dg/warn/Wformat-3.C: New test.
+ 
+ 2025-04-28  Jason Merrill  <jason@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-04-15  Jason Merrill  <jason@redhat.com>
+ 
+ 	PR c++/113835
+ 	* g++.dg/cpp2a/constexpr-vector1.C: New test.
+ 
+ 2025-04-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	Backported from master:
+ 	2025-04-17  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR tree-optimization/119351
+ 	* gcc.target/aarch64/sve/pr119351.c: New test.
+ 	* gcc.target/aarch64/sve/pr119351_run.c: New test.
+ 
+ 2025-04-28  Tamar Christina  <tamar.christina@arm.com>
+ 
+ 	PR target/118892
+ 	* gcc.target/aarch64/copysign-pr118892.c: New test.
+ 
  2025-04-24  Martin Jambor  <mjambor@suse.cz>
  
  	Backported from master:
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/contracts/pr115434.C gcc-14-20250502/gcc/testsuite/g++.dg/contracts/pr115434.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/contracts/pr115434.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/contracts/pr115434.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,16 ----
+ // We were failing to apply post conditions to void functions.
+ 
+ // { dg-do run }
+ // { dg-options "-std=c++20 -fcontracts -fcontract-continuation-mode=on" }
+ 
+ 
+ void foo (const int b)
+ [[ post: b == 9 ]]  // contract not checked
+ {}
+ 
+ int main()
+ {
+    foo(3);
+ }
+ 
+ // { dg-output "contract violation in function foo at .*.C:8: b == 9.*(\n|\r\n|\r)" }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/co-await-syntax-02-outside-fn.C	Fri May  2 22:32:26 2025
***************
*** 2,5 ****
  
  #include "coro.h"
  
! auto f (int x = co_await coro::suspend_always{}); // { dg-error {'co_await' cannot be used outside a function} }
--- 2,5 ----
  
  #include "coro.h"
  
! auto x = co_await coro::suspend_always{}; // { dg-error {'co_await' cannot be used outside a function} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/co-yield-syntax-01-outside-fn.C	Fri May  2 22:32:26 2025
***************
*** 2,6 ****
  
  #include "coro.h"
  
! auto f (int x = co_yield 5); // { dg-error {'co_yield' cannot be used outside a function} }
! 
--- 2,5 ----
  
  #include "coro.h"
  
! auto x = co_yield 5; // { dg-error {'co_yield' cannot be used outside a function} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/coro-function-decl.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/coro-function-decl.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/coro-function-decl.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/coro-function-decl.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,19 ----
+ #include <coroutine>
+ 
+ struct task
+ {
+   struct promise_type
+   {
+     std::suspend_always initial_suspend () { return {}; }
+     std::suspend_always final_suspend () noexcept { return {}; }
+     void unhandled_exception () {}
+     task get_return_object () noexcept { return {}; }
+     void return_void () {}
+   };
+ };
+ 
+ task foo ()
+ {
+   void bar ();
+   co_return;
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr103868.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr103868.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr103868.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr103868.C	Fri May  2 22:32:26 2025
*************** namespace std {
*** 79,84 ****
--- 79,86 ----
  template <typename...> struct coroutine_traits;
  template <typename = void> struct coroutine_handle {
    operator coroutine_handle<>();
+   static coroutine_handle from_address(void*);
+   void* address();
  };
  struct suspend_always {
    bool await_ready();
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105287.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105287.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105287.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105287.C	Fri May  2 22:32:26 2025
*************** namespace std {
*** 4,9 ****
--- 4,11 ----
  template <typename _Result> struct coroutine_traits : _Result {};
  template <typename = void> struct coroutine_handle {
    operator coroutine_handle<>();
+   static coroutine_handle from_address(void*);
+   void* address();
  };
  }
  struct coro1 {
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105301.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105301.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105301.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105301.C	Fri May  2 22:32:26 2025
*************** struct suspend_always {
*** 29,35 ****
  
  namespace std {
  template <class PromiseType = void>
! struct coroutine_handle {};
  }
  
  struct bad_promise_6 {
--- 29,38 ----
  
  namespace std {
  template <class PromiseType = void>
! struct coroutine_handle {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
  }
  
  struct bad_promise_6 {
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-1.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-1.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-1.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-1.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,27 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we have everything we need for coroutine_handle<void>,
+ // but not for coroutine_handle<promise>.
+ namespace std {
+ struct awaitable {
+   bool await_ready() noexcept { return false; }
+   void await_suspend(auto) noexcept {}
+   bool await_resume() noexcept { return true; }
+ };
+ 
+ template <typename T> struct coroutine_handle {
+   static coroutine_handle from_address(void *address);
+ };
+ 
+ template <typename T = void> struct coroutine_traits {
+   struct promise_type {
+     awaitable initial_suspend() { return {}; }
+     awaitable final_suspend() noexcept { return {}; }
+     void return_void() {}
+     T get_return_object() { return T(); }
+     void unhandled_exception() {}
+   };
+ };
+ } // namespace std
+ 
+ void foo() { co_return; }
+ // { dg-error "'address' is not a member of 'std::coroutine_handle<void>'" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-2.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-2.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-2.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ // { dg-do compile }
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we lack 'from_address' (i.e. the member required from
+ // coroutine_handle<void>), but not address()
+ namespace std {
+ 
+ struct awaitable {
+   bool await_ready() noexcept { return false; }
+   void await_suspend(auto) noexcept {}
+   bool await_resume() noexcept { return true; }
+ };
+ 
+ template <typename T> struct coroutine_handle {
+   void* address();
+ };
+ 
+ template <typename T = void> struct coroutine_traits {
+   struct promise_type {
+     awaitable initial_suspend() { return {}; }
+     awaitable final_suspend() noexcept { return {}; }
+     void return_void() {}
+     T get_return_object() { return T(); }
+     void unhandled_exception() {}
+   };
+ };
+ } // namespace std
+ 
+ void foo() { co_return; }
+ // { dg-error "'from_address' is not a member of 'std::coroutine_handle<std::coroutine_traits<void>::promise_type>'" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-3.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-3.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-3.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-3.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we create a non-static from_address.
+ #include <coroutine>
+ 
+ struct promise;
+ 
+ struct task
+ { using promise_type = promise; };
+ 
+ struct promise
+ {
+   void return_void () {}
+   std::suspend_never final_suspend() noexcept { return {}; }
+   std::suspend_never initial_suspend() noexcept { return {}; }
+   void unhandled_exception () {}
+   task get_return_object() { return {}; }
+ };
+ 
+ /* Invalid.  */
+ namespace std
+ {
+   template<>
+   struct coroutine_handle<promise>
+   { coroutine_handle from_address(void*); };
+ };
+ 
+ task foo()
+ { co_return; }
+ // { dg-error "std::__n4861::coroutine_handle<promise>::from_address' must be a non-overloaded static function" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-4.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-4.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-4.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-4.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,41 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we create a static address.
+ struct promise;
+ 
+ namespace std
+ {
+   template<typename>
+   struct coroutine_handle
+   {
+     static coroutine_handle from_address(void*);
+ 
+     static void* address();
+   };
+ 
+   struct suspend_never
+   {
+     bool await_ready();
+     void await_suspend(coroutine_handle<void>);
+     void await_resume();
+   };
+ 
+   template<typename T>
+   struct coroutine_traits
+   { using promise_type = typename T::promise_type; };
+ };
+ 
+ 
+ struct task
+ { using promise_type = promise; };
+ 
+ struct promise
+ {
+   void return_void () {}
+   std::suspend_never final_suspend() noexcept { return {}; }
+   std::suspend_never initial_suspend() noexcept { return {}; }
+   void unhandled_exception () {}
+   task get_return_object() { return {}; }
+ };
+ 
+ task foo() { co_return; }
+ // { dg-error "std::coroutine_handle<void>::address' must be a non-overloaded method" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-5.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-5.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-5.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-5.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we have type members instead of functions for
+ // from_address and address.
+ namespace std {
+ struct awaitable {
+   bool await_ready() noexcept { return false; }
+   void await_suspend(auto) noexcept {}
+   bool await_resume() noexcept { return true; }
+ };
+ 
+ template <typename T>
+ struct coroutine_handle {
+   struct from_address {};
+   struct address {};
+ };
+ 
+ template <typename T = void> struct coroutine_traits {
+   struct promise_type {
+     awaitable initial_suspend() { return {}; }
+     awaitable final_suspend() noexcept { return {}; }
+     void return_void() {}
+     T get_return_object() { return T(); }
+     void unhandled_exception() {}
+   };
+ };
+ } // namespace std
+ 
+ void foo() { co_return; }
+ // { dg-error "'std::coroutine_handle<void>::address' must be a non-overloaded method" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-6.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-6.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-6.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-6.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we have data members instead of functions for
+ // from_address and address.
+ namespace std {
+ struct awaitable {
+   bool await_ready() noexcept { return false; }
+   void await_suspend(auto) noexcept {}
+   bool await_resume() noexcept { return true; }
+ };
+ 
+ template <typename T>
+ struct coroutine_handle {
+   static int from_address;
+   int address;
+ };
+ 
+ template <typename T = void> struct coroutine_traits {
+   struct promise_type {
+     awaitable initial_suspend() { return {}; }
+     awaitable final_suspend() noexcept { return {}; }
+     void return_void() {}
+     T get_return_object() { return T(); }
+     void unhandled_exception() {}
+   };
+ };
+ } // namespace std
+ 
+ void foo() { co_return; }
+ // { dg-error "'std::coroutine_handle<void>::address' must be a non-overloaded method" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec-2.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec-2.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec-2.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,33 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we specialize coroutine_handle<void> and remove
+ // 'address'.
+ namespace std {
+ 
+ struct awaitable {
+   bool await_ready() noexcept { return false; }
+   void await_suspend(auto) noexcept {}
+   bool await_resume() noexcept { return true; }
+ };
+ 
+ template <typename T> struct coroutine_handle {
+   static coroutine_handle from_address(void *address);
+   void* address();
+ };
+ 
+ template <> struct coroutine_handle<void> {
+   static coroutine_handle from_address(void *address);
+ };
+ 
+ template <typename T = void> struct coroutine_traits {
+   struct promise_type {
+     awaitable initial_suspend() { return {}; }
+     awaitable final_suspend() noexcept { return {}; }
+     void return_void() {}
+     T get_return_object() { return T(); }
+     void unhandled_exception() {}
+   };
+ };
+ } // namespace std
+ 
+ void foo() { co_return; }
+ // { dg-error "'address' is not a member of 'std::coroutine_handle<void>'" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475-broken-spec.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ // https://gcc.gnu.org/PR105475
+ // Test the case where we specialize coroutine_handle and break it.
+ #include <coroutine>
+ 
+ struct promise;
+ 
+ struct task
+ { using promise_type = promise; };
+ 
+ struct promise
+ {
+   void return_void () {}
+   std::suspend_never final_suspend() noexcept { return {}; }
+   std::suspend_never initial_suspend() noexcept { return {}; }
+   void unhandled_exception () {}
+   task get_return_object() { return {}; }
+ };
+ 
+ /* Invalid.  */
+ namespace std
+ {
+   template<>
+   struct coroutine_handle<promise>
+   {};
+ };
+ 
+ task foo()
+ { co_return; }
+ // { dg-error "'from_address' is not a member of 'std::__n4861::coroutine_handle<promise>'" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr105475.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr105475.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,28 ----
+ // https://gcc.gnu.org/PR105475
+ namespace std {
+ 
+ struct handle {};
+ 
+ struct awaitable {
+   bool await_ready() noexcept { return false; }
+   void await_suspend(handle) noexcept {}
+   bool await_resume() noexcept { return true; }
+ };
+ 
+ template <typename T> struct coroutine_handle {
+   static handle from_address(void *address) noexcept { return {}; }
+ };
+ 
+ template <typename T = void> struct coroutine_traits {
+   struct promise_type {
+     awaitable initial_suspend() { return {}; }
+     awaitable final_suspend() noexcept { return {}; }
+     void return_void() {}
+     T get_return_object() { return T(); }
+     void unhandled_exception() {}
+   };
+ };
+ } // namespace std
+ 
+ void foo() { co_return; }
+ // { dg-error "'address' is not a member of 'std::coroutine_handle<void>'" "" { target *-*-* } {.-1} }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr110871.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr110871.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr110871.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr110871.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,62 ----
+ // { dg-additional-options "-fcontracts -fcontract-continuation-mode=on" }
+ // { dg-do run }
+ #include <iostream>
+ #include <coroutine>
+ 
+ // In order to test the contract violation diagnostic, we have to set
+ // -fcontract-continuation-mode=on; this means that the code will emit
+ // the message below - but before that the contract should have been checked.
+ void process(int from, int to)
+ {
+   if (from > to)
+     std::cout << "would have been a disaster!" << std::endl;
+ }
+ 
+ template <typename T>
+ struct generator
+ {
+     struct promise_type
+     {
+         template <typename... Args>
+         promise_type(Args&&... args) {
+             std::cout << "promise init" << std::endl;
+             process(args...);
+         }
+ 
+         std::suspend_always yield_value(T) { return {}; }
+ 
+         std::suspend_always initial_suspend() const noexcept { return {}; }
+         std::suspend_never final_suspend() const noexcept { return {}; }
+         void unhandled_exception() noexcept {}
+ 
+         generator<T> get_return_object() noexcept { return {}; }
+     };
+ };
+ 
+ namespace std {
+ template <typename T, typename... Args>
+ struct coroutine_traits<generator<T>, Args...>
+ {
+     using promise_type = typename generator<T>::promise_type;
+ };
+ 
+ };
+ 
+ generator<int> seq(int from, int to) [[pre: from <= to]]
+ 
+ {
+     std::cout << "coro initial" << std::endl;
+     for (int i = from; i <= to; ++i) {
+         co_yield i;
+         std::cout << "coro resumed" << std::endl;
+     }
+ }
+ 
+ int main() { 
+     std::cout << "main initial" << std::endl;
+     generator<int> s = seq(10, 5);
+     (void)s;
+     std::cout << "main continues" << std::endl;
+ }
+ 
+ // { dg-output "contract violation in function seq at .*.C:45: from \<= to.*(\n|\r\n|\r)" }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr110872.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr110872.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr110872.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr110872.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,49 ----
+ // { dg-additional-options "-fcontracts -fcontract-continuation-mode=on" }
+ // { dg-do run }
+ 
+ #include <iostream>
+ #include <coroutine>
+ 
+ 
+ template <typename T>
+ struct generator
+ {
+     struct promise_type
+     {
+         std::suspend_always yield_value(T) { return {}; }
+ 
+         std::suspend_always initial_suspend() const noexcept { return {}; }
+         std::suspend_never final_suspend() const noexcept { return {}; }
+         void unhandled_exception() noexcept {}
+ 
+         generator<T> get_return_object() noexcept { return {}; }
+     };
+ 
+     bool is_valid() { return false; }
+ };
+ 
+ namespace std {
+ template <typename T, typename... Args>
+ struct coroutine_traits<generator<T>, Args...>
+ {
+     using promise_type = typename generator<T>::promise_type;
+ };
+ 
+ };
+ 
+ generator<int> val(int v) 
+ [[post g: g.is_valid()]]
+ {
+     std::cout << "coro initial" << std::endl;
+     co_yield v;
+     std::cout << "coro resumed" << std::endl;
+ }
+ 
+ int main() { 
+     std::cout << "main initial" << std::endl;
+     generator<int> s = val(1);
+     (void)s;
+     std::cout << "main continues" << std::endl;
+ }
+ 
+ // { dg-output "contract violation in function val at .*.C:35: g.is_valid().*(\n|\r\n|\r)" }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr111728.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr111728.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr111728.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr111728.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ // { dg-do compile }
+ // https://gcc.gnu.org/PR111728
+ #include <coroutine>
+ struct promise;
+ struct coroutine : std::coroutine_handle<promise>
+ {
+     using promise_type = ::promise;
+     bool await_ready() { return false; }
+     void await_suspend(coroutine_handle h) {}
+     int await_resume() { return {} ;}
+ };
+ struct promise
+ {
+     coroutine get_return_object() { return {coroutine::from_promise(*this)}; }
+     std::suspend_always initial_suspend() noexcept { return {}; }
+     std::suspend_always final_suspend() noexcept { return {}; }
+     void return_void() {}
+     void unhandled_exception() {}
+ };
+ coroutine
+ write_fields() {
+   int static_buffer[10];
+   co_await [](auto)
+   -> coroutine
+   {
+     if (sizeof(static_buffer));
+       co_return;
+   }(0);
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr112341-2.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr112341-2.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr112341-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr112341-2.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,25 ----
+ // https://gcc.gnu.org/PR112341
+ #include <coroutine>
+ struct A { int j; };
+ struct B {
+     bool await_ready();
+     bool await_suspend(std::coroutine_handle<>);
+     A await_resume();
+ };
+ struct C {
+     struct promise_type {
+         std::suspend_always initial_suspend();
+         std::suspend_always final_suspend() noexcept;
+         B yield_value(auto);
+         void unhandled_exception();
+         C get_return_object();
+         void return_value(A);
+     };
+ };
+ template<typename>
+ C f() {
+   // Make sure we verify types we can still.
+   (co_await B()).i; // { dg-error "'struct A' has no member named 'i'" }
+   (co_yield 123).i; // { dg-error "'struct A' has no member named 'i'" }
+   co_return 123; // { dg-error "cannot convert 'int' to 'A'" }
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr112341-3.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr112341-3.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr112341-3.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr112341-3.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,65 ----
+ // https://gcc.gnu.org/PR112341
+ #include <coroutine>
+ struct A { int j; };
+ struct B {
+     bool await_ready();
+     bool await_suspend(std::coroutine_handle<>);
+     A await_resume();
+ };
+ struct C {
+     struct promise_type {
+         std::suspend_always initial_suspend();
+         std::suspend_always final_suspend() noexcept;
+         void unhandled_exception();
+         C get_return_object();
+         void return_void();
+         std::suspend_never yield_value(int x);
+     };
+ };
+ 
+ // Similar to the above, but with a template yield_value and return_value.
+ struct D {
+     struct promise_type {
+         std::suspend_always initial_suspend();
+         std::suspend_always final_suspend() noexcept;
+         void unhandled_exception();
+         D get_return_object();
+         void return_value(auto);
+         std::suspend_never yield_value(auto);
+     };
+ };
+ 
+ template<typename>
+ C f() {
+   co_return;
+ }
+ 
+ template<typename>
+ C g()
+ {
+   co_yield 123;
+ }
+ 
+ template<typename>
+ D f1() {
+   co_return 123;
+ }
+ 
+ template<typename>
+ D g1()
+ {
+   co_yield 123;
+ }
+ 
+ void
+ g() {
+   f<int>();
+   f<bool>();
+   g<int>();
+   g<bool>();
+ 
+   f1<int>();
+   f1<bool>();
+   g1<int>();
+   g1<bool>();
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr112341.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr112341.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr112341.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr112341.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,21 ----
+ // https://gcc.gnu.org/PR112341
+ #include <coroutine>
+ struct A { int j; };
+ struct B {
+     bool await_ready();
+     bool await_suspend(std::coroutine_handle<>);
+     A await_resume();
+ };
+ struct C {
+     struct promise_type {
+         std::suspend_always initial_suspend();
+         std::suspend_always final_suspend() noexcept;
+         void unhandled_exception();
+         C get_return_object();
+         void return_void();
+         B yield_value(auto) { return {}; }
+     };
+ };
+ C f1(auto) { (co_await B()).j; }
+ C f2(auto) { (co_yield 0).j; }
+ void g() { f1(0); f2(0); }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr115906-yield.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr115906-yield.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr115906-yield.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr115906-yield.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,29 ----
+ #include <coroutine>
+ 
+ struct Promise;
+ 
+ struct Handle : std::coroutine_handle<Promise> {
+     using promise_type = Promise;
+ };
+ 
+ struct Promise {
+     Handle get_return_object() noexcept {
+         return {Handle::from_promise(*this)};
+     }
+     std::suspend_never initial_suspend() const noexcept { return {}; }
+     std::suspend_never final_suspend() const noexcept { return {}; }
+     void return_void() const noexcept {}
+     void unhandled_exception() const noexcept {}
+     std::suspend_never yield_value(int) { return {}; }
+ };
+ 
+ Handle Coro() {
+     [] (int x = co_yield 1){}; // { dg-error ".co_yield. cannot be used in default arguments" }
+     co_return;
+ }
+ 
+ int main() {
+     Coro();
+ 
+     return 0;
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr115906.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr115906.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr115906.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr115906.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,32 ----
+ #include <coroutine>
+ 
+ struct Promise;
+ 
+ struct Handle : std::coroutine_handle<Promise> {
+     using promise_type = Promise;
+ };
+ 
+ struct Promise {
+     Handle get_return_object() noexcept {
+         return {Handle::from_promise(*this)};
+     }
+     std::suspend_never initial_suspend() const noexcept { return {}; }
+     std::suspend_never final_suspend() const noexcept { return {}; }
+     void return_void() const noexcept {}
+     void unhandled_exception() const noexcept {}
+ };
+ 
+ Handle Coro() {
+     struct Awaiter : std::suspend_never {
+         int await_resume() { return 0; }
+     };
+ 
+     [] (int x = co_await Awaiter{}){}; // { dg-error ".co_await. cannot be used in default arguments" }
+     co_return;
+ }
+ 
+ int main() {
+     Coro();
+ 
+     return 0;
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr94528.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr94528.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr94528.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr94528.C	Fri May  2 22:32:26 2025
*************** template <typename _Result, typename> st
*** 5,12 ****
    using promise_type = _Result::promise_type;
  };
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> { public: };
! template <typename> struct coroutine_handle : coroutine_handle<> {};
  struct suspend_always {
    bool await_ready();
    void await_suspend(coroutine_handle<>);
--- 5,19 ----
    using promise_type = _Result::promise_type;
  };
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {
! public:
!   static coroutine_handle from_address(void*);
!   void* address();
! };
! template <typename> struct coroutine_handle : coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
  struct suspend_always {
    bool await_ready();
    void await_suspend(coroutine_handle<>);
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr94879-folly-1.C	Fri May  2 22:32:26 2025
*************** template <typename a> a b(a &&);
*** 5,12 ****
  template <typename c> struct d { c e; };
  template <typename f, typename> struct coroutine_traits : f {};
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {};
! template <typename> struct coroutine_handle : coroutine_handle<> {};
  struct g {};
  } // namespace std
  
--- 5,18 ----
  template <typename c> struct d { c e; };
  template <typename f, typename> struct coroutine_traits : f {};
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
! template <typename> struct coroutine_handle : coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
  struct g {};
  } // namespace std
  
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr94883-folly-2.C	Fri May  2 22:32:26 2025
***************
*** 2,9 ****
  namespace std {
  template <typename a, typename...> struct coroutine_traits : a {};
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {};
! template <typename> struct coroutine_handle : coroutine_handle<> {};
  struct b {
    bool await_ready();
    void await_suspend(coroutine_handle<>);
--- 2,15 ----
  namespace std {
  template <typename a, typename...> struct coroutine_traits : a {};
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
! template <typename> struct coroutine_handle : coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
  struct b {
    bool await_ready();
    void await_suspend(coroutine_handle<>);
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr98118.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr98118.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/pr98118.C	Fri Apr 25 22:32:11 2025
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/pr98118.C	Fri May  2 22:32:26 2025
*************** namespace std {
*** 2,9 ****
  inline namespace __n4861 {
  template <typename _Result, typename> struct coroutine_traits : _Result {};
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {};
! template <typename> struct coroutine_handle : coroutine_handle<> {};
  struct suspend_never {
    bool await_ready() noexcept;
    void await_suspend(coroutine_handle<>) noexcept;
--- 2,15 ----
  inline namespace __n4861 {
  template <typename _Result, typename> struct coroutine_traits : _Result {};
  template <typename = void> struct coroutine_handle;
! template <> struct coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
! template <typename> struct coroutine_handle : coroutine_handle<> {
!   static coroutine_handle from_address(void*);
!   void* address();
! };
  struct suspend_never {
    bool await_ready() noexcept;
    void await_suspend(coroutine_handle<>) noexcept;
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl-nondependent.C gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl-nondependent.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl-nondependent.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/coroutines/torture/co-yield-03-tmpl-nondependent.C	Fri May  2 22:32:26 2025
***************
*** 0 ****
--- 1,140 ----
+ //  { dg-do run }
+ 
+ // Test co_yield in templated code where the promise type is not dependent.
+ 
+ #include "../coro.h"
+ 
+ template <typename T> 
+ struct looper {
+ 
+   struct promise_type {
+   T value;
+   promise_type() {  PRINT ("Created Promise"); }
+   ~promise_type() { PRINT ("Destroyed Promise"); }
+ 
+   auto get_return_object () {
+     PRINT ("get_return_object: handle from promise");
+     return handle_type::from_promise (*this);
+   }
+ 
+   auto initial_suspend () {
+     PRINT ("get initial_suspend (always)");
+     return suspend_always_prt{};
+   }
+ 
+   auto final_suspend () noexcept {
+     PRINT ("get final_suspend (always)");
+     return suspend_always_prt{};
+   }
+ 
+   void return_value (T v) {
+     PRINTF ("return_value () %lf\n", (double)v);
+     value = v;
+   }
+ 
+   auto yield_value (T v) {
+     PRINTF ("yield_value () %lf and suspend always\n", (double)v);
+     value = v;
+     return suspend_always_prt{};
+   }
+   
+   T get_value (void) { return value; }
+ 
+   void unhandled_exception() { PRINT ("** unhandled exception"); }
+   };
+   
+   using handle_type = coro::coroutine_handle<looper::promise_type>;
+   handle_type handle;
+ 
+   looper () : handle(0) {}
+   looper (handle_type _handle)
+     : handle(_handle) {
+         PRINT("Created coro1 object from handle");
+   }
+   looper (const looper &) = delete; // no copying
+   looper (looper &&s) : handle(s.handle) {
+     s.handle = nullptr;
+     PRINT("looper mv ctor ");
+   }
+   looper &operator = (looper &&s) {
+     handle = s.handle;
+     s.handle = nullptr;
+     PRINT("looper op=  ");
+     return *this;
+   }
+   ~looper() {
+     PRINT("Destroyed coro1");
+     if ( handle )
+       handle.destroy();
+   }
+ 
+   struct suspend_never_prt {
+     bool await_ready() const noexcept { return true; }
+     void await_suspend(handle_type) const noexcept { PRINT ("susp-never-susp"); }
+     void await_resume() const noexcept { PRINT ("susp-never-resume");}
+   };
+ 
+   /* NOTE: this has a DTOR to test that pathway.  */
+   struct  suspend_always_prt {
+     bool await_ready() const noexcept { return false; }
+     void await_suspend(handle_type) const noexcept { PRINT ("susp-always-susp"); }
+     void await_resume() const noexcept { PRINT ("susp-always-resume"); }
+     ~suspend_always_prt() { PRINT ("susp-always-DTOR"); }
+   };
+ 
+ };
+ 
+ // Contrived to avoid non-scalar state across the yield.
+ template <typename>
+ looper<int> f () noexcept
+ {
+   for (int i = 5; i < 10 ; ++i)
+     {
+       PRINTF ("f: about to yield %d\n", i);
+       co_yield (int) i;
+     }
+ 
+   PRINT ("f: about to return 6174");
+   co_return 6174;
+ }
+ 
+ // contrived, only going to work for an int.
+ int main ()
+ {
+   PRINT ("main: create int looper");
+   auto f_coro = f<int> ();
+ 
+   if (f_coro.handle.done())
+     {
+       PRINT ("main: said we were done, but we hadn't started!");
+       abort();
+     }
+ 
+   PRINT ("main: OK -- looping");
+   int y, test = 5;
+   do {
+     f_coro.handle.resume();
+     if (f_coro.handle.done())
+       break;
+     y = f_coro.handle.promise().get_value();
+     if (y != test)
+       {
+ 	PRINTF ("main: failed for test %d, got %d\n", test, y);
+ 	abort();
+       }
+     test++;
+   } while (test < 20);
+ 
+   y = f_coro.handle.promise().get_value();
+   if ( y != 6174 )
+     abort ();
+ 
+   PRINT ("main: apparently got 6174");
+   if (!f_coro.handle.done())
+     {
+       PRINT ("main: apparently not done...");
+       abort ();
+     }
+   PRINT ("main: returning");
+   return 0;
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C gcc-14-20250502/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/cpp2a/constexpr-vector1.C	Fri May  2 22:32:27 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/113835
+ // { dg-timeout-factor 0.05 }
+ // { dg-do compile { target c++20_only } }
+ 
+ #include <vector>
+ const std::size_t N = 1'000'000;
+ std::vector<int> x(N);
+ int main() {}
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/cpp2a/lambda-targ15.C gcc-14-20250502/gcc/testsuite/g++.dg/cpp2a/lambda-targ15.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/cpp2a/lambda-targ15.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/cpp2a/lambda-targ15.C	Fri May  2 22:32:27 2025
***************
*** 0 ****
--- 1,17 ----
+ // PR c++/119981
+ // { dg-do compile { target c++20 } }
+ 
+ template<template<class> class P>
+ struct mp_copy_if{};
+ 
+ template<auto Fn>
+ struct g {
+   template<class> struct fn{};
+ };
+ 
+ template<typename>
+ void test3() {
+   mp_copy_if<g<[]{}>::template fn> b;
+ }
+ 
+ template void test3<int>();
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/template/friend86.C gcc-14-20250502/gcc/testsuite/g++.dg/template/friend86.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/template/friend86.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/template/friend86.C	Fri May  2 22:32:28 2025
***************
*** 0 ****
--- 1,25 ----
+ // PR c++/119807
+ // { dg-do run }
+ 
+ template<int N>
+ struct A {
+   template<class T> friend int f(A<N>, T);
+ };
+ 
+ template struct A<0>;
+ template struct A<1>;
+ 
+ int main() {
+   A<0> x;
+   A<1> y;
+   if (f(x, true) != 0) __builtin_abort();
+   if (f(y, true) != 1) __builtin_abort();
+ }
+ 
+ template<int N>
+ struct B {
+   template<class T> friend int f(A<N>, T) { return N; }
+ };
+ 
+ template struct B<0>;
+ template struct B<1>;
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/template/friend87.C gcc-14-20250502/gcc/testsuite/g++.dg/template/friend87.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/template/friend87.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/template/friend87.C	Fri May  2 22:32:28 2025
***************
*** 0 ****
--- 1,42 ----
+ // PR c++/119807
+ // { dg-do compile { target c++20 } }
+ 
+ using size_t = decltype(sizeof(0));
+ 
+ template<auto tag, size_t current>
+ struct CounterReader {
+ 	template<typename>
+ 	friend auto counterFlag(CounterReader<tag, current>) noexcept;
+ };
+ 
+ template<auto tag, size_t current>
+ struct CounterWriter {
+ 	static constexpr size_t value = current;
+ 
+ 	template<typename>
+ 	friend auto counterFlag(CounterReader<tag, current>) noexcept {}
+ };
+ 
+ template<auto tag, auto unique, size_t current = 0, size_t mask = size_t(1) << (sizeof(size_t) * 8 - 1)>
+ [[nodiscard]] constexpr size_t counterAdvance() noexcept {
+ 	if constexpr (!mask) {
+ 		return CounterWriter<tag, current + 1>::value;
+ 	} else if constexpr (requires { counterFlag<void>(CounterReader<tag, current | mask>()); }) {
+ 		return counterAdvance<tag, unique, current | mask, (mask >> 1)>();
+ 	} 
+ 	else {
+ 		return counterAdvance<tag, unique, current, (mask >> 1)>();
+ 	}
+ }
+ 
+ constexpr auto defaultCounterTag = [] {};
+ 
+ template<auto tag = defaultCounterTag, auto unique = [] {}>
+ constexpr size_t counter() noexcept {
+ 	return counterAdvance<tag, unique>();
+ }
+ 
+ int main() {
+ 	static_assert(counter() == 1);
+ 	static_assert(counter() == 2);
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.dg/warn/Wformat-3.C gcc-14-20250502/gcc/testsuite/g++.dg/warn/Wformat-3.C
*** gcc-14-20250425/gcc/testsuite/g++.dg/warn/Wformat-3.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.dg/warn/Wformat-3.C	Fri May  2 22:32:29 2025
***************
*** 0 ****
--- 1,19 ----
+ // PR c++/116954
+ // { dg-additional-options -Wformat }
+ 
+ #ifndef WORKS
+ template<int N>
+ int fn(char (&buf)[N], const char fmt[], ...)
+   __attribute__ ((__format__ (__printf__, 2, 3)));
+ #endif
+ 
+ template<int  N>
+ __attribute__ ((__format__ (__printf__, 2, 3)))
+ int fn(char (&)[N], const char [], ...)
+ { return 0; }
+ 
+ int main()
+ {
+   char buf[20];
+   return fn(buf, "%s", 42); /* { dg-warning "Wformat" } */
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C gcc-14-20250502/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C
*** gcc-14-20250425/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547-2.C	Fri May  2 22:32:30 2025
***************
*** 0 ****
--- 1,212 ----
+ /* { dg-do run { target rv64 } } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d --param=logical-op-non-short-circuit=0" } */
+ 
+ #include <riscv_vector.h>
+ 
+ using v_uint8 = vuint8m2_t;
+ using v_int8 = vint8m2_t;
+ using v_uint16 = vuint16m2_t;
+ using v_int16 = vint16m2_t;
+ using v_uint32 = vuint32m2_t;
+ using v_int32 = vint32m2_t;
+ using v_uint64 = vuint64m2_t;
+ using v_int64 = vint64m2_t;
+ using v_float32 = vfloat32m2_t;
+ using v_float64 = vfloat64m2_t;
+ 
+ using uchar = unsigned char;
+ using schar = signed char;
+ using ushort = unsigned short;
+ using uint = unsigned int;
+ using uint64 = unsigned long int;
+ using int64 = long int;
+ 
+ struct Size
+ {
+   int width;
+   int height;
+ };
+ 
+ template <class T> struct VTraits;
+ 
+ template <> struct VTraits<vint32m1_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e32m1 (); }
+   using lane_type = int32_t;
+   static const int max_nlanes = 1024 / 32 * 2;
+ };
+ template <> struct VTraits<vint32m2_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e32m2 (); }
+   using lane_type = int32_t;
+   static const int max_nlanes = 1024 / 32 * 2;
+ };
+ template <> struct VTraits<vint32m4_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e32m4 (); }
+   using lane_type = int32_t;
+   static const int max_nlanes = 1024 / 32 * 2;
+ };
+ template <> struct VTraits<vint32m8_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e32m8 (); }
+   using lane_type = int32_t;
+   static const int max_nlanes = 1024 / 32 * 2;
+ };
+ 
+ template <> struct VTraits<vfloat64m1_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e64m1 (); }
+   using lane_type = double;
+   static const int max_nlanes = 1024 / 64 * 2;
+ };
+ template <> struct VTraits<vfloat64m2_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e64m2 (); }
+   using lane_type = double;
+   static const int max_nlanes = 1024 / 64 * 2;
+ };
+ template <> struct VTraits<vfloat64m4_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e64m4 (); }
+   using lane_type = double;
+   static const int max_nlanes = 1024 / 64 * 2;
+ };
+ template <> struct VTraits<vfloat64m8_t>
+ {
+   static inline int vlanes () { return __riscv_vsetvlmax_e64m8 (); }
+   using lane_type = double;
+   static const int max_nlanes = 1024 / 64 * 2;
+ };
+ 
+ static inline v_float64
+ v_setall_f64 (double v)
+ {
+   return __riscv_vfmv_v_f_f64m2 (v, VTraits<v_float64>::vlanes ());
+ }
+ static inline v_float64
+ vx_setall_f64 (double v)
+ {
+   return v_setall_f64 (v);
+ }
+ 
+ inline v_int32
+ v_load_expand_q (const schar *ptr)
+ {
+   return __riscv_vwcvt_x (
+     __riscv_vwcvt_x (__riscv_vle8_v_i8mf2 (ptr, VTraits<v_int32>::vlanes ()),
+ 		     VTraits<v_int32>::vlanes ()),
+     VTraits<v_int32>::vlanes ());
+ }
+ 
+ static inline v_int32
+ vx_load_expand_q (const schar *ptr)
+ {
+   return v_load_expand_q (ptr);
+ }
+ 
+ inline v_float64
+ v_cvt_f64 (const v_int32 &a)
+ {
+   return __riscv_vget_f64m2 (__riscv_vfwcvt_f (a, VTraits<v_int32>::vlanes ()),
+ 			     0);
+ }
+ 
+ inline v_float64
+ v_cvt_f64_high (const v_int32 &a)
+ {
+   return __riscv_vget_f64m2 (__riscv_vfwcvt_f (a, VTraits<v_int32>::vlanes ()),
+ 			     1);
+ }
+ 
+ inline void
+ v_store (double *ptr, const v_float64 &a)
+ {
+   __riscv_vse64 (ptr, a, VTraits<v_float64>::vlanes ());
+ }
+ 
+ static inline void
+ v_store_pair_as (double *ptr, const v_float64 &a, const v_float64 &b)
+ {
+   v_store (ptr, a);
+   v_store (ptr + VTraits<v_float64>::vlanes (), b);
+ }
+ 
+ static inline void
+ vx_load_pair_as (const schar *ptr, v_float64 &a, v_float64 &b)
+ {
+   v_int32 v0 = vx_load_expand_q (ptr);
+   a = v_cvt_f64 (v0);
+   b = v_cvt_f64_high (v0);
+ }
+ 
+ inline v_float64
+ v_fma (const v_float64 &a, const v_float64 &b, const v_float64 &c)
+ {
+   return __riscv_vfmacc_vv_f64m2 (c, a, b, VTraits<v_float64>::vlanes ());
+ }
+ 
+ template <typename _Tp>
+ static inline _Tp
+ saturate_cast (double v)
+ {
+   return _Tp (v);
+ }
+ 
+ template <typename _Ts, typename _Td>
+ __attribute__ ((noipa)) void
+ cvt_64f (const _Ts *src, size_t sstep, _Td *dst, size_t dstep, Size size,
+ 	 double a, double b)
+ {
+   v_float64 va = vx_setall_f64 (a), vb = vx_setall_f64 (b);
+   const int VECSZ = VTraits<v_float64>::vlanes () * 2;
+ 
+   sstep /= sizeof (src[0]);
+   dstep /= sizeof (dst[0]);
+ 
+   for (int i = 0; i < size.height; i++, src += sstep, dst += dstep)
+     {
+       int j = 0;
+ 
+       for (; j < size.width; j += VECSZ)
+ 	{
+ 	  if (j > size.width - VECSZ)
+ 	    {
+ 	      if (j == 0 || src == (_Ts *) dst)
+ 		break;
+ 	      j = size.width - VECSZ;
+ 	    }
+ 	  v_float64 v0, v1;
+ 	  vx_load_pair_as (src + j, v0, v1);
+ 	  v0 = v_fma (v0, va, vb);
+ 	  v1 = v_fma (v1, va, vb);
+ 	  v_store_pair_as (dst + j, v0, v1);
+ 	}
+ 
+       for (; j < size.width; j++)
+ 	dst[j] = saturate_cast<_Td> (src[j] * a + b);
+     }
+ }
+ 
+ void
+ __attribute__ ((noipa))
+ cvtScale8s64f (const uchar *src_, size_t sstep, const uchar *, size_t,
+ 	       uchar *dst_, size_t dstep, Size size, void *scale_)
+ {
+   const schar *src = (const schar *) src_;
+   double *dst = (double *) dst_;
+   double *scale = (double *) scale_;
+   cvt_64f (src, sstep, dst, dstep, size, (double) scale[0], (double) scale[1]);
+ }
+ 
+ int main ()
+ {
+   uchar src[1024];
+   uchar dst[1024];
+ 
+   double scale[2] = {2.0, 3.0};
+   Size size {4, 1};
+ 
+   cvtScale8s64f (src, 4, NULL, 0, dst, 32, size, (void *)scale);
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C gcc-14-20250502/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C
*** gcc-14-20250425/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/g++.target/riscv/rvv/autovec/pr119547.C	Fri May  2 22:32:30 2025
***************
*** 0 ****
--- 1,82 ----
+ /* { dg-do run { target rv64 } } */
+ /* { dg-require-effective-target riscv_v_ok } */
+ /* { dg-options "-O3 -march=rv64gcv -mabi=lp64d --param=logical-op-non-short-circuit=0" } */
+ 
+ #include <riscv_vector.h>
+ using v_int32 = vint32m2_t;
+ using v_float64 = vfloat64m2_t;
+ struct Size
+ {
+   int width;
+   int height;
+ };
+ template <class> struct VTraits
+ {
+   static int vlanes () { return __riscv_vsetvlmax_e32m2 (); }
+ };
+ v_int32
+ v_load_expand_q (const signed char *ptr)
+ {
+   return __riscv_vwcvt_x (
+     __riscv_vwcvt_x (__riscv_vle8_v_i8mf2 (ptr, VTraits<v_int32>::vlanes ()),
+ 		     VTraits<v_int32>::vlanes ()),
+     VTraits<v_int32>::vlanes ());
+ }
+ v_float64
+ v_cvt_f64_high (v_int32 a)
+ {
+   return __riscv_vget_f64m2 (__riscv_vfwcvt_f (a, VTraits<v_int32>::vlanes ()),
+ 			     1);
+ }
+ void
+ v_store (double *ptr, v_float64 a)
+ {
+   __riscv_vse64 (ptr, a, __riscv_vsetvlmax_e64m2 ());
+ }
+ void
+ v_store_pair_as (double *ptr, v_float64 b)
+ {
+   v_store (ptr, b);
+ }
+ void
+ vx_load_pair_as (const signed char *ptr, v_float64, v_float64 &b)
+ {
+   v_int32 v0;
+   b = v_cvt_f64_high (v0);
+ };
+ void
+ cvt_64f (const signed char *src, double *dst, Size size)
+ {
+   int VECSZ = __riscv_vsetvlmax_e64m2 ();
+   for (int i; i < size.height; i++)
+     {
+       int j;
+       for (;; j += VECSZ)
+ 	{
+ 	  if (j > -VECSZ)
+ 	    if (j == 0 || dst)
+ 	      break;
+ 	  v_float64 v0, v1;
+ 	  vx_load_pair_as (src, v0, v1);
+ 	  v_store_pair_as (dst, v1);
+ 	}
+       for (; j < size.width; j++)
+ 	dst[j] = (src[j]);
+     }
+ }
+ void
+ cvtScale8s64f (unsigned char *src_, unsigned char *dst_,
+ 	       size_t, Size size, void *)
+ {
+   signed char src;
+   double dst = *dst_;
+   cvt_64f (&src, &dst, size);
+ }
+ int main ()
+ {
+   unsigned char src[1];
+   unsigned char dst[1024];
+   double scale[1];
+   Size size{4, 1};
+   cvtScale8s64f (src, dst, 32, size, scale);
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/copysign-pr118892.c gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/copysign-pr118892.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/copysign-pr118892.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/copysign-pr118892.c	Fri May  2 22:32:42 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast" } */
+ 
+ double l();
+ double f()
+ {
+   double t6[2] = {l(), l()};
+   double t7[2];
+   __builtin_memcpy(&t7, &t6, sizeof(t6));
+   return -__builtin_fabs(t7[1]);
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/pr115258.c gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/pr115258.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/pr115258.c	Fri Apr 25 22:32:41 2025
--- gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/pr115258.c	Fri May  2 22:32:42 2025
***************
*** 1,4 ****
! /* { dg-options "-O2" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  /*
--- 1,4 ----
! /* { dg-options "-O2 -mcmodel=small" } */
  /* { dg-final { check-function-bodies "**" "" "" } } */
  
  /*
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/sve/pr119351.c	Fri May  2 22:32:55 2025
***************
*** 0 ****
--- 1,35 ----
+ /* Fix for PR119351 alignment peeling with vectors and VLS.  */
+ /* { dg-do compile } */
+ /* { dg-options "-Ofast -msve-vector-bits=256 --param aarch64-autovec-preference=2 -fdump-tree-vect-details" } */
+ /* { dg-final { check-function-bodies "**" "" ""} } */
+ 
+ #define N 512
+ #define START 0
+ #define END 505
+  
+ int x[N] __attribute__((aligned(32)));
+ 
+ /*
+ ** foo:
+ **	...
+ **	orr	p[0-9]+.b, p[0-9]+/z, p[0-9]+.b, p[0-9]+.b
+ **	...
+ */
+ 
+ int __attribute__((noipa))
+ foo (void)
+ {
+   int z = 0;
+   for (unsigned short i = START; i < END; ++i)
+     {
+       z++;
+       if (x[i] > 0)
+         continue;
+     
+       return z;
+     }
+   return -1;
+ }
+ 
+ /* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */
+ 
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/aarch64/sve/pr119351_run.c	Fri May  2 22:32:55 2025
***************
*** 0 ****
--- 1,20 ----
+ /* Fix for PR119351 alignment peeling with vectors and VLS.  */
+ /* { dg-do run { target aarch64_sve_hw } } */
+ /* { dg-options "-Ofast --param aarch64-autovec-preference=2" } */
+ /* { dg-additional-options "-msve-vector-bits=256" { target aarch64_sve256_hw } } */
+ /* { dg-additional-options "-msve-vector-bits=128" { target aarch64_sve128_hw } } */
+ 
+ #include "pr119351.c"
+ 
+ int __attribute__ ((optimize (1)))
+ main (void)
+ {
+   x[0] = 1;
+   x[1] = 21;
+   x[2] = 39;
+   x[3] = 59;
+   int res = foo ();
+   if (res != 5)
+     __builtin_abort ();
+   return 0;
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-1.c	Fri May  2 22:33:10 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT8_TYPE__ TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-2.c	Fri May  2 22:33:10 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT16_TYPE__ TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-3.c	Fri May  2 22:33:10 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ __extension__ typedef __uint24 TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989-memx-4.c	Fri May  2 22:33:10 2025
***************
*** 0 ****
--- 1,6 ----
+ /* { dg-do run { target { ! avr_tiny } } } */
+ /* { dg-additional-options "-std=gnu99" } */
+ 
+ typedef __UINT32_TYPE__ TYP;
+ 
+ #include "pr119989.h"
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989.h gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989.h
*** gcc-14-20250425/gcc/testsuite/gcc.target/avr/torture/pr119989.h	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gcc.target/avr/torture/pr119989.h	Fri May  2 22:33:10 2025
***************
*** 0 ****
--- 1,37 ----
+ const __memx TYP some_data[] = { 1, 2, 3, 4, 5 };
+ const __memx TYP *IP;
+ 
+ TYP DT, a, b;
+ 
+ __attribute__((noipa))
+ void do_test1 (void)
+ {
+     DT = *IP;
+     DT = *IP--;
+ }
+ 
+ __attribute__((noipa))
+ void do_test2 (void)
+ {
+     DT = *IP;
+     __asm volatile ("" ::: "memory"); // Prevents unwanted optimization
+     DT = *IP--;
+ }
+ 
+ TYP difference(void)
+ {
+     IP = &some_data[3];
+     do_test1();
+     a = DT;
+     IP = &some_data[3];
+     do_test2();
+     b = DT;
+     return a - b; // Expected: 0
+ }
+ 
+ int main (void)
+ {
+     if (difference () != 0)
+         __builtin_exit (__LINE__);
+     return 0;
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c	Fri Apr 25 22:32:51 2025
--- gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/avl_single-68.c	Fri May  2 22:33:18 2025
*************** void f2 (void * restrict in, void * rest
*** 21,26 ****
    }
  }
  
  /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
  /* { dg-final { scan-assembler-times {addi\s+[a-x0-9]+,\s*[a-x0-9]+,\s*44} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
--- 21,32 ----
    }
  }
  
+ /* The second check is XFAILed because we currently don't lift
+    vsetvls into non-transparent (in LCM parlance) blocks.
+    See PR119547.
+    In this test it is still possible because the conflicting
+    register only ever feeds vsetvls.  */
+ 
  /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*[a-x0-9]+,\s*e8,\s*mf8,\s*tu,\s*m[au]} 2 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } xfail { *-*-* } } } } */
  /* { dg-final { scan-assembler-times {addi\s+[a-x0-9]+,\s*[a-x0-9]+,\s*44} 1 { target { no-opts "-O0" no-opts "-Os" no-opts "-Oz" no-opts "-g" no-opts "-funroll-loops" } } } } */
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c	Fri Apr 25 22:32:51 2025
--- gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-12.c	Fri May  2 22:33:18 2025
*************** void f2 (int32_t * restrict in, int32_t
*** 35,38 ****
      }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
--- 35,39 ----
      }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c	Fri Apr 25 22:32:51 2025
--- gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_conflict-3.c	Fri May  2 22:33:18 2025
*************** void f2 (int32_t * restrict in, int32_t
*** 26,30 ****
      }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 2 { target { no-opts "-O0" no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
  /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0"  no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
--- 26,31 ----
      }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+zero,\s*zero,\s*e8,\s*mf8,\s*t[au],\s*m[au]} 1 { target { no-opts "-O0" no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
  /* { dg-final { scan-assembler-times {vsetvli} 2 { target { no-opts "-O0"  no-opts "-O1"  no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c
*** gcc-14-20250425/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c	Fri Apr 25 22:32:51 2025
--- gcc-14-20250502/gcc/testsuite/gcc.target/riscv/rvv/vsetvl/vlmax_switch_vtype-10.c	Fri May  2 22:33:18 2025
*************** void foo (int8_t * restrict in, int8_t *
*** 43,48 ****
      }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli} 15 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 4 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
--- 43,48 ----
      }
  }
  
! /* { dg-final { scan-assembler-times {vsetvli} 14 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" no-opts "-flto" } } } } */
  /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e32,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
! /* { dg-final { scan-assembler-times {vsetvli\s+[a-x0-9]+,\s*zero,\s*e16,\s*mf2,\s*t[au],\s*m[au]} 3 { target { no-opts "-O0" no-opts "-O1" no-opts "-Os" no-opts "-Oz" no-opts "-funroll-loops" no-opts "-g" } } } } */
diff -Nrcpad gcc-14-20250425/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90 gcc-14-20250502/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90
*** gcc-14-20250425/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/gfortran.dg/pure_formal_proc_4.f90	Fri May  2 22:33:25 2025
***************
*** 0 ****
--- 1,49 ----
+ ! { dg-do compile }
+ ! PR fortran/106948 - check that passing of PURE procedures works
+ !
+ ! Contributed by Jim Feng
+ 
+ module a
+   implicit none
+ 
+   interface new
+     pure module subroutine b(x, f)
+       integer, intent(inout) :: x
+       interface
+         pure function f(x) result(r)
+           real, intent(in) :: x
+           real :: r
+         end function f
+       end interface
+     end subroutine b
+   end interface new
+ end module a
+ 
+ submodule(a) a_b
+   implicit none
+ 
+ contains
+   module procedure b
+     x = int(f(real(x)) * 0.15)
+   end procedure b
+ end submodule a_b
+ 
+ program test
+   use a
+   implicit none
+ 
+   integer :: x
+ 
+   x = 100
+   call new(x, g)
+   print *, x
+ 
+ contains
+ 
+   pure function g(y) result(r)
+     real, intent(in) :: y
+     real :: r
+ 
+     r = sqrt(y)
+   end function g
+ end program test
diff -Nrcpad gcc-14-20250425/gcc/testsuite/go.dg/pr119533-riscv-2.go gcc-14-20250502/gcc/testsuite/go.dg/pr119533-riscv-2.go
*** gcc-14-20250425/gcc/testsuite/go.dg/pr119533-riscv-2.go	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/go.dg/pr119533-riscv-2.go	Fri May  2 22:33:26 2025
***************
*** 0 ****
--- 1,42 ----
+ // { dg-do compile { target riscv64*-*-* } }
+ // { dg-options "-O2 -march=rv64gcv -mabi=lp64d" }
+ 
+ package ast
+ 
+ type as struct {
+ 	bt []struct{}
+ 	an string
+ }
+ 
+ func bj(a *as) string {
+ 	if b := a.bt; len(a.an) == 1 {
+ 		_ = b[0]
+ 	}
+ 	return a.an
+ }
+ 
+ func MergePackageFiles(f map[string][]interface{}, g uint) []interface{} {
+ 	bl := make([]string, len(f))
+ 	var bo []interface{}
+ 	bu := make(map[string]int)
+ 	for _, bm := range bl {
+ 		a := f[bm]
+ 		for _, d := range a {
+ 			if g != 0 {
+ 				if a, p := d.(*as); p {
+ 					n := bj(a)
+ 					if j, bp := bu[n]; bp {
+ 						_ = j
+ 					}
+ 				}
+ 			}
+ 		}
+ 	}
+ 	for _, bm := range bl {
+ 		_ = bm
+ 	}
+ 	for _, bm := range bl {
+ 		_ = f[bm]
+ 	}
+ 	return bo
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/go.dg/pr119533-riscv.go gcc-14-20250502/gcc/testsuite/go.dg/pr119533-riscv.go
*** gcc-14-20250425/gcc/testsuite/go.dg/pr119533-riscv.go	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/gcc/testsuite/go.dg/pr119533-riscv.go	Fri May  2 22:33:26 2025
***************
*** 0 ****
--- 1,120 ----
+ // { dg-do compile { target riscv64*-*-* } }
+ // { dg-options "-O2 -march=rv64gcv -mabi=lp64d" }
+ 
+ // Reduced from libgo build (multi-file reduction, merged mnaully
+ // and hand reduced again).
+ 
+ package ast
+ import (
+ 	"go/token"
+ 	"go/scanner"
+ 	"reflect"
+ )
+ type v struct {}
+ type w func( string,  reflect.Value) bool
+ func x( string,  reflect.Value) bool
+ type r struct {
+ 	scanner.ErrorList
+ }
+ type ab interface {}
+ type ae interface {}
+ type af interface {}
+ type ag struct {}
+ func (ag) Pos() token.Pos
+ func (ag) ah() token.Pos
+ type c struct {
+ 	aj    ae          }
+ type ak struct {
+ 	al    []c  }
+ type (
+ 	am struct {
+ 		an    string    }
+ 	bs struct {
+ 		Value    string
+ 	  }
+ )
+ func ao(string) *am
+ type (
+ 	ap interface {}
+ 	aq struct {
+ 		ar    bs     }
+ as struct {
+ 		bt ak
+ 		an am        }
+ )
+ type File struct {
+ 	*ag
+ 	token.Pos
+ 	*am
+ 	at      []af
+ 	*v
+ 	au    []*aq
+ 	av *am
+ 	aw   []*ag }
+ type ax struct {
+ 	an    string
+ 	*v
+ 	ay   map[string]File   }
+ func a(az *token.FileSet, b token.Pos) int
+ type k struct {
+ 	l token.Pos
+ 	ah   token.Pos
+ }
+ type m struct {
+ 	bb bool
+ 	bc   *ag
+ }
+ 
+ type bi uint
+ func bj(a *as) string {
+ 	if b := a.bt; len(b.al) == 1 {
+ 		c := b.al[0].aj
+ 		if e := c; e != nil {}
+ 	}
+ 	return a.an.an
+ }
+ func MergePackageFiles(f ax, g bi) *File {
+ 	h := 0
+ 	bk := 0
+ 	k := 0
+ 	bl := make([]string, len(f.ay))
+ 	i := 0
+ 	for bm, a := range f.ay {
+ 		bl[i] = bm
+ 		k += len(a.at)
+ 	}
+ 	var bn *ag
+ 	var l token.Pos
+ 	if h > 0 {}
+ 	var bo []af
+ 		bu := make(map[string]int)
+ 		m := 0
+ 		for _, bm := range bl {
+ 			a := f.ay[bm]
+ 			for _, d := range a.at {
+ 				if g!= 0 {
+ 					if a, p := d.(*as); p {
+ 						n := bj(a)
+ 						if j, bp := bu[n]; bp {
+ 							if bo != nil && bo[j]== nil {}
+ 						}
+ 					}
+ 				}
+ 			}
+ 		}
+ 		if m > 0 {}
+ 	var bq []*aq
+ 		q := make(map[string]bool)
+ 		for _, bm := range bl {
+ 			a := f.ay[bm]
+ 			for _, br := range a.au {
+ 				if o := br.ar.Value; q[o] {}
+ 			}
+ 		}
+ 	var bh = make([]*ag, bk)
+ 		for _, bm := range bl {
+ 			a := f.ay[bm]
+ 			copy(bh, a.aw)
+ 		}
+ 	return &File{bn, l, ao(f.an), bo, f.v, bq, nil, bh}
+ }
diff -Nrcpad gcc-14-20250425/gcc/testsuite/lib/gm2.exp gcc-14-20250502/gcc/testsuite/lib/gm2.exp
*** gcc-14-20250425/gcc/testsuite/lib/gm2.exp	Fri Apr 25 22:33:23 2025
--- gcc-14-20250502/gcc/testsuite/lib/gm2.exp	Fri May  2 22:33:27 2025
*************** proc gm2_link_flags { paths } {
*** 254,265 ****
      if [istarget "powerpc-*-*"] {
         lappend flags "-mabi=ieeelongdouble"
      }
      if { $gccpath == "" } {
        global tool_root_dir
  
        set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
        if { $libstdcpp != "" } {
!           append flags "-L${libstdcpp} "
            append ld_library_path ":${libstdcpp}"
        }
      } else {
--- 254,288 ----
      if [istarget "powerpc-*-*"] {
         lappend flags "-mabi=ieeelongdouble"
      }
+ 
+     # We need to add options to locate gm2 libs and libstdc++
+     # Usually '-L' options are added to point to the relevant directories for
+     # the uninstalled libraries.
+ 
+     # In cases where libraries are available as both shared and convenience
+     # some additional checks are made.
+ 
+     # For some targets -static-xxxx options are handled by specs substitution
+     # and need a '-B' option rather than '-L'.  For Darwin, when embedded
+     # runpaths are in use (the default for all versions after macOS 10.11),
+     # '-B' is also needed to provide the runpath.
+     # When '-B' is used, this results in a '-L' for each path that exists (so
+     # that appending a '-L' as well is a needless duplicate).  There are also
+     # cases where tools warn for duplicates, leading to spurious fails.
+     # Therefore the objective of the code below is to add just one '-L' or
+     # '-B' for each of the libraries.
+ 
+     set target_wants_B_option 0
+     if { [istarget *-*-darwin9* ] || [istarget *-*-darwin\[12\]* ] } {
+       set target_wants_B_option 1
+     }
+ 
      if { $gccpath == "" } {
        global tool_root_dir
  
        set libstdcpp [lookfor_file ${tool_root_dir} libstdc++]
        if { $libstdcpp != "" } {
!           append flags " -L${libstdcpp} "
            append ld_library_path ":${libstdcpp}"
        }
      } else {
*************** proc gm2_link_flags { paths } {
*** 267,285 ****
  	    append ld_library_path ":${gccpath}/lib"
  	}
  	if [file exists "${gccpath}/libstdc++/libstdc++.a"] {
! 	    append flags "-L${gccpath}/libstdc++ "
  	    append ld_library_path ":${gccpath}/libstdc++"
  	}
! 	if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] {
! 	    append flags " -L${gccpath}/libstdc++-v3/src/.libs "
! 	    append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
! 	}
! 	# Look for libstdc++.${shlib_ext}.
! 	if [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] {
! 	    append flags " -L${gccpath}/libstdc++-v3/src/.libs "
  	    append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
  	}
  
  	# puts stderr "${gm2_link_libraries}  before foreach"
  	foreach d [list {*}${gm2_link_libraries}] {
  	    # puts stderr "${d}  XXXX"
--- 290,311 ----
  	    append ld_library_path ":${gccpath}/lib"
  	}
  	if [file exists "${gccpath}/libstdc++/libstdc++.a"] {
! 	    append flags " -L${gccpath}/libstdc++ "
  	    append ld_library_path ":${gccpath}/libstdc++"
  	}
! 	# Look for libstdc++.<a,${shlib_ext}>.
!         if { [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.a"] \
! 	     || [file exists "${gccpath}/libstdc++-v3/src/.libs/libstdc++.${shlib_ext}"] } {
!             if { $target_wants_B_option } {
! 	        append flags " -B${gccpath}/libstdc++-v3/src/.libs "
!             } else {
! 	        append flags " -L${gccpath}/libstdc++-v3/src/.libs "
!             }
  	    append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs"
  	}
  
+ 	# Here we are forcing the static libraries, with complete paths so 
+ 	# there's no -L/-B logic needed
  	# puts stderr "${gm2_link_libraries}  before foreach"
  	foreach d [list {*}${gm2_link_libraries}] {
  	    # puts stderr "${d}  XXXX"
*************** proc gm2_link_flags { paths } {
*** 288,294 ****
  	    if [file exists "${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"] {
  		send_log "good found ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a\n"
  		# append flags " -L${gccpath}/libgm2/lib${d}/.libs -l${d}"
! 		append flags " ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"
  		append ld_library_path ":${gccpath}/libgm2/lib${d}/.libs"
  	    }
  	    send_log "ld_library_path is ${ld_library_path}\n"
--- 314,320 ----
  	    if [file exists "${gccpath}/libgm2/lib${d}/.libs/lib${d}.a"] {
  		send_log "good found ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a\n"
  		# append flags " -L${gccpath}/libgm2/lib${d}/.libs -l${d}"
! 		append flags " ${gccpath}/libgm2/lib${d}/.libs/lib${d}.a "
  		append ld_library_path ":${gccpath}/libgm2/lib${d}/.libs"
  	    }
  	    send_log "ld_library_path is ${ld_library_path}\n"
diff -Nrcpad gcc-14-20250425/gcc/tree-vect-stmts.cc gcc-14-20250502/gcc/tree-vect-stmts.cc
*** gcc-14-20250425/gcc/tree-vect-stmts.cc	Fri Apr 25 22:33:24 2025
--- gcc-14-20250502/gcc/tree-vect-stmts.cc	Fri May  2 22:33:29 2025
*************** vectorizable_early_exit (vec_info *vinfo
*** 12915,12943 ****
       codegen so we must replace the original insn.  */
    gimple *orig_stmt = STMT_VINFO_STMT (vect_orig_stmt (stmt_info));
    gcond *cond_stmt = as_a <gcond *>(orig_stmt);
    /* When vectorizing we assume that if the branch edge is taken that we're
       exiting the loop.  This is not however always the case as the compiler will
       rewrite conditions to always be a comparison against 0.  To do this it
       sometimes flips the edges.  This is fine for scalar,  but for vector we
!      then have to flip the test, as we're still assuming that if you take the
!      branch edge that we found the exit condition.  i.e. we need to know whether
!      we are generating a `forall` or an `exist` condition.  */
!   auto new_code = NE_EXPR;
!   auto reduc_optab = ior_optab;
!   auto reduc_op = BIT_IOR_EXPR;
!   tree cst = build_zero_cst (vectype);
!   edge exit_true_edge = EDGE_SUCC (gimple_bb (cond_stmt), 0);
!   if (exit_true_edge->flags & EDGE_FALSE_VALUE)
!     exit_true_edge = EDGE_SUCC (gimple_bb (cond_stmt), 1);
!   gcc_assert (exit_true_edge->flags & EDGE_TRUE_VALUE);
!   if (flow_bb_inside_loop_p (LOOP_VINFO_LOOP (loop_vinfo),
! 			     exit_true_edge->dest))
!     {
!       new_code = EQ_EXPR;
!       reduc_optab = and_optab;
!       reduc_op = BIT_AND_EXPR;
!       cst = build_minus_one_cst (vectype);
!     }
  
    /* Analyze only.  */
    if (!vec_stmt)
--- 12915,12937 ----
       codegen so we must replace the original insn.  */
    gimple *orig_stmt = STMT_VINFO_STMT (vect_orig_stmt (stmt_info));
    gcond *cond_stmt = as_a <gcond *>(orig_stmt);
+ 
+   tree cst = build_zero_cst (vectype);
+   auto bb = gimple_bb (cond_stmt);
+   edge exit_true_edge = EDGE_SUCC (bb, 0);
+   if (exit_true_edge->flags & EDGE_FALSE_VALUE)
+     exit_true_edge = EDGE_SUCC (bb, 1);
+   gcc_assert (exit_true_edge->flags & EDGE_TRUE_VALUE);
+ 
    /* When vectorizing we assume that if the branch edge is taken that we're
       exiting the loop.  This is not however always the case as the compiler will
       rewrite conditions to always be a comparison against 0.  To do this it
       sometimes flips the edges.  This is fine for scalar,  but for vector we
!      then have to negate the result of the test, as we're still assuming that if
!      you take the branch edge that we found the exit condition.  i.e. we need to
!      know whether we are generating a `forall` or an `exist` condition.  */
!   bool flipped = flow_bb_inside_loop_p (LOOP_VINFO_LOOP (loop_vinfo),
! 					exit_true_edge->dest);
  
    /* Analyze only.  */
    if (!vec_stmt)
*************** vectorizable_early_exit (vec_info *vinfo
*** 12953,12966 ****
  	}
  
        if (ncopies > 1
! 	  && direct_optab_handler (reduc_optab, mode) == CODE_FOR_nothing)
  	{
  	  if (dump_enabled_p ())
  	      dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
  			       "can't vectorize early exit because the "
! 			       "target does not support boolean vector %s "
  			       "for type %T.\n",
- 			       reduc_optab == ior_optab ? "OR" : "AND",
  			       vectype);
  	  return false;
  	}
--- 12947,12959 ----
  	}
  
        if (ncopies > 1
! 	  && direct_optab_handler (ior_optab, mode) == CODE_FOR_nothing)
  	{
  	  if (dump_enabled_p ())
  	      dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location,
  			       "can't vectorize early exit because the "
! 			       "target does not support boolean vector IOR "
  			       "for type %T.\n",
  			       vectype);
  	  return false;
  	}
*************** vectorizable_early_exit (vec_info *vinfo
*** 13010,13015 ****
--- 13003,13031 ----
  	stmts.quick_push (gimple_assign_lhs (stmt));
      }
  
+   /* If we're comparing against a previous forall we need to negate the resullts
+      before we do the final comparison or reduction.  */
+   if (flipped)
+     {
+       /* Rewrite the if(all(mask)) into if (!all(mask)) which is the same as
+ 	 if (any(~mask)) by negating the masks and flipping the branches.
+ 
+ 	1. For unmasked loops we simply reduce the ~mask.
+ 	2. For masked loops we reduce (~mask & loop_mask) which is the same as
+ 	   doing (mask & loop_mask) ^ loop_mask.  */
+       for (unsigned i = 0; i < stmts.length (); i++)
+ 	{
+ 	  tree inv_lhs = make_temp_ssa_name (vectype, NULL, "vexit_inv");
+ 	  auto inv_stmt = gimple_build_assign (inv_lhs, BIT_NOT_EXPR, stmts[i]);
+ 	  vect_finish_stmt_generation (loop_vinfo, stmt_info, inv_stmt,
+ 				       &cond_gsi);
+ 	  stmts[i] = inv_lhs;
+ 	}
+ 
+       EDGE_SUCC (bb, 0)->flags ^= (EDGE_TRUE_VALUE|EDGE_FALSE_VALUE);
+       EDGE_SUCC (bb, 1)->flags ^= (EDGE_TRUE_VALUE|EDGE_FALSE_VALUE);
+     }
+ 
    /* Determine if we need to reduce the final value.  */
    if (stmts.length () > 1)
      {
*************** vectorizable_early_exit (vec_info *vinfo
*** 13039,13045 ****
  	  new_temp = make_temp_ssa_name (vectype, NULL, "vexit_reduc");
  	  tree arg0 = workset.pop ();
  	  tree arg1 = workset.pop ();
! 	  new_stmt = gimple_build_assign (new_temp, reduc_op, arg0, arg1);
  	  vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt,
  				       &cond_gsi);
  	  workset.quick_insert (0, new_temp);
--- 13055,13061 ----
  	  new_temp = make_temp_ssa_name (vectype, NULL, "vexit_reduc");
  	  tree arg0 = workset.pop ();
  	  tree arg1 = workset.pop ();
! 	  new_stmt = gimple_build_assign (new_temp, BIT_IOR_EXPR, arg0, arg1);
  	  vect_finish_stmt_generation (loop_vinfo, stmt_info, new_stmt,
  				       &cond_gsi);
  	  workset.quick_insert (0, new_temp);
*************** vectorizable_early_exit (vec_info *vinfo
*** 13059,13065 ****
  
    gcc_assert (new_temp);
  
!   gimple_cond_set_condition (cond_stmt, new_code, new_temp, cst);
    update_stmt (orig_stmt);
  
    if (slp_node)
--- 13075,13081 ----
  
    gcc_assert (new_temp);
  
!   gimple_cond_set_condition (cond_stmt, NE_EXPR, new_temp, cst);
    update_stmt (orig_stmt);
  
    if (slp_node)
diff -Nrcpad gcc-14-20250425/libbacktrace/ChangeLog gcc-14-20250502/libbacktrace/ChangeLog
*** gcc-14-20250425/libbacktrace/ChangeLog	Fri Apr 25 22:33:24 2025
--- gcc-14-20250502/libbacktrace/ChangeLog	Fri May  2 22:33:30 2025
***************
*** 1,3 ****
--- 1,8 ----
+ 2025-04-25  John David Anglin  <danglin@gcc.gnu.org>
+ 
+ 	* fileline.c (hpux_get_executable_path): New.
+ 	(fileline_initialize): Add pass to get hpux executable path.
+ 
  2024-08-01  Release Manager
  
  	* GCC 14.2.0 released.
diff -Nrcpad gcc-14-20250425/libgcc/ChangeLog gcc-14-20250502/libgcc/ChangeLog
*** gcc-14-20250425/libgcc/ChangeLog	Fri Apr 25 22:33:24 2025
--- gcc-14-20250502/libgcc/ChangeLog	Fri May  2 22:33:31 2025
***************
*** 1,3 ****
--- 1,14 ----
+ 2025-05-01  Mark Mentovai  <mark@mentovai.com>
+ 
+ 	Backported from master:
+ 	2024-09-24  Mark Mentovai  <mark@mentovai.com>
+ 
+ 	PR target/116809
+ 	* config.host: Build legacy libgcc_s.1 on hosts before macOS 10.12.
+ 	* config/i386/t-darwin: Remove reference to legacy libgcc_s.1
+ 	* config/rs6000/t-darwin: Likewise.
+ 	* config/t-darwin-libgccs1: New file.
+ 
  2025-03-27  Jakub Jelinek  <jakub@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-14-20250425/libgcc/config/i386/t-darwin gcc-14-20250502/libgcc/config/i386/t-darwin
*** gcc-14-20250425/libgcc/config/i386/t-darwin	Fri Apr 25 22:33:25 2025
--- gcc-14-20250502/libgcc/config/i386/t-darwin	Fri May  2 22:33:31 2025
*************** LIB2FUNCS_EXCLUDE = _fixtfdi _fixunstfdi
*** 4,9 ****
  
  # Extra symbols for this port.
  SHLIB_MAPFILES += $(srcdir)/config/i386/libgcc-darwin.ver
- 
- # Build a legacy libgcc_s.1
- BUILD_LIBGCCS1 = YES
--- 4,6 ----
diff -Nrcpad gcc-14-20250425/libgcc/config/rs6000/t-darwin gcc-14-20250502/libgcc/config/rs6000/t-darwin
*** gcc-14-20250425/libgcc/config/rs6000/t-darwin	Fri Apr 25 22:33:25 2025
--- gcc-14-20250502/libgcc/config/rs6000/t-darwin	Fri May  2 22:33:31 2025
*************** unwind-dw2_s.o: HOST_LIBGCC2_CFLAGS += -
*** 56,61 ****
  unwind-dw2.o: HOST_LIBGCC2_CFLAGS += -maltivec
  
  LIB2ADDEH += $(srcdir)/config/rs6000/darwin-fallback.c
- 
- # Build a legacy libgcc_s.1
- BUILD_LIBGCCS1 = YES
--- 56,58 ----
diff -Nrcpad gcc-14-20250425/libgcc/config/t-darwin-libgccs1 gcc-14-20250502/libgcc/config/t-darwin-libgccs1
*** gcc-14-20250425/libgcc/config/t-darwin-libgccs1	Thu Jan  1 00:00:00 1970
--- gcc-14-20250502/libgcc/config/t-darwin-libgccs1	Fri May  2 22:33:31 2025
***************
*** 0 ****
--- 1,3 ----
+ 
+ # Build a legacy libgcc_s.1
+ BUILD_LIBGCCS1 = YES
diff -Nrcpad gcc-14-20250425/libgcc/config.host gcc-14-20250502/libgcc/config.host
*** gcc-14-20250425/libgcc/config.host	Fri Apr 25 22:33:24 2025
--- gcc-14-20250502/libgcc/config.host	Fri May  2 22:33:31 2025
*************** case ${host} in
*** 242,257 ****
      *-*-darwin1[89]*)
        tmake_file="t-darwin-min-8 $tmake_file"
        ;;
!     *-*-darwin9* | *-*-darwin1[0-7]*)
        tmake_file="t-darwin-min-5 $tmake_file"
        ;;
      *-*-darwin[4-8]*)
!       tmake_file="t-darwin-min-1 $tmake_file"
        ;;
      *)
        # Fall back to configuring for the oldest system known to work with
        # all archs and the current sources.
!       tmake_file="t-darwin-min-5 $tmake_file"
        echo "Warning: libgcc configured to support macOS 10.5" 1>&2
        ;;
    esac
--- 242,260 ----
      *-*-darwin1[89]*)
        tmake_file="t-darwin-min-8 $tmake_file"
        ;;
!     *-*-darwin1[67]]*)
        tmake_file="t-darwin-min-5 $tmake_file"
        ;;
+     *-*-darwin9* | *-*-darwin1[0-5]*)
+       tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file"
+       ;;
      *-*-darwin[4-8]*)
!       tmake_file="t-darwin-min-1 t-darwin-libgccs1 $tmake_file"
        ;;
      *)
        # Fall back to configuring for the oldest system known to work with
        # all archs and the current sources.
!       tmake_file="t-darwin-min-5 t-darwin-libgccs1 $tmake_file"
        echo "Warning: libgcc configured to support macOS 10.5" 1>&2
        ;;
    esac
diff -Nrcpad gcc-14-20250425/libstdc++-v3/ChangeLog gcc-14-20250502/libstdc++-v3/ChangeLog
*** gcc-14-20250425/libstdc++-v3/ChangeLog	Fri Apr 25 22:33:34 2025
--- gcc-14-20250502/libstdc++-v3/ChangeLog	Fri May  2 22:33:37 2025
***************
*** 1,3 ****
--- 1,56 ----
+ 2025-04-30  François Dumont  <frs.dumont@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-04-30  François Dumont  <frs.dumont@gmail.com>
+ 		    Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* testsuite/lib/libstdc++.exp (v3_target_compile): Strip version namespace
+ 	from compiler output.
+ 	* testsuite/20_util/function/cons/70692.cc: Remove now useless __8 namespace
+ 	pattern.
+ 	* testsuite/23_containers/map/48101_neg.cc: Likewise.
+ 	* testsuite/23_containers/multimap/48101_neg.cc: Likewise.
+ 
+ 2025-04-29  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-28  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/104606
+ 	* include/std/optional (operator<=>): Revert r14-9771 change.
+ 	Add constraint checking the validity of the return type
+ 	compare_three_way_result_t before the three_way_comparable_with
+ 	constraint.
+ 
+ 2025-04-29  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-26  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/118083
+ 	* include/bits/ranges_base.h
+ 	(ranges::__access::__possibly_const_range): Mention LWG 4027.
+ 
+ 2025-04-29  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-02-25  Patrick Palka  <ppalka@redhat.com>
+ 
+ 	PR libstdc++/118083
+ 	* include/bits/ranges_base.h
+ 	(ranges::__access::__possibly_const_range): Adjust logic as per
+ 	LWG 4027.  Add missing input_range constraint.
+ 	* testsuite/std/ranges/access/cbegin.cc (test05): Verify LWG
+ 	4027 testcases.
+ 	* testsuite/std/ranges/access/cdata.cc: Adjust, simplify and
+ 	consolidate some tests after the above.
+ 	* testsuite/std/ranges/access/cend.cc: Likewise.
+ 	* testsuite/std/ranges/access/crbegin.cc: Likewise.
+ 	* testsuite/std/ranges/access/crend.cc: Likewise.
+ 	* testsuite/std/ranges/adaptors/join.cc: Likewise.
+ 	* testsuite/std/ranges/adaptors/take_while.cc: Likewise.
+ 	* testsuite/std/ranges/adaptors/transform.cc: Likewise.
+ 
  2025-04-17  Tomasz Kamiński  <tkaminsk@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-14-20250425/libstdc++-v3/include/bits/ranges_base.h gcc-14-20250502/libstdc++-v3/include/bits/ranges_base.h
*** gcc-14-20250425/libstdc++-v3/include/bits/ranges_base.h	Fri Apr 25 22:33:35 2025
--- gcc-14-20250502/libstdc++-v3/include/bits/ranges_base.h	Fri May  2 22:33:38 2025
*************** namespace ranges
*** 631,641 ****
    namespace __access
    {
  #if __glibcxx_ranges_as_const // >= C++23
!     template<typename _Range>
        constexpr auto&
        __possibly_const_range(_Range& __r) noexcept
        {
! 	if constexpr (constant_range<const _Range> && !constant_range<_Range>)
  	  return const_cast<const _Range&>(__r);
  	else
  	  return __r;
--- 631,643 ----
    namespace __access
    {
  #if __glibcxx_ranges_as_const // >= C++23
!     template<input_range _Range>
        constexpr auto&
        __possibly_const_range(_Range& __r) noexcept
        {
! 	// _GLIBCXX_RESOLVE_LIB_DEFECTS
! 	// 4027. possibly-const-range should prefer returning const R&
! 	if constexpr (input_range<const _Range>)
  	  return const_cast<const _Range&>(__r);
  	else
  	  return __r;
diff -Nrcpad gcc-14-20250425/libstdc++-v3/include/std/optional gcc-14-20250502/libstdc++-v3/include/std/optional
*** gcc-14-20250425/libstdc++-v3/include/std/optional	Fri Apr 25 22:33:36 2025
--- gcc-14-20250502/libstdc++-v3/include/std/optional	Fri May  2 22:33:38 2025
*************** _GLIBCXX_BEGIN_NAMESPACE_VERSION
*** 1430,1436 ****
  #ifdef __cpp_lib_three_way_comparison
    template<typename _Tp, typename _Up>
      requires (!__is_optional_v<_Up>)
!       && three_way_comparable_with<_Up, _Tp>
      constexpr compare_three_way_result_t<_Tp, _Up>
      operator<=>(const optional<_Tp>& __x, const _Up& __v)
      { return bool(__x) ? *__x <=> __v : strong_ordering::less; }
--- 1430,1437 ----
  #ifdef __cpp_lib_three_way_comparison
    template<typename _Tp, typename _Up>
      requires (!__is_optional_v<_Up>)
!       && requires { typename compare_three_way_result_t<_Tp, _Up>; }
!       && three_way_comparable_with<_Tp, _Up>
      constexpr compare_three_way_result_t<_Tp, _Up>
      operator<=>(const optional<_Tp>& __x, const _Up& __v)
      { return bool(__x) ? *__x <=> __v : strong_ordering::less; }
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/20_util/function/cons/70692.cc gcc-14-20250502/libstdc++-v3/testsuite/20_util/function/cons/70692.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/20_util/function/cons/70692.cc	Fri Apr 25 22:33:37 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/20_util/function/cons/70692.cc	Fri May  2 22:33:38 2025
*************** int main()
*** 11,14 ****
    std::function<const int&()> ff(f);  // { dg-error "no matching function" }
    std::function<long&&()> f2(f);      // { dg-error "no matching function" }
  }
! // { dg-error "std::(__8::)?enable_if" "" { target *-*-* } 0 }
--- 11,14 ----
    std::function<const int&()> ff(f);  // { dg-error "no matching function" }
    std::function<long&&()> f2(f);      // { dg-error "no matching function" }
  }
! // { dg-error "std::enable_if" "" { target *-*-* } 0 }
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/23_containers/map/48101_neg.cc gcc-14-20250502/libstdc++-v3/testsuite/23_containers/map/48101_neg.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/23_containers/map/48101_neg.cc	Fri Apr 25 22:33:39 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/23_containers/map/48101_neg.cc	Fri May  2 22:33:40 2025
*************** test01()
*** 28,35 ****
    c2.find(2); // { dg-error "here" }
  }
  
! // { dg-error "_Compare = std::(__8::)?less<int.>" "" { target *-*-* } 0 }
! // { dg-error "_Compare = std::(__8::)?allocator<int>" "" { target *-*-* } 0 }
  // { dg-error "comparison object must be invocable" "" { target *-*-* } 0 }
  // { dg-prune-output "no match for call" }
  // { dg-prune-output "invalid conversion" }
--- 28,35 ----
    c2.find(2); // { dg-error "here" }
  }
  
! // { dg-error "_Compare = std::less<int.>" "" { target *-*-* } 0 }
! // { dg-error "_Compare = std::allocator<int>" "" { target *-*-* } 0 }
  // { dg-error "comparison object must be invocable" "" { target *-*-* } 0 }
  // { dg-prune-output "no match for call" }
  // { dg-prune-output "invalid conversion" }
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc gcc-14-20250502/libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc	Fri Apr 25 22:33:39 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/23_containers/multimap/48101_neg.cc	Fri May  2 22:33:40 2025
*************** test01()
*** 28,35 ****
    c2.find(2); // { dg-error "here" }
  }
  
! // { dg-error "_Compare = std::(__8::)?less<int.>" "" { target *-*-* } 0 }
! // { dg-error "_Compare = std::(__8::)?allocator<int>" "" { target *-*-* } 0 }
  // { dg-error "comparison object must be invocable" "" { target *-*-* } 0 }
  // { dg-prune-output "no match for call" }
  // { dg-prune-output "invalid conversion" }
--- 28,35 ----
    c2.find(2); // { dg-error "here" }
  }
  
! // { dg-error "_Compare = std::less<int.>" "" { target *-*-* } 0 }
! // { dg-error "_Compare = std::allocator<int>" "" { target *-*-* } 0 }
  // { dg-error "comparison object must be invocable" "" { target *-*-* } 0 }
  // { dg-prune-output "no match for call" }
  // { dg-prune-output "invalid conversion" }
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/lib/libstdc++.exp gcc-14-20250502/libstdc++-v3/testsuite/lib/libstdc++.exp
*** gcc-14-20250425/libstdc++-v3/testsuite/lib/libstdc++.exp	Fri Apr 25 22:33:50 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/lib/libstdc++.exp	Fri May  2 22:33:42 2025
*************** proc v3_target_compile { source dest typ
*** 650,655 ****
--- 650,660 ----
      }
  
      set comp_output [target_compile $source $dest $type $options]
+ 
+     # Strip versioned namespace from the compiler output,
+     # so that dg-error and dg-warning patterns can ignore it:
+     regsub -all "std::__8::" $comp_output "std::" comp_output
+ 
      if { $type == "executable" && $file_to_delete != "" } {
  	file delete $file_to_delete
  	if { [istarget *-*-darwin*] && [file exists $file_to_delete.dSYM] } {
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/cbegin.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/cbegin.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/cbegin.cc	Fri Apr 25 22:33:56 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/cbegin.cc	Fri May  2 22:33:43 2025
*************** test04()
*** 116,125 ****
--- 116,142 ----
    VERIFY(std::ranges::cbegin(std::move(c)) == std::ranges::begin(c));
  }
  
+ void
+ test05()
+ {
+   // LWG 4027 - possibly-const-range should prefer returning const R&
+   auto r = std::views::single(0)
+     | std::views::transform([](int) { return 0; });
+   using C1 = decltype(std::ranges::cbegin(r));
+   using C1 = decltype(std::cbegin(r));
+ 
+   [] (auto x) {
+     auto r = std::views::single(x) | std::views::lazy_split(0);
+     static_assert(!requires { (*std::ranges::cbegin(r)).front() = 42; });
+     static_assert(!requires { (*std::cbegin(r)).front() = 42; });
+   }(0);
+ }
+ 
  int
  main()
  {
    test01();
    test03();
    test04();
+   test05();
  }
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/cdata.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/cdata.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/cdata.cc	Fri Apr 25 22:33:56 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/cdata.cc	Fri May  2 22:33:43 2025
*************** test01()
*** 34,53 ****
    {
      int i = 0;
      int j = 0;
      int* data() { return &j; }
      const R* data() const noexcept { return nullptr; }
    };
    static_assert( has_cdata<R&> );
    static_assert( has_cdata<const R&> );
    R r;
- #if ! __cpp_lib_ranges_as_const
    VERIFY( std::ranges::cdata(r) == (R*)nullptr );
    static_assert( noexcept(std::ranges::cdata(r)) );
- #else
-   // constant_range<const R> is not satisfied, so cdata(r) == data(r).
-   VERIFY( std::ranges::cdata(r) == &r.j );
-   static_assert( ! noexcept(std::ranges::cdata(r)) );
- #endif
    const R& c = r;
    VERIFY( std::ranges::cdata(c) == (R*)nullptr );
    static_assert( noexcept(std::ranges::cdata(c)) );
--- 34,54 ----
    {
      int i = 0;
      int j = 0;
+ 
+ #if __cpp_lib_ranges_as_const
+     // These overloads mean that range<R> and range<const R> are satisfied.
+     const int* begin() const { throw; }
+     const int* end() const { throw; }
+ #endif
+ 
      int* data() { return &j; }
      const R* data() const noexcept { return nullptr; }
    };
    static_assert( has_cdata<R&> );
    static_assert( has_cdata<const R&> );
    R r;
    VERIFY( std::ranges::cdata(r) == (R*)nullptr );
    static_assert( noexcept(std::ranges::cdata(r)) );
    const R& c = r;
    VERIFY( std::ranges::cdata(c) == (R*)nullptr );
    static_assert( noexcept(std::ranges::cdata(c)) );
*************** test01()
*** 58,68 ****
  
    struct R2
    {
      // These overloads mean that range<R2> and range<const R2> are satisfied.
!     int* begin();
!     int* end();
!     const int* begin() const;
!     const int* end() const;
  
      int i = 0;
      int j = 0;
--- 59,69 ----
  
    struct R2
    {
+ #if __cpp_lib_ranges_as_const
      // These overloads mean that range<R2> and range<const R2> are satisfied.
!     const int* begin() const { throw; }
!     const int* end() const { throw; }
! #endif
  
      int i = 0;
      int j = 0;
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/cend.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/cend.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/cend.cc	Fri Apr 25 22:33:56 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/cend.cc	Fri May  2 22:33:43 2025
*************** struct R
*** 52,66 ****
    friend const int* end(const R&& r) noexcept { return r.a + 3; }
  };
  
- #if __cpp_lib_ranges_as_const
- struct R2 : R
- {
-   // This overload means constant_range<const R2> will be satisfied:
-   friend const int* begin(const R2&) noexcept;
-   friend const int* end(const R2& r2) noexcept { return r2.a + 2; }
- };
- #endif
- 
  struct RV // view on an R
  {
    R& r;
--- 52,57 ----
*************** test03()
*** 79,104 ****
  {
    R r;
    const R& c = r;
- #if ! __cpp_lib_ranges_as_const
    VERIFY( std::ranges::cend(r) == std::ranges::end(c) );
- #else
-   // constant_range<const R> is not satisfied, so cend(r) == end(r) instead.
-   VERIFY( std::ranges::cend(r) == std::ranges::end(r) );
-   R2 r2;
-   const R& c2 = r2;
-   // But constant_range<const R2> is satisfied, so cend(r2) == end(c2).
-   VERIFY( std::ranges::cend(r2) == std::ranges::end(c2) );
-   VERIFY( std::ranges::cend(r2) == std::ranges::end((const R&)c2) );
- #endif
    VERIFY( std::ranges::cend(c) == std::ranges::end(c) );
  
    RV v{r};
- #if ! __cpp_lib_ranges_as_const
    VERIFY( std::ranges::cend(std::move(v)) == std::ranges::end(c) );
- #else
-   // constant_range<RV> is already satisfied, so cend(v) == end(r) instead.
-   VERIFY( std::ranges::cend(std::move(v)) == std::ranges::end(r) );
- #endif
  
    const RV cv{r};
    VERIFY( std::ranges::cend(std::move(cv)) == std::ranges::end(c) );
--- 70,80 ----
*************** test03()
*** 107,113 ****
  struct RR
  {
    short s = 0;
!   long l = 0;
    int a[4] = { 0, 1, 2, 3 };
  
    const void* begin() const; // return type not an iterator
--- 83,89 ----
  struct RR
  {
    short s = 0;
!   short l = 0;
    int a[4] = { 0, 1, 2, 3 };
  
    const void* begin() const; // return type not an iterator
*************** struct RR
*** 115,122 ****
    friend int* end(RR&) { throw 1; }
    short* end() noexcept { return &s; }
  
!   friend const long* begin(const RR&) noexcept;
!   const long* end() const { return &l; }
  
    friend int* begin(RR&&) noexcept;
    friend int* end(RR&& r) { return r.a + 1; }
--- 91,98 ----
    friend int* end(RR&) { throw 1; }
    short* end() noexcept { return &s; }
  
!   friend const short* begin(const RR&) noexcept;
!   const short* end() const { return &l; }
  
    friend int* begin(RR&&) noexcept;
    friend int* end(RR&& r) { return r.a + 1; }
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/crbegin.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/crbegin.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/crbegin.cc	Fri Apr 25 22:33:56 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/crbegin.cc	Fri May  2 22:33:43 2025
*************** struct R1
*** 28,33 ****
--- 28,38 ----
    int i = 0;
    int j = 0;
  
+ #if __cpp_lib_ranges_as_const
+   const int *begin() const;
+   const int *end() const;
+ #endif
+ 
    const int* rbegin() const { return &i; }
    friend const int* rbegin(const R1&& r) { return &r.j; }
  };
*************** struct R1V // view on an R1
*** 36,41 ****
--- 41,51 ----
  {
    R1& r;
  
+ #if __cpp_lib_ranges_as_const
+   const int *begin() const;
+   const int *end() const;
+ #endif
+ 
    friend const long* rbegin(R1V&) { return nullptr; }
    friend const int* rbegin(const R1V& rv) noexcept { return rv.r.rbegin(); }
  };
*************** struct R1V // view on an R1
*** 43,68 ****
  // Allow ranges::end to work with R1V&&
  template<> constexpr bool std::ranges::enable_borrowed_range<R1V> = true;
  
- #if __cpp_lib_ranges_as_const
- struct R1VC // view on an R1
- {
-   R1& r;
- 
-   friend const long* rbegin(R1VC&); // this is not defined
-   friend const int* rbegin(const R1VC& rv) noexcept { return rv.r.rbegin(); }
- 
-   // The following ensure that the following are satisfied:
-   // constant_range<const R1VC> && ! constant_range<R1VC>
-   friend int* begin(R1VC&);
-   friend int* end(R1VC&);
-   friend const int* begin(const R1VC&);
-   friend const int* end(const R1VC&);
- };
- 
- // Allow ranges::end to work with R1VC&&
- template<> constexpr bool std::ranges::enable_borrowed_range<R1VC> = true;
- #endif
- 
  void
  test01()
  {
--- 53,58 ----
*************** test01()
*** 72,92 ****
    VERIFY( std::ranges::crbegin(c) == std::ranges::rbegin(c) );
  
    R1V v{r};
- #if ! __cpp_lib_ranges_as_const
    VERIFY( std::ranges::crbegin(v) == std::ranges::rbegin(c) );
    VERIFY( std::ranges::crbegin(std::move(v)) == std::ranges::rbegin(c) );
- #else
-   // constant_range<const R1V> is not satisfied, so crbegin(v) == rbegin(v).
-   VERIFY( std::ranges::crbegin(v) == (long*)nullptr );
-   VERIFY( std::ranges::crbegin(std::move(v)) == (long*)nullptr );
-   R1VC v2{r};
-   // But constant_range<const R1VC> is satisfied:
-   VERIFY( std::ranges::crbegin(v2) == std::ranges::rbegin(c) );
-   VERIFY( std::ranges::crbegin(std::move(v2)) == std::ranges::rbegin(c) );
-   const R1VC cv2{r};
-   VERIFY( std::ranges::crbegin(cv2) == std::ranges::rbegin(c) );
-   VERIFY( std::ranges::crbegin(std::move(cv2)) == std::ranges::rbegin(c) );
- #endif
  
    const R1V cv{r};
    VERIFY( std::ranges::crbegin(cv) == std::ranges::rbegin(c) );
--- 62,69 ----
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/crend.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/crend.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/access/crend.cc	Fri Apr 25 22:33:56 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/access/crend.cc	Fri May  2 22:33:43 2025
*************** struct R1
*** 28,33 ****
--- 28,38 ----
    int i = 0;
    int j = 0;
  
+ #if __cpp_lib_ranges_as_const
+   const int *begin() const;
+   const int *end() const;
+ #endif
+ 
    constexpr const int* rbegin() const { return &i; }
    constexpr const int* rend() const { return &i + 1; }
    friend constexpr const int* rbegin(const R1&& r) { return &r.j; }
*************** struct R3
*** 78,83 ****
--- 83,93 ----
  {
    int i = 0;
  
+ #if __cpp_lib_ranges_as_const
+   const int *begin() const;
+   const int *end() const;
+ #endif
+ 
    const int* rbegin() const noexcept { return &i + 1; }
    const long* rend() const noexcept { return nullptr; } // not a sentinel for rbegin()
  
*************** struct R4
*** 89,97 ****
--- 99,109 ----
  {
    int i = 0;
  
+ #if __cpp_lib_ranges_as_const
    // These members mean that range<R4> and range<const R4> are satisfied.
    const short* begin() const { return 0; }
    const short* end() const { return 0; }
+ #endif
  
    const int* rbegin() const noexcept { return &i + 1; }
    const long* rend() const noexcept { return nullptr; } // not a sentinel for rbegin()
*************** test03()
*** 105,120 ****
  {
    R3 r;
    const R3& c = r;
- #if ! __cpp_lib_ranges_as_const
    VERIFY( std::ranges::crend(r) == std::ranges::rend(c) );
    static_assert( !noexcept(std::ranges::crend(r)) );
- #else
-   // constant_range<const R3> is not satisfied, so crend(r) is equivalent
-   // to const_sentinel{rend(r)}, which is ill-formed because range<R3>
-   // is not satisfied.
-   static_assert( not std::ranges::range<R3> );
-   static_assert( not std::ranges::range<const R3> );
- #endif
    VERIFY( std::ranges::crend(c) == std::ranges::rend(c) );
    static_assert( !noexcept(std::ranges::crend(c)) );
  
--- 117,124 ----
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc	Fri Apr 25 22:34:01 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/adaptors/join.cc	Fri May  2 22:33:43 2025
*************** test06()
*** 113,127 ****
  
    // Verify that _Iterator<false> is implicitly convertible to _Iterator<true>.
    static_assert(!std::same_as<decltype(ranges::begin(v)),
! 			      decltype(std::as_const(v).begin())>);
!   auto a = std::as_const(v).begin();
    a = ranges::begin(v);
  
    // Verify that _Sentinel<false> is implicitly convertible to _Sentinel<true>.
    static_assert(!ranges::common_range<decltype(v)>);
    static_assert(!std::same_as<decltype(ranges::end(v)),
! 			      decltype(std::as_const(v).end())>);
!   auto b = std::as_const(v).end();
    b = ranges::end(v);
  }
  
--- 113,127 ----
  
    // Verify that _Iterator<false> is implicitly convertible to _Iterator<true>.
    static_assert(!std::same_as<decltype(ranges::begin(v)),
! 			      decltype(ranges::cbegin(v))>);
!   auto a = std::cbegin(v);
    a = ranges::begin(v);
  
    // Verify that _Sentinel<false> is implicitly convertible to _Sentinel<true>.
    static_assert(!ranges::common_range<decltype(v)>);
    static_assert(!std::same_as<decltype(ranges::end(v)),
! 			      decltype(ranges::cend(v))>);
!   auto b = ranges::cend(v);
    b = ranges::end(v);
  }
  
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc	Fri Apr 25 22:34:01 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc	Fri May  2 22:33:43 2025
*************** test03()
*** 63,72 ****
  
    // Verify that _Sentinel<false> is implicitly convertible to _Sentinel<true>.
    static_assert(!ranges::common_range<decltype(v)>);
- #if ! __cpp_lib_ranges_as_const
    static_assert(!std::same_as<decltype(ranges::end(v)),
  			      decltype(ranges::cend(v))>);
- #endif
    auto b = ranges::cend(v);
    b = ranges::end(v);
  }
--- 63,70 ----
diff -Nrcpad gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc
*** gcc-14-20250425/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc	Fri Apr 25 22:34:01 2025
--- gcc-14-20250502/libstdc++-v3/testsuite/std/ranges/adaptors/transform.cc	Fri May  2 22:33:43 2025
*************** test05()
*** 107,126 ****
    auto r = ranges::subrange{i, std::default_sentinel};
    auto v = r | views::transform(std::negate{});
  
- #if ! __cpp_lib_ranges_as_const
    // Verify that _Iterator<false> is implicitly convertible to _Iterator<true>.
    static_assert(!std::same_as<decltype(ranges::begin(v)),
  			      decltype(ranges::cbegin(v))>);
- #endif
    auto a = ranges::cbegin(v);
    a = ranges::begin(v);
  
- #if ! __cpp_lib_ranges_as_const
    // Verify that _Sentinel<false> is implicitly convertible to _Sentinel<true>.
    static_assert(!ranges::common_range<decltype(v)>);
    static_assert(!std::same_as<decltype(ranges::end(v)),
  			      decltype(ranges::cend(v))>);
- #endif
    auto b = ranges::cend(v);
    b = ranges::end(v);
  }
--- 107,122 ----
