diff -Nrcpad gcc-15-20250517/LAST_UPDATED gcc-15-20250524/LAST_UPDATED
*** gcc-15-20250517/LAST_UPDATED	Sat May 17 22:32:42 2025
--- gcc-15-20250524/LAST_UPDATED	Sat May 24 22:32:33 2025
***************
*** 1 ****
! Obtained from git: releases/gcc-15 revision dc21caefbc2d63be1315ca062e977affa74eacc2
--- 1 ----
! Obtained from git: releases/gcc-15 revision 18f937f013b79f4280c66b05fa793a0780955081
diff -Nrcpad gcc-15-20250517/MD5SUMS gcc-15-20250524/MD5SUMS
*** gcc-15-20250517/MD5SUMS	Sat May 17 22:32:49 2025
--- gcc-15-20250524/MD5SUMS	Sat May 24 22:32:37 2025
***************
*** 1,5 ****
  # This file contains the MD5 checksums of the files in the
! # gcc-15-20250517.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-15-20250524.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
*************** d32239bcb673463ab874e80d47fae504  COPYIN
*** 25,31 ****
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! abe6629c861b93f9bfb5f0b2408dd685  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
--- 25,31 ----
  fd4ecdf5d672efe2b0e409aca9cf9446  ChangeLog.jit
  09538b708302f1735f6fa05b622ecf5e  ChangeLog.tree-ssa
  24ab760126489e69436a43185dc3d202  INSTALL/README
! e86f63fcdbc4db519fc1e22f6bcb7e2b  LAST_UPDATED
  9d2cf5b58292c2e8b0804d3eafc2d6f3  MAINTAINERS
  b714b83dd28679b75c5fd3e619d35956  Makefile.def
  9d0808afc70085c5ca8d45062fc59689  Makefile.in
*************** a22e70b3f29292d0e628450f4bb11e62  fixinc
*** 514,520 ****
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! 373a758f7a4c8a1abac36bdfd47dbd75  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
--- 514,520 ----
  a916467b91076e631dd8edb7424769c7  gcc/COPYING.LIB
  d32239bcb673463ab874e80d47fae504  gcc/COPYING3
  6a6a8e020838b23406c81b19c1d46df6  gcc/COPYING3.LIB
! dba6cc374f48c240ffab015b6af903e7  gcc/ChangeLog
  51281e73aa07fb62394bd72f3c9299ba  gcc/ChangeLog-1997
  f77af8c9ac412064886b00c5506123b5  gcc/ChangeLog-1998
  00a2e4ead1b289bf69bca0196fed6f9f  gcc/ChangeLog-1999
*************** fb3fadb88e1d2b3b640cfaaa5ff11780  gcc/Ch
*** 551,557 ****
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! d4ad751cbb1bbbf5613a983bfe1bd83d  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
--- 551,557 ----
  3eb07e0b2e542409bf73d359f7f65609  gcc/ChangeLog.ptr
  e13638e26743ba41e6011b76cc00d9a9  gcc/ChangeLog.tree-ssa
  739ab47f6425bcea1d05e4fc0542de54  gcc/ChangeLog.tuples
! 8b2ef79f123216449b51e8adc4ba68da  gcc/DATESTAMP
  d41d8cd98f00b204e9800998ecf8427e  gcc/DEV-PHASE
  eb92e1ff5e982ca07e173e0eb286d243  gcc/FSFChangeLog
  30e1e33411566388b3164558482dc5e6  gcc/FSFChangeLog.10
*************** bbad65845fcf9cdbc5137d96f92eacab  gcc/cf
*** 3292,3301 ****
  7c2358ab451ca13a153f64b7682d772a  gcc/cfgloopmanip.h
  c97195f1544d9bfc539271f27e7a26b4  gcc/cfgrtl.cc
  28d9dedd6044321fe1df02d3575f81e9  gcc/cfgrtl.h
! 5fbe8c411c043738d25dc09283d762fa  gcc/cgraph.cc
! 4d4d851814118549a9483bb3ad7ebdd7  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
! 3e03efd049032e0a084e2f8eca6c270c  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
  ffabb89b93cc37785f3aa81ac6580151  gcc/cobol/ChangeLog
--- 3292,3301 ----
  7c2358ab451ca13a153f64b7682d772a  gcc/cfgloopmanip.h
  c97195f1544d9bfc539271f27e7a26b4  gcc/cfgrtl.cc
  28d9dedd6044321fe1df02d3575f81e9  gcc/cfgrtl.h
! 93abcf1a38c47abbf2fa8a78a968389e  gcc/cgraph.cc
! f875e225a02290cf7ed2e05c968f6c5d  gcc/cgraph.h
  5fa2e94f261a8a6fc0d80b1c4b227d25  gcc/cgraphbuild.cc
! 0562ea4e5f8c7c62289a233a9c5b4268  gcc/cgraphclones.cc
  3be8ee84d005d8a1f5a65ed6a7fce76a  gcc/cgraphunit.cc
  70fa61377ff65ad3f25778a40159f510  gcc/cif-code.def
  ffabb89b93cc37785f3aa81ac6580151  gcc/cobol/ChangeLog
*************** a9c3cddee4e237141062720b72fe38cd  gcc/co
*** 5496,5502 ****
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  2a5216aefb9cdf4b270ef8e599cc794f  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 216e3c48a9bbeacbbd6981cb1b870d43  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
--- 5496,5502 ----
  5d31df44fc0a5b17beb74ce0ff38e214  gcc/coroutine-passes.cc
  2a5216aefb9cdf4b270ef8e599cc794f  gcc/coverage.cc
  722fb5fda78e55c5af5da72cad78751f  gcc/coverage.h
! 83ece82f68910190b9f8f4ea84a67e57  gcc/cp/ChangeLog
  70c059f2b75a2fc1bb95a526b21b8cd7  gcc/cp/ChangeLog-1993
  7cbd106e10a0ba7c052bee3fe20671c2  gcc/cp/ChangeLog-1994
  3b1e3ed23ad4363f75e6fd2fbb583dee  gcc/cp/ChangeLog-1995
*************** e5ccdda9d62d96ac397910d0fa391b0a  gcc/cp
*** 5558,5564 ****
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
  f581854200ed2ce356fd6d80042ba80a  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! 8141a5be3a7430cac6530a46739b2728  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  fa4cdfbca134d42fa0239a8533452558  gcc/cp/error.cc
  86f47b28d673601022d0205cdd718f9d  gcc/cp/except.cc
--- 5558,5564 ----
  c1cc5dac36866c611933c037cc1d6f2f  gcc/cp/cxxapi-data.csv
  f581854200ed2ce356fd6d80042ba80a  gcc/cp/decl.cc
  7f116fdc50b24dcb13cdcf096636aef9  gcc/cp/decl.h
! 2b987c48342f497558e2b24d95744497  gcc/cp/decl2.cc
  691a10b3246d19925433648ba9a4ea9a  gcc/cp/dump.cc
  fa4cdfbca134d42fa0239a8533452558  gcc/cp/error.cc
  86f47b28d673601022d0205cdd718f9d  gcc/cp/except.cc
*************** aaf76a9b03fd0532d2904aef004fd66a  gcc/cp
*** 5576,5582 ****
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  2a25642ff43728ad2b4093c3713d76cc  gcc/cp/method.cc
! bf4debb314212751500ac18a85da7263  gcc/cp/module.cc
  4191315bfa6c793b37107497c36d367f  gcc/cp/name-lookup.cc
  9644410086c3beb90033e77613e9d1a7  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
--- 5576,5582 ----
  6c77b1fab5f6d146677090285a202a50  gcc/cp/mapper-client.h
  44e22b51797f89c9da996523a6d97f1c  gcc/cp/mapper-resolver.cc
  2a25642ff43728ad2b4093c3713d76cc  gcc/cp/method.cc
! 59dbc383eb615bbbed245dd0bdd20120  gcc/cp/module.cc
  4191315bfa6c793b37107497c36d367f  gcc/cp/name-lookup.cc
  9644410086c3beb90033e77613e9d1a7  gcc/cp/name-lookup.h
  e7fe06956aada61bcaae5168ad47a9c1  gcc/cp/operators.def
*************** e7fe06956aada61bcaae5168ad47a9c1  gcc/cp
*** 5585,5591 ****
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
  27a10d7b6902641140f84afb4830228b  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
! e8d83883ad4ed2c5539f51d578552642  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
  5f55e38a4d7eb82749ebcc23ad8f79d9  gcc/cp/semantics.cc
  b58bf61fbfed45af179b7104e72a9486  gcc/cp/std-name-hint.gperf
--- 5585,5591 ----
  e8a3a03873c6294ff25a783941b8d8af  gcc/cp/parser.h
  27a10d7b6902641140f84afb4830228b  gcc/cp/pt.cc
  a121c0a45933b618832614be1fbfd5c7  gcc/cp/ptree.cc
! 318c5e4a338363a8183b4a01222aa800  gcc/cp/rtti.cc
  a4930c49ed8f9e6b019399bd1faf86d0  gcc/cp/search.cc
  5f55e38a4d7eb82749ebcc23ad8f79d9  gcc/cp/semantics.cc
  b58bf61fbfed45af179b7104e72a9486  gcc/cp/std-name-hint.gperf
*************** a798cdca802a57ffa3473ab610b37c86  gcc/fo
*** 6056,6062 ****
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 242bd76f4ec74f4c1f639a1187fb3702  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
--- 6056,6062 ----
  4b1bef753dda2d19671f35332c69a0f7  gcc/fold-const.cc
  f23dec03425a07611492fa2c061cd7d2  gcc/fold-const.h
  cd4e6baf5d162fbd41160606055f8297  gcc/fold-mem-offsets.cc
! 54cfc80fbae1f2097b3b9a403b9d975e  gcc/fortran/ChangeLog
  083c53fadafdcf3be46713838a51e36c  gcc/fortran/ChangeLog-2002
  2a4ca18d211fb2603139354fd16398ed  gcc/fortran/ChangeLog-2003
  e7462609ebd0dd7c874e0fc00e2833aa  gcc/fortran/ChangeLog-2004
*************** b7e224f665bb5044ce35ed09435bd4fb  gcc/fo
*** 6098,6104 ****
  8f33d3cd143f8abd7293e089afa94452  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
  deb1774fa43b021f7fa8fde0fe6642d4  gcc/fortran/decl.cc
! 917fd2716f1eef2f47d4f032e14958ad  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  9982bdf75ac5c9630f66edd2aea1fe8b  gcc/fortran/dump-parse-tree.cc
  860343539ea7488e7bb44b94ea2b0f77  gcc/fortran/error.cc
--- 6098,6104 ----
  8f33d3cd143f8abd7293e089afa94452  gcc/fortran/data.cc
  d85e2f2fc3ee4721563bd47719063fb6  gcc/fortran/data.h
  deb1774fa43b021f7fa8fde0fe6642d4  gcc/fortran/decl.cc
! c33e2c4c7527bec8a125dd093dc59f2a  gcc/fortran/dependency.cc
  70111b1c7592e650c281b513c3cf2f47  gcc/fortran/dependency.h
  9982bdf75ac5c9630f66edd2aea1fe8b  gcc/fortran/dump-parse-tree.cc
  860343539ea7488e7bb44b94ea2b0f77  gcc/fortran/error.cc
*************** e350765243fa7b881ed82507561870ff  gcc/fo
*** 6135,6141 ****
  066b089d8a8df7ff652dcc802d982276  gcc/fortran/parse.cc
  09678ef13dc709d251be943d808544b8  gcc/fortran/parse.h
  593d202178567cbd7b52997dbd200869  gcc/fortran/primary.cc
! f4e3b81b876f7b451bd3d6cf42fa7b2a  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  c78c72f9e780bf1c0eea63295c5ba590  gcc/fortran/simplify.cc
--- 6135,6141 ----
  066b089d8a8df7ff652dcc802d982276  gcc/fortran/parse.cc
  09678ef13dc709d251be943d808544b8  gcc/fortran/parse.h
  593d202178567cbd7b52997dbd200869  gcc/fortran/primary.cc
! 888b0821047e71992cb509cbba933f55  gcc/fortran/resolve.cc
  8dc2391850ee95634781b6e296a096f6  gcc/fortran/scanner.cc
  3c39e0eef946c7f557ac375f23b9f3db  gcc/fortran/scanner.h
  c78c72f9e780bf1c0eea63295c5ba590  gcc/fortran/simplify.cc
*************** ba1a270a0735e8dd213da50ccb70ea32  gcc/fo
*** 6152,6158 ****
  85342544e201b38b342ec76a59856833  gcc/fortran/trans-expr.cc
  4409efd13e205fa6886f73e55cc425bb  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
! 0ea370a601d81713b8f4041c3d21cedf  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
  3e46866176ab0bac5fb67ed27515535d  gcc/fortran/trans-stmt.h
  88e47983056bf84e8b7dd5981ac93d41  gcc/fortran/trans-types.cc
--- 6152,6158 ----
  85342544e201b38b342ec76a59856833  gcc/fortran/trans-expr.cc
  4409efd13e205fa6886f73e55cc425bb  gcc/fortran/trans-intrinsic.cc
  9cf7c294c06fdaea67dcd2b9ff2cf5ad  gcc/fortran/trans-io.cc
! 710d1b981b11b3456d5e23839efa4675  gcc/fortran/trans-openmp.cc
  03aafb32bf3170c38549a2536ebb7e4c  gcc/fortran/trans-stmt.cc
  3e46866176ab0bac5fb67ed27515535d  gcc/fortran/trans-stmt.h
  88e47983056bf84e8b7dd5981ac93d41  gcc/fortran/trans-types.cc
*************** b0418c0b5b0600719b633f4afcd328ea  gcc/in
*** 6455,6461 ****
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! 55b72a0d02fcbb482f311037eb67d505  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
  2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
--- 6455,6461 ----
  bcb802c64e78f80e8e46c799c7e449ad  gcc/intl.cc
  deb111e00b2b07aa631595045bce5003  gcc/intl.h
  47a65e558aff89879902e88b055c7b12  gcc/ipa-comdats.cc
! 0e159edeb47834067d833b5371c6471c  gcc/ipa-cp.cc
  b65413c6163d502dbe95a08ac40cb575  gcc/ipa-cp.h
  4b65c0ccf8c98e3a0e1526acb4ebd3a4  gcc/ipa-devirt.cc
  2956ae29acd688fd2229744edabdc027  gcc/ipa-fnsummary.cc
*************** ee6c4ff9a86c5d0a68fa41c8da2b5c6f  gcc/ip
*** 6489,6495 ****
  0562ce724bce5cf2fea47f2f0c2e0007  gcc/ipa-reference.cc
  d4930f12a999a28238b013539b631f2f  gcc/ipa-reference.h
  db3094a0c46c1db21262added5d20318  gcc/ipa-split.cc
! 9bd3fd72a1f4a6c2b89af16b25800070  gcc/ipa-sra.cc
  59810ca6d9f512fe2332a63f844610db  gcc/ipa-strub.cc
  7441ae66ef417a1eed323b8c98c8e589  gcc/ipa-strub.h
  15fb2e7205c9068dc163478055d814aa  gcc/ipa-utils.cc
--- 6489,6495 ----
  0562ce724bce5cf2fea47f2f0c2e0007  gcc/ipa-reference.cc
  d4930f12a999a28238b013539b631f2f  gcc/ipa-reference.h
  db3094a0c46c1db21262added5d20318  gcc/ipa-split.cc
! 259429efa536a126922a043252fe06dd  gcc/ipa-sra.cc
  59810ca6d9f512fe2332a63f844610db  gcc/ipa-strub.cc
  7441ae66ef417a1eed323b8c98c8e589  gcc/ipa-strub.h
  15fb2e7205c9068dc163478055d814aa  gcc/ipa-utils.cc
*************** d52852ab0122f14cd4f7658db8b9c6df  gcc/sy
*** 8417,8423 ****
  5dcfbac7f32752af3034f02319af81d7  gcc/symtab-clones.h
  f849345d69b622ff9e7b96095bc2c34e  gcc/symtab-thunks.cc
  c9829745147a0b8ec026a3c5029fe2ff  gcc/symtab-thunks.h
! 8a1aae39e11b136fc986f57ee29cbe43  gcc/symtab.cc
  b3a965e425e6cf7888319667faf58da9  gcc/sync-builtins.def
  b1497a03867668af210c32280876fdd7  gcc/system.h
  480d916fe042a150001ad88e88521c08  gcc/target-def.h
--- 8417,8423 ----
  5dcfbac7f32752af3034f02319af81d7  gcc/symtab-clones.h
  f849345d69b622ff9e7b96095bc2c34e  gcc/symtab-thunks.cc
  c9829745147a0b8ec026a3c5029fe2ff  gcc/symtab-thunks.h
! aa2f440763246662044c0f16f1c5e858  gcc/symtab.cc
  b3a965e425e6cf7888319667faf58da9  gcc/sync-builtins.def
  b1497a03867668af210c32280876fdd7  gcc/system.h
  480d916fe042a150001ad88e88521c08  gcc/target-def.h
*************** b1497a03867668af210c32280876fdd7  gcc/sy
*** 8430,8436 ****
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! 5337720a8c2d8eb50a228ab65ff3b232  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
--- 8430,8436 ----
  b4bbfe8a8f62eed5c75429762e88d324  gcc/targhooks.cc
  ae57260b8b60d8b8dfaef3556c3ac5e5  gcc/targhooks.h
  f39fcaa8197187283ccfed40107b426d  gcc/testsuite/.gitattributes
! c24ce121d9962a55c9ea3ebbd1296fbc  gcc/testsuite/ChangeLog
  47e8e29b649ead73b8a1e4797da470ed  gcc/testsuite/ChangeLog-1993-2007
  35198a9e4fd31b935de8789faabf3351  gcc/testsuite/ChangeLog-2008
  0f19934540750356d1b91595cebfd9a8  gcc/testsuite/ChangeLog-2009
*************** c0af73d2336a3d5ad3f8c4248a0a62ed  gcc/te
*** 26849,26854 ****
--- 26849,26859 ----
  76389676e30dfd9baea1facee1c76338  gcc/testsuite/g++.dg/modules/partial-7_a.C
  0e06abecc27bb525f46512eb0f119c6e  gcc/testsuite/g++.dg/modules/partial-7_b.C
  79e8587ffd09f98267eba54d1d413d9a  gcc/testsuite/g++.dg/modules/partial-7_c.C
+ fe7ccce34dadc65594aff021ec664ae4  gcc/testsuite/g++.dg/modules/partial-8.h
+ 39467f571ec5bbc81c77b71f42f191ec  gcc/testsuite/g++.dg/modules/partial-8_a.C
+ a32d654fe66fc0230bf13e1ddae81478  gcc/testsuite/g++.dg/modules/partial-8_b.C
+ 0751a91a52072cd43bdb9e835344b77f  gcc/testsuite/g++.dg/modules/partial-8_c.C
+ a798035816209d2c2e4c846167cb76a7  gcc/testsuite/g++.dg/modules/partial-8_d.C
  91b28374e0dcc1b056ae3f976924d231  gcc/testsuite/g++.dg/modules/permissive-error-1.C
  48bb134ee9b868f8ffdcdf7732bb8fee  gcc/testsuite/g++.dg/modules/permissive-error-2.C
  fbd0b1dab6ed1e2ae131e2b1eb041193  gcc/testsuite/g++.dg/modules/pmf-1.h
*************** d71ad1e42d5edd10bf65dd64c81a4107  gcc/te
*** 26888,26896 ****
  57c308104a9d589b59baa6c5289ef1ae  gcc/testsuite/g++.dg/modules/pr106761_b.C
  ce1fbbd73d685e48bf6b219484083996  gcc/testsuite/g++.dg/modules/pr106820_a.H
  d7c5aacc3100ff130d9b06f0b4d7b551  gcc/testsuite/g++.dg/modules/pr106820_b.C
- 669553f14966298da7253a85823b66a3  gcc/testsuite/g++.dg/modules/pr113292_a.H
- cd5ddb2e4010c4465cfdaa5041aae30c  gcc/testsuite/g++.dg/modules/pr113292_b.C
- bc73258710da8d559003bba31dc77dac  gcc/testsuite/g++.dg/modules/pr113292_c.C
  d6c4487b2cdfe513fca59a9da2b03d10  gcc/testsuite/g++.dg/modules/pr113580_a.C
  2d13920b57e09bfba57cfacc02b5548b  gcc/testsuite/g++.dg/modules/pr113580_b.C
  b0187e4110d3e1feaedea59af55274e1  gcc/testsuite/g++.dg/modules/pr114005_a.C
--- 26893,26898 ----
*************** f730755494afbfe4a14ce1a907fa3f4f  gcc/te
*** 27159,27164 ****
--- 27161,27177 ----
  f16e5ebd7556493c43cc2faf1b348ae3  gcc/testsuite/g++.dg/modules/tinfo-1.C
  e286ace3527b1df8ed834d790b085543  gcc/testsuite/g++.dg/modules/tinfo-2_a.H
  f8f86df19db8e0f5288eeefb3a4debab  gcc/testsuite/g++.dg/modules/tinfo-2_b.C
+ 6cdce161b1c4d89e8a02e0a6bc6674c0  gcc/testsuite/g++.dg/modules/tinfo-3_a.H
+ 75faed4e1faca06628b51e77deed1c0b  gcc/testsuite/g++.dg/modules/tinfo-3_b.C
+ 669553f14966298da7253a85823b66a3  gcc/testsuite/g++.dg/modules/tls-1_a.H
+ 23c0b242d3480243b10f8309697d2f1b  gcc/testsuite/g++.dg/modules/tls-1_b.C
+ 168d59067b8a00836330b8f61d1f87bb  gcc/testsuite/g++.dg/modules/tls-1_c.C
+ ab623d35244df33926d444309262f796  gcc/testsuite/g++.dg/modules/tls-2_a.C
+ 77a05c0cf06ae7c0baa533082013f4ee  gcc/testsuite/g++.dg/modules/tls-2_b.C
+ d81d0d4fd4552a5200910224730bc335  gcc/testsuite/g++.dg/modules/tls-2_c.C
+ b083c8589d0eadb5801ea871caace113  gcc/testsuite/g++.dg/modules/tls-3.h
+ a0787c854f8ee29bf506219f8818c028  gcc/testsuite/g++.dg/modules/tls-3_a.H
+ 6d8bc33c270c159e50c9e3a855c51a94  gcc/testsuite/g++.dg/modules/tls-3_b.C
  a0161e5171615a705e466f33a67e1fea  gcc/testsuite/g++.dg/modules/tmpl-part-req-1.h
  bcb4b8223c944a14f1f870d40de0d7c5  gcc/testsuite/g++.dg/modules/tmpl-part-req-1_a.H
  7b43023b911064f99874c117b3aeac2b  gcc/testsuite/g++.dg/modules/tmpl-part-req-1_b.C
*************** dec77c25254c2de5dab4763d264bd88b  gcc/te
*** 27367,27372 ****
--- 27380,27387 ----
  a6538f381f12a0cd3a9e46e8089d2b15  gcc/testsuite/g++.dg/modules/using-30_a.C
  8ab0f479bce8892363e18d66cc9e7ba3  gcc/testsuite/g++.dg/modules/using-30_b.C
  d2536d9ce980b930e5bd5e99319d1f01  gcc/testsuite/g++.dg/modules/using-30_c.C
+ c42022b1e3d2c0964d349eec1c2253a7  gcc/testsuite/g++.dg/modules/using-31_a.C
+ b9c78848e5510504b2065d85656d575b  gcc/testsuite/g++.dg/modules/using-31_b.C
  bcc6cc64890192d647d85da41996ed1e  gcc/testsuite/g++.dg/modules/using-4_a.C
  f7d6d7386bd922589ea2e579fdd741e5  gcc/testsuite/g++.dg/modules/using-4_b.C
  0650e45892eb431529641f277d164339  gcc/testsuite/g++.dg/modules/using-5_a.C
*************** d2d98a344c776f2cee643c99d05eb20c  gcc/te
*** 47664,47669 ****
--- 47679,47686 ----
  d8f0256cde05093b9738e8287c58d5c3  gcc/testsuite/gcc.dg/ipa/pr119530.c
  8724c127eb269868ca6c918a72fc36b1  gcc/testsuite/gcc.dg/ipa/pr119803.c
  e39432b4ae7797e55b13f6d2fd29a4a6  gcc/testsuite/gcc.dg/ipa/pr119852.c
+ fc7c9c751d59b444d0ab30c4d9029491  gcc/testsuite/gcc.dg/ipa/pr120044-1.c
+ 538e5a7542c72b7ea4e4375cbebde001  gcc/testsuite/gcc.dg/ipa/pr120044-2.c
  c8295ff7fd7e271d17e7609620f5dfcb  gcc/testsuite/gcc.dg/ipa/pr42706.c
  e4887053c792f4f78b03804c148839ce  gcc/testsuite/gcc.dg/ipa/pr45644.c
  6e1b4f2c5d0c0d768778da8e3b7df828  gcc/testsuite/gcc.dg/ipa/pr48195.c
*************** b098058bf56a706b588ea3466b2d21f0  gcc/te
*** 55407,55412 ****
--- 55424,55430 ----
  d044056d4248cb78637686f3d28272bb  gcc/testsuite/gcc.dg/tree-ssa/pr114009.c
  9c0683e4499be406ba003816f4bd0db5  gcc/testsuite/gcc.dg/tree-ssa/pr114760-1.c
  5d8a744b9f15d7ea3d51feac8d667c77  gcc/testsuite/gcc.dg/tree-ssa/pr114760-2.c
+ 8710d339fbc689e052900f47a175994e  gcc/testsuite/gcc.dg/tree-ssa/pr114864.c
  b5622b094a71be460d5e73c0b93c8d2d  gcc/testsuite/gcc.dg/tree-ssa/pr115128.c
  481a38fdf27aeb98642e5c71321ff2a9  gcc/testsuite/gcc.dg/tree-ssa/pr115191.c
  1282d5c99f3bf13e85e0612b19684a01  gcc/testsuite/gcc.dg/tree-ssa/pr116024-1-fwrapv.c
*************** ca8eb6db97f18fddd890561a22a8cfbb  gcc/te
*** 99164,99170 ****
  b199d329559fc3f1b7e43203cdc460a8  gcc/testsuite/gfortran.dg/alloc_comp_assign_9.f90
  f3e77fcc01f3018d64a5ab3fb3368fd1  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_1.f90
  948fbff88548392e63b67e446403f2b3  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90
! 5570a1ba5f39729a7f7334e3e99b7262  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
  0fdd1a20cd51772142c8038e260c35d4  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_4.f90
  01702b87b457a827628539076733715b  gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
  c161df8775b21819cda81ffa8bd1b23f  gcc/testsuite/gfortran.dg/alloc_comp_basics_2.f90
--- 99182,99188 ----
  b199d329559fc3f1b7e43203cdc460a8  gcc/testsuite/gfortran.dg/alloc_comp_assign_9.f90
  f3e77fcc01f3018d64a5ab3fb3368fd1  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_1.f90
  948fbff88548392e63b67e446403f2b3  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_2.f90
! 2ff38561a2a894668fd17d66604b6953  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
  0fdd1a20cd51772142c8038e260c35d4  gcc/testsuite/gfortran.dg/alloc_comp_auto_array_4.f90
  01702b87b457a827628539076733715b  gcc/testsuite/gfortran.dg/alloc_comp_basics_1.f90
  c161df8775b21819cda81ffa8bd1b23f  gcc/testsuite/gfortran.dg/alloc_comp_basics_2.f90
*************** d863a7b7baeff902abcb73f750294f4b  gcc/te
*** 99176,99183 ****
  01ce8d13f86e2c85f83ca4efb7539502  gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90
  ae1746e87e5762c6b68826278ee28628  gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90
  dfee92253f572cefadfc9896e31aa911  gcc/testsuite/gfortran.dg/alloc_comp_class_2.f90
! 52d1ff97d60e0604c88137e39d6ee817  gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03
! 7bc89ebe60518480d4c3116f353445eb  gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03
  344f8d4e949089ff45b60afe587aec49  gcc/testsuite/gfortran.dg/alloc_comp_class_5.f03
  f87a2c3e25c614f7c7331df1491f1a03  gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90
  3c67ddbdd5451204f415b2315005e09e  gcc/testsuite/gfortran.dg/alloc_comp_constraint_2.f90
--- 99194,99201 ----
  01ce8d13f86e2c85f83ca4efb7539502  gcc/testsuite/gfortran.dg/alloc_comp_bounds_1.f90
  ae1746e87e5762c6b68826278ee28628  gcc/testsuite/gfortran.dg/alloc_comp_class_1.f90
  dfee92253f572cefadfc9896e31aa911  gcc/testsuite/gfortran.dg/alloc_comp_class_2.f90
! b387c0f145b4b44ea83d2265782d7be3  gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03
! a3de047b4026c722974a4a412344860d  gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03
  344f8d4e949089ff45b60afe587aec49  gcc/testsuite/gfortran.dg/alloc_comp_class_5.f03
  f87a2c3e25c614f7c7331df1491f1a03  gcc/testsuite/gfortran.dg/alloc_comp_constraint_1.f90
  3c67ddbdd5451204f415b2315005e09e  gcc/testsuite/gfortran.dg/alloc_comp_constraint_2.f90
*************** f4cacbb7fc7a73c4dc452abb4169a708  gcc/te
*** 99300,99306 ****
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
  d76b12105ec17a95100b1c0109eba21e  gcc/testsuite/gfortran.dg/allocate_with_source_12.f03
  7eb26a0ecf38b62a277060acb6ecd19a  gcc/testsuite/gfortran.dg/allocate_with_source_13.f03
! e983e31f5907aa7a18c2e0f43cdf3d9a  gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
  7750d599d9ba89b3f5a9b83001a920ef  gcc/testsuite/gfortran.dg/allocate_with_source_15.f03
  f68a5464b779f75e7ff8e50d9d8b199e  gcc/testsuite/gfortran.dg/allocate_with_source_16.f90
  bd4118fd768f3467307efc9602103e4c  gcc/testsuite/gfortran.dg/allocate_with_source_17.f03
--- 99318,99324 ----
  3e69f8fb58e06a24fc9934b0040bc33c  gcc/testsuite/gfortran.dg/allocate_with_source_11.f08
  d76b12105ec17a95100b1c0109eba21e  gcc/testsuite/gfortran.dg/allocate_with_source_12.f03
  7eb26a0ecf38b62a277060acb6ecd19a  gcc/testsuite/gfortran.dg/allocate_with_source_13.f03
! aa0e2acc5bfe4a7ddc3c5e96cc91be7e  gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
  7750d599d9ba89b3f5a9b83001a920ef  gcc/testsuite/gfortran.dg/allocate_with_source_15.f03
  f68a5464b779f75e7ff8e50d9d8b199e  gcc/testsuite/gfortran.dg/allocate_with_source_16.f90
  bd4118fd768f3467307efc9602103e4c  gcc/testsuite/gfortran.dg/allocate_with_source_17.f03
*************** f024936b2bb3be33b204bc283db65a94  gcc/te
*** 101456,101462 ****
  cb44893d94f03877d3d146a8c1da8bd8  gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
  1985d33efa2fb91552f8a4d90653edd7  gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
  b90644647498c9ab9c17c0d5ea8d1b82  gcc/testsuite/gfortran.dg/derived_constructor_comps_5.f90
! b2ca02520bfaffc03c538a5319e61893  gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
  a4520e3938bf347c0b9e1003348fd3b6  gcc/testsuite/gfortran.dg/derived_constructor_comps_7.f90
  d651e8567ae16400b1f0dd3cfa78dfbe  gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90
  cff987fa6f89201aa37245231d20c023  gcc/testsuite/gfortran.dg/derived_external_function_1.f90
--- 101474,101480 ----
  cb44893d94f03877d3d146a8c1da8bd8  gcc/testsuite/gfortran.dg/derived_constructor_comps_3.f90
  1985d33efa2fb91552f8a4d90653edd7  gcc/testsuite/gfortran.dg/derived_constructor_comps_4.f90
  b90644647498c9ab9c17c0d5ea8d1b82  gcc/testsuite/gfortran.dg/derived_constructor_comps_5.f90
! b82bb411ffe2afd1f983103a913048ea  gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
  a4520e3938bf347c0b9e1003348fd3b6  gcc/testsuite/gfortran.dg/derived_constructor_comps_7.f90
  d651e8567ae16400b1f0dd3cfa78dfbe  gcc/testsuite/gfortran.dg/derived_constructor_comps_8.f90
  cff987fa6f89201aa37245231d20c023  gcc/testsuite/gfortran.dg/derived_external_function_1.f90
*************** e9e8f279200f5692fad235f157925873  gcc/te
*** 101478,101483 ****
--- 101496,101502 ----
  cf5153f1f09bb80f5a964ce90c83a5dc  gcc/testsuite/gfortran.dg/derived_result_2.f90
  9568da62ebf5982dd0feeb2af336d4be  gcc/testsuite/gfortran.dg/derived_result_3.f90
  64fd0d06fe2fe940a3439cbab3a11ab2  gcc/testsuite/gfortran.dg/derived_result_4.f90
+ 489e76e1c9546ac43f028e88ed875909  gcc/testsuite/gfortran.dg/derived_result_5.f90
  b522fadd1464db48d2fe8165d2a66e70  gcc/testsuite/gfortran.dg/derived_sub.f90
  652fa12d630d17b29894c33b10c6b1b8  gcc/testsuite/gfortran.dg/dev_null.F90
  94ce3208dac145ea14fc3f821f662788  gcc/testsuite/gfortran.dg/dfloat_1.f90
*************** feae5c6b3876f53ada61b3aa3da68e31  gcc/te
*** 106761,106766 ****
--- 106780,106786 ----
  c00e10e2dedc2a4d4050941a3ae36ab2  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_3.f90
  d175a283aab741037bd1bdee76a76fa5  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_4.f90
  c5cef3aa9c3895b4e6b38e993481ff14  gcc/testsuite/gfortran.dg/transfer_array_intrinsic_5.f90
+ 446033cb0484da91a769a31c11989942  gcc/testsuite/gfortran.dg/transfer_array_subref.f90
  fdabd8c65dcb8fb1bfe06c29c937c219  gcc/testsuite/gfortran.dg/transfer_assumed_size_1.f90
  1c08633181f8b50ad8fd08ed1f4f207f  gcc/testsuite/gfortran.dg/transfer_char_kind4.f90
  0d5a3d18a1eeb0de1ca65d86e1cd68f8  gcc/testsuite/gfortran.dg/transfer_check_1.f90
*************** fd4dd1219acc650a4f7855faa0097964  gcc/tr
*** 117223,117229 ****
  f2fea638426d89fe9ea58081e5c46b3a  gcc/tree-profile.cc
  b2ea6fc51eae4a47de35dc40a3f0235c  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
! 221a6a553d9f6f7ecbfc9061956add14  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
  3e42023ef3fe5187ffffddbbb5740208  gcc/tree-ssa-address.cc
  c724c8becbea9eec0f806e3335942c32  gcc/tree-ssa-address.h
--- 117243,117249 ----
  f2fea638426d89fe9ea58081e5c46b3a  gcc/tree-profile.cc
  b2ea6fc51eae4a47de35dc40a3f0235c  gcc/tree-scalar-evolution.cc
  dddd950fe463803c41bc0c7cddf0fe44  gcc/tree-scalar-evolution.h
! f0f89902e3fb65efd0cee6aa170c1d13  gcc/tree-sra.cc
  c022e816e38c8f399e6a16163c56d6db  gcc/tree-sra.h
  3e42023ef3fe5187ffffddbbb5740208  gcc/tree-ssa-address.cc
  c724c8becbea9eec0f806e3335942c32  gcc/tree-ssa-address.h
*************** a3a7e9ca6057da9ca42e03e41e1c73f7  libgo/
*** 126318,126324 ****
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 92fc358a04518a418a9035b2552013a2  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  a732cc940d0d19d8091745ee2a77daee  libgomp/Makefile.am
  a1cd9225f663ff9380c1e51eee8c4b14  libgomp/Makefile.in
--- 126338,126344 ----
  dcdf1b680b15b372bdb64cc5107d51b6  libgo/testsuite/libgo-test-support.exp.in
  bf162aa572f7b96b25dbd2b027845d32  libgo/testsuite/libgo.testmain/testmain.exp
  cc9d2a0e34e31ba866a8caf9f46f48f3  libgomp/.gitattributes
! 65127adae065bc4117b48c01d1fa885a  libgomp/ChangeLog
  0d55aa862aee66efdc5f8d62c94ff8fb  libgomp/ChangeLog.graphite
  a732cc940d0d19d8091745ee2a77daee  libgomp/Makefile.am
  a1cd9225f663ff9380c1e51eee8c4b14  libgomp/Makefile.in
*************** c798aea0a594e97c71edb3bd8cb93579  libgom
*** 126457,126463 ****
  c3d837ee5481f078c8b7875c1c8306be  libgomp/iter_ull.c
  0214d07a09a5c6e422ca9541c3f6cba4  libgomp/libgomp-plugin.c
  1aa4ba0a2ee049ea5df6f42bca4e756e  libgomp/libgomp-plugin.h
! fc3083cc2e9ea14c5c0b8494006ee2e6  libgomp/libgomp.h
  794094e4a415fa9d14baf5f132c3d098  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
  407d25c7bf887d85293fd46c20e6021d  libgomp/libgomp.texi
--- 126477,126483 ----
  c3d837ee5481f078c8b7875c1c8306be  libgomp/iter_ull.c
  0214d07a09a5c6e422ca9541c3f6cba4  libgomp/libgomp-plugin.c
  1aa4ba0a2ee049ea5df6f42bca4e756e  libgomp/libgomp-plugin.h
! 69e5cac35d68ce6db01326f45f2fc005  libgomp/libgomp.h
  794094e4a415fa9d14baf5f132c3d098  libgomp/libgomp.map
  8b2aa50aecad82171348a6918309afd6  libgomp/libgomp.spec.in
  407d25c7bf887d85293fd46c20e6021d  libgomp/libgomp.texi
*************** cab85a447a3c3a83164ef65672d00b92  libgom
*** 126471,126477 ****
  266ba320079e69e58163b7adf1d2c441  libgomp/oacc-host.c
  5eb42012fde17dd5875ac784c0d5f688  libgomp/oacc-init.c
  1776f2de108801a59696220c3147b649  libgomp/oacc-int.h
! f651914b819b559f3365ac80f8e48c24  libgomp/oacc-mem.c
  ec5cbb804396f78976ddc8aa63a99e23  libgomp/oacc-parallel.c
  b6edffd0cc3b521c5885b285ddc3deaf  libgomp/oacc-plugin.c
  cabec5d2660028884f23c85bd403f01e  libgomp/oacc-plugin.h
--- 126491,126497 ----
  266ba320079e69e58163b7adf1d2c441  libgomp/oacc-host.c
  5eb42012fde17dd5875ac784c0d5f688  libgomp/oacc-init.c
  1776f2de108801a59696220c3147b649  libgomp/oacc-int.h
! 400376422733dbef89bcfba6e2080481  libgomp/oacc-mem.c
  ec5cbb804396f78976ddc8aa63a99e23  libgomp/oacc-parallel.c
  b6edffd0cc3b521c5885b285ddc3deaf  libgomp/oacc-plugin.c
  cabec5d2660028884f23c85bd403f01e  libgomp/oacc-plugin.h
*************** f1eee47026bb1c516cd1b3a9b9c1c5fa  libgom
*** 126499,126505 ****
  6197f832f373fba082a73a413e58be94  libgomp/splay-tree.c
  6562eda8ef1a1fd0a2a0a9e5621f684b  libgomp/splay-tree.h
  a8a23ca7c25ca51062b636b0c099096a  libgomp/target-indirect.c
! 5fce22dcfc1675b4810f1fca1901933f  libgomp/target.c
  8f03749b5187ce4fb4dce3f7d5b2d9f7  libgomp/task.c
  865cdfdff84a15247efff279e8aca77f  libgomp/taskloop.c
  f540431686cf02c11ae33b1cd66e01ca  libgomp/team.c
--- 126519,126525 ----
  6197f832f373fba082a73a413e58be94  libgomp/splay-tree.c
  6562eda8ef1a1fd0a2a0a9e5621f684b  libgomp/splay-tree.h
  a8a23ca7c25ca51062b636b0c099096a  libgomp/target-indirect.c
! e10777c5b3796fb8a332899a2d7eb38a  libgomp/target.c
  8f03749b5187ce4fb4dce3f7d5b2d9f7  libgomp/task.c
  865cdfdff84a15247efff279e8aca77f  libgomp/taskloop.c
  f540431686cf02c11ae33b1cd66e01ca  libgomp/team.c
*************** ae0dcb4c08025996b4bf4550cf72832e  libgom
*** 126509,126515 ****
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 8383d32d5f8e2ebb8ebf591150f08e5c  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
  75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
--- 126529,126535 ----
  83cc7a56dc29f0c258b4b9e13798b8ec  libgomp/testsuite/config/default.exp
  989674e1cf3f6739f5d9519d904650c7  libgomp/testsuite/flock
  6c859d1c520b245e51a29693632545d6  libgomp/testsuite/lib/libgomp-dg.exp
! 9dc99d143175d2ead27690e788549e94  libgomp/testsuite/lib/libgomp.exp
  751966e2063e2e638eb537562f7d4551  libgomp/testsuite/libgomp-site-extra.exp.in
  6d56ea402ff11fa0bd533c6d73e2ecde  libgomp/testsuite/libgomp-test-support.exp.in
  75cc672a1bf25974c5f4c5e3bc1a74b1  libgomp/testsuite/libgomp.c++/affinity-1.C
*************** db84355be6497be803699536cec8df8e  libgom
*** 126962,126967 ****
--- 126982,126988 ----
  1c73b49722635b90556ce6935d2ff0dd  libgomp/testsuite/libgomp.c-c++-common/imperfect6.c
  b292d9e57e7d3e0182bd4d6e553e7747  libgomp/testsuite/libgomp.c-c++-common/ind-base-4.c
  852cd122fb08c5bc98afcacb1f89d53f  libgomp/testsuite/libgomp.c-c++-common/interop-1.c
+ 269bc7768d09b8c1206a82f65905ae67  libgomp/testsuite/libgomp.c-c++-common/interop-2.c
  af5c9b7672d901f08fc41aee85da89a5  libgomp/testsuite/libgomp.c-c++-common/interop-routines-1.c
  8beeff3961ba61952c5ee1257dc3593c  libgomp/testsuite/libgomp.c-c++-common/interop-routines-2.c
  2db7225fd29d77c0461e025f76bb7fce  libgomp/testsuite/libgomp.c-c++-common/lastprivate-conditional-1.c
*************** ae4ee25a98b96a2f6bbcd9bc817b5b90  libgom
*** 127363,127369 ****
--- 127384,127407 ----
  19b2705df361d5db0e54ab9b2dbb30d4  libgomp/testsuite/libgomp.c/examples-4/teams-6.c
  00d45ed4a463f0629d2d21a38fe0073a  libgomp/testsuite/libgomp.c/icv-1.c
  6619bda92e7a29f372b1a0bc19ef2c79  libgomp/testsuite/libgomp.c/icv-2.c
+ ab8fb6b2dba448c76952c99dc073b531  libgomp/testsuite/libgomp.c/interop-cublas-full.c
+ ee19f42594a2dbadbc455736a8e69944  libgomp/testsuite/libgomp.c/interop-cublas-libonly.c
+ c62e07c17fc715e8074d127b1c0571a5  libgomp/testsuite/libgomp.c/interop-cuda-full.c
+ 7206b8cf6705a23f6948b4c9b0c48a82  libgomp/testsuite/libgomp.c/interop-cuda-libonly.c
  ee1bca91c6e853556cd65170329412cb  libgomp/testsuite/libgomp.c/interop-fr-1.c
+ 070843f3ae770b12906ee280061629b8  libgomp/testsuite/libgomp.c/interop-hip-amd-full.c
+ 0ca95c8bb659450d929a3e0afc99536c  libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c
+ 9e5bec1c71f6fe561293ae3c8f778c72  libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c
+ 813823249e0addca7d4dc1fe119c127e  libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c
+ 9c26fe02cd8d0d7c0f5985037fc37ded  libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c
+ 25c99e27bb2ee18183687ba2fd6a9060  libgomp/testsuite/libgomp.c/interop-hip.h
+ 95e6215f7e92437a942ec58e5dd545bf  libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c
+ 4445da243b1fcd63d8ec2a6af1f99e15  libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c
+ 10bd9c0ce20313ae836a09504811f547  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c
+ 0f1e2ad9f4304e2b19abf50063219cdd  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c
+ ee6acb3089ae16656715ede5acd4a769  libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c
+ 73994b391db11a9fa8269d17021fc731  libgomp/testsuite/libgomp.c/interop-hipblas.h
+ b892336be3124a54b2f99643e2295959  libgomp/testsuite/libgomp.c/interop-hsa.c
  60295e2f73526594a93b118333ca7ff3  libgomp/testsuite/libgomp.c/lib-1.c
  af9d852282ae3da623a0727f1df789ab  libgomp/testsuite/libgomp.c/lib-2.c
  954e001a86eca6e39424518360cc7b36  libgomp/testsuite/libgomp.c/linear-1.c
*************** a9b2ad991bd60cd4cd6ef4a68071bee6  libgom
*** 127653,127658 ****
--- 127691,127699 ----
  4e29a1266d0dcad35365d246391e52c3  libgomp/testsuite/libgomp.c/target-critical-1.c
  d7cbe25f5829f4d664a461d6ef7327f5  libgomp/testsuite/libgomp.c/target-has-device-addr-3.c
  2c67f32f623ae7d4b5ad5c7688a6acb1  libgomp/testsuite/libgomp.c/target-link-1.c
+ 2615e18884995f596aab452699d4a70a  libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c
+ 6074fd0ddba8cd7a81233a0377d223c0  libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c
+ 24c08630e1dc6f184073f42ff7c1bb73  libgomp/testsuite/libgomp.c/target-map-zero-sized.c
  7d9530ec8677e1a90e6b3d38859fc1b2  libgomp/testsuite/libgomp.c/target-print-1.c
  ec5b58aca4cfce9a6dafce47f592cdc3  libgomp/testsuite/libgomp.c/target-simd-clone-1.c
  602b6f2d636477283d0ff3d6fc3402fc  libgomp/testsuite/libgomp.c/target-simd-clone-2.c
*************** cbc8d1928586e24499210f2cd9438551  libgom
*** 127704,127709 ****
--- 127745,127751 ----
  20b043532a006fde073387f9a23e4054  libgomp/testsuite/libgomp.fortran/alloc-comp-1.f90
  21463b128d951cea6b4ea41176379b5c  libgomp/testsuite/libgomp.fortran/alloc-comp-2.f90
  c9531d367dce1d94d1c60a4798d79661  libgomp/testsuite/libgomp.fortran/alloc-comp-3.f90
+ fa45380ee93a1192a6e6ef3538c265be  libgomp/testsuite/libgomp.fortran/alloc-comp-4.f90
  1067959d41c1d727cb8b2b0fb01911a7  libgomp/testsuite/libgomp.fortran/alloc-pinned-1.f90
  9ddc595eb654a0b9f09bb8a163862bd3  libgomp/testsuite/libgomp.fortran/allocatable-comp.f90
  a52dbb26d615e1710d36c7f03cfed8b2  libgomp/testsuite/libgomp.fortran/allocatable1.f90
*************** b6f0fb56203a24951779ba06548a5fdf  libgom
*** 127727,127732 ****
--- 127769,127775 ----
  0d85a7a7d82fc3a1cb843bfd2d569a50  libgomp/testsuite/libgomp.fortran/allocate-6.f90
  0c4e938e58564254af87788f3071c7da  libgomp/testsuite/libgomp.fortran/allocate-7.f90
  81149f56dc2424a239c1018c9772cfeb  libgomp/testsuite/libgomp.fortran/allocate-8.f90
+ 2d1e593d2cc2b95815470db5eeb2ca42  libgomp/testsuite/libgomp.fortran/allocate-8a.f90
  5e4bfaae7990e17182be61796245e45b  libgomp/testsuite/libgomp.fortran/allocate-static.f90
  e8e247710b175502d920dd45bc21dcc1  libgomp/testsuite/libgomp.fortran/allocators-1.f90
  417aa104f21cd017122168ef884904f3  libgomp/testsuite/libgomp.fortran/allocators-2.f90
*************** dacc8946cc2bbcc4839a0b9754c0dc62  libgom
*** 127904,127909 ****
--- 127947,127957 ----
  271e2d9d749e1f5890f336e5f24f7826  libgomp/testsuite/libgomp.fortran/imperfect3.f90
  1c26032f958727f57e30b4319a2304c4  libgomp/testsuite/libgomp.fortran/imperfect4.f90
  a38a422e315bd08e01ae56187b2d4580  libgomp/testsuite/libgomp.fortran/inner-1.f90
+ 74bb13042a4b59fe2b61b594cd6ce69c  libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90
+ fd7083d48f6704610b027165b5e1a28d  libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90
+ c6b6960279848b26c0bd46292fbf4dc9  libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90
+ a4c46d78e0663318d6aeee652e093864  libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90
+ e1956151e0a1b58e3b37a0ee0654547f  libgomp/testsuite/libgomp.fortran/interop-hip.h
  90c092c2be0665ce5d2321dde75daca3  libgomp/testsuite/libgomp.fortran/interop-routines-1.F90
  4870363962ab0a448c018370ffd79024  libgomp/testsuite/libgomp.fortran/interop-routines-2.F90
  8e05d631995537a54328f3667c310bd6  libgomp/testsuite/libgomp.fortran/interop-routines-3.F
*************** fb198f79d07000ba2794e9cc222e90f8  libgom
*** 127930,127936 ****
  e0c7a627e2c061377a19883807aabfe2  libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90
  6b6de91ce089e96b58d531319cf398d4  libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90
  0240fb14a61ab47fba407a3a8493bfc6  libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90
! 6ac483ce7553e0f56e0a85f9bc2dec1e  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
  794f9311ffd6c98b9329dc06aa6a39e3  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  fe829ea13169aa018e2a5ad40e7581b9  libgomp/testsuite/libgomp.fortran/map-subarray-2.f90
--- 127978,127985 ----
  e0c7a627e2c061377a19883807aabfe2  libgomp/testsuite/libgomp.fortran/map-alloc-comp-6.f90
  6b6de91ce089e96b58d531319cf398d4  libgomp/testsuite/libgomp.fortran/map-alloc-comp-7.f90
  0240fb14a61ab47fba407a3a8493bfc6  libgomp/testsuite/libgomp.fortran/map-alloc-comp-8.f90
! 10190778b4af6170854bedfa75244a91  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
! 11a2994612dda1ea5d074b912ea7e4aa  libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
  f4ad2acbc3bf213777f658e4581eb805  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-1.f90
  794f9311ffd6c98b9329dc06aa6a39e3  libgomp/testsuite/libgomp.fortran/map-alloc-ptr-2.f90
  fe829ea13169aa018e2a5ad40e7581b9  libgomp/testsuite/libgomp.fortran/map-subarray-2.f90
*************** cad258d1ebb0ddd9dafd8a3cc0fc7c0c  libgom
*** 128098,128103 ****
--- 128147,128153 ----
  eeec7e27fda7ab81ff9b8a0cc3565be4  libgomp/testsuite/libgomp.fortran/target-enter-data-5.f90
  abbc97bdf2b7f6b7eb83b0ea35d12ca8  libgomp/testsuite/libgomp.fortran/target-enter-data-6.f90
  6ab97e695942e090864fc83282b49a44  libgomp/testsuite/libgomp.fortran/target-enter-data-7.f90
+ d2f9dcb74c3f8c91ce46755504611660  libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90
  4b32e60df4d9f68e1aefdd38f541c157  libgomp/testsuite/libgomp.fortran/target-firstprivate-1.f90
  1f145e3be28990a374e7117e351fb917  libgomp/testsuite/libgomp.fortran/target-firstprivate-2.f90
  92d67d046a52b255c5a4e9d08fe3f118  libgomp/testsuite/libgomp.fortran/target-firstprivate-3.f90
*************** d680e7307fb59fe24f8431e179191f16  libssp
*** 131248,131254 ****
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 13aebec207978b3c420f523a9f94472a  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
--- 131298,131304 ----
  534c3fb4a88e5c1f70db35c12b7742c3  libssp/vsnprintf-chk.c
  34daeb04a522ee796098df4446d6ce61  libssp/vsprintf-chk.c
  9e2de2e1f20ab0ffa2201164de02824f  libstdc++-v3/.editorconfig
! 931a0ef7e2fb68f8369dfb02aeb04020  libstdc++-v3/ChangeLog
  7aa6c40440a44fcf5ec94c066160c2f8  libstdc++-v3/ChangeLog-1998
  7aff86600b6a1ed3fa87305075a92db0  libstdc++-v3/ChangeLog-1999
  a6f28e8fc9bb07696a9e068b439a3a87  libstdc++-v3/ChangeLog-2000
*************** d66f986053e4755f0517ff5cfe90b2b5  libstd
*** 131489,131495 ****
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
  47886ba7da131bf3cbf81a27cada5f6f  libstdc++-v3/doc/html/bk03.html
! cbb6c24882a910ad87c8c7a8a8c78839  libstdc++-v3/doc/html/faq.html
  1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
  d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
  22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
--- 131539,131545 ----
  6d16751d668adf69fac47cc69bde7d40  libstdc++-v3/doc/html/api.html
  08920438eea18325b4bfdf979379ff66  libstdc++-v3/doc/html/bk02.html
  47886ba7da131bf3cbf81a27cada5f6f  libstdc++-v3/doc/html/bk03.html
! 2ff76da9446af5dab1f67ad7cafbacaf  libstdc++-v3/doc/html/faq.html
  1ae70f0bf94464b036515d333fff8ab2  libstdc++-v3/doc/html/images/confdeps.png
  d7f63b43e9f4c39cf71de7585de522ee  libstdc++-v3/doc/html/images/pbds_balls_and_bins.png
  22eedc841676a98f8ae8b95131ac4d7e  libstdc++-v3/doc/html/images/pbds_binary_priority_queue_int_push.png
*************** c60c6ae778d5dedae24ac21abf948bdb  libstd
*** 131588,131594 ****
  cc3700f2fde50987f186f23abf98a7b1  libstdc++-v3/doc/html/manual/concept_checking.html
  f3a54a6315d716742603d33f454f2c19  libstdc++-v3/doc/html/manual/concurrency.html
  2bb7c0f8b8c4c8d632b4bb16d5c77345  libstdc++-v3/doc/html/manual/configure.html
! af4e79b9e55fd023eeb0459df34a4a82  libstdc++-v3/doc/html/manual/containers.html
  c7e40c1085e414b3b4d5896db4013205  libstdc++-v3/doc/html/manual/containers_and_c.html
  5905f8be24ae69bb804c3d5a6a4abf7d  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
--- 131638,131644 ----
  cc3700f2fde50987f186f23abf98a7b1  libstdc++-v3/doc/html/manual/concept_checking.html
  f3a54a6315d716742603d33f454f2c19  libstdc++-v3/doc/html/manual/concurrency.html
  2bb7c0f8b8c4c8d632b4bb16d5c77345  libstdc++-v3/doc/html/manual/configure.html
! 5328918ec42768cddb06c3e97ef4530c  libstdc++-v3/doc/html/manual/containers.html
  c7e40c1085e414b3b4d5896db4013205  libstdc++-v3/doc/html/manual/containers_and_c.html
  5905f8be24ae69bb804c3d5a6a4abf7d  libstdc++-v3/doc/html/manual/debug.html
  1bd34529d162b6f3a08d5f2ea4943c6a  libstdc++-v3/doc/html/manual/debug_mode.html
*************** afcc2751dae09e088abc1e3175cb94cc  libstd
*** 131608,131616 ****
  561a364254927bdc578ac31f1b66747f  libstdc++-v3/doc/html/manual/ext_demangling.html
  05003e71d54cfdfd4c8291489f8ffa07  libstdc++-v3/doc/html/manual/ext_io.html
  44f8ef8b093904d418755d0e32d700b7  libstdc++-v3/doc/html/manual/ext_iterators.html
! 8f3bd86e04d263ad87cc258c289aae6d  libstdc++-v3/doc/html/manual/ext_numerics.html
  6d380acac52eb8c888a54068e44b16ac  libstdc++-v3/doc/html/manual/ext_preface.html
! 5632eb8ef681cd35b41be7eb7a3d7a98  libstdc++-v3/doc/html/manual/ext_sgi.html
  9b34310c7cb7faa4373ee6683678c457  libstdc++-v3/doc/html/manual/ext_utilities.html
  9e255046a8ef2903114374ed06403045  libstdc++-v3/doc/html/manual/extensions.html
  76cac108e21e304b7607196fb5245e00  libstdc++-v3/doc/html/manual/facets.html
--- 131658,131666 ----
  561a364254927bdc578ac31f1b66747f  libstdc++-v3/doc/html/manual/ext_demangling.html
  05003e71d54cfdfd4c8291489f8ffa07  libstdc++-v3/doc/html/manual/ext_io.html
  44f8ef8b093904d418755d0e32d700b7  libstdc++-v3/doc/html/manual/ext_iterators.html
! ffd5e74a40bbf6623b8ccf687eb584d8  libstdc++-v3/doc/html/manual/ext_numerics.html
  6d380acac52eb8c888a54068e44b16ac  libstdc++-v3/doc/html/manual/ext_preface.html
! 6889f243ab6934ae5f80ea7fa9c69dbf  libstdc++-v3/doc/html/manual/ext_sgi.html
  9b34310c7cb7faa4373ee6683678c457  libstdc++-v3/doc/html/manual/ext_utilities.html
  9e255046a8ef2903114374ed06403045  libstdc++-v3/doc/html/manual/extensions.html
  76cac108e21e304b7607196fb5245e00  libstdc++-v3/doc/html/manual/facets.html
*************** fcdceeabf3a95117ea22e93a0354e564  libstd
*** 131659,131678 ****
  c39b927efcec5ac84139c1490c8ef320  libstdc++-v3/doc/html/manual/traits.html
  530b96535baacfe35df2e65f9dfe7efc  libstdc++-v3/doc/html/manual/unordered_associative.html
  8aa9b7bfbe5a730701f97de49e583432  libstdc++-v3/doc/html/manual/using.html
! 652cd331d7566fb24fe08739f467db7c  libstdc++-v3/doc/html/manual/using_concurrency.html
  f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  11dd55e39edb8313b5563e53067c431e  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  09eeb2fa79fb240e032461adcbe2cb4a  libstdc++-v3/doc/html/manual/using_exceptions.html
  91385600a9fbb5f8f29c666917403807  libstdc++-v3/doc/html/manual/using_headers.html
  3411d1e07939e0319750eceefff4b4c2  libstdc++-v3/doc/html/manual/using_macros.html
  e8b86abd99dc9893dfa1bb7533fdc23d  libstdc++-v3/doc/html/manual/using_namespaces.html
! d881fcffb799c09a28d8174ccb1326a2  libstdc++-v3/doc/html/manual/utilities.html
  3d34cd999f3bf3133e40f554b6ba525e  libstdc++-v3/doc/xml/api.xml
  8059eb81f5540dc3ae678ac09e1f3159  libstdc++-v3/doc/xml/authors.xml
  5906074c27c57c65b220c35bbcb2c5ec  libstdc++-v3/doc/xml/book.txml
  44d3a92b83abfb18efac80519c79b44c  libstdc++-v3/doc/xml/chapter.txml
  011b8e6a5442e4dc08f02e7295b644a3  libstdc++-v3/doc/xml/class.txml
! af144d4623f6d57e1bb38450ae860eb1  libstdc++-v3/doc/xml/faq.xml
  ea77580f7e81e2c49aea3f425c01ee2b  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
  56bb32e9ab9358834c5f8eca2cd0e969  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
  18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
--- 131709,131728 ----
  c39b927efcec5ac84139c1490c8ef320  libstdc++-v3/doc/html/manual/traits.html
  530b96535baacfe35df2e65f9dfe7efc  libstdc++-v3/doc/html/manual/unordered_associative.html
  8aa9b7bfbe5a730701f97de49e583432  libstdc++-v3/doc/html/manual/using.html
! 78aa5833e13335bccb9f831528294eb7  libstdc++-v3/doc/html/manual/using_concurrency.html
  f8898e59cc7155a01a17f15a3b853c30  libstdc++-v3/doc/html/manual/using_dual_abi.html
  11dd55e39edb8313b5563e53067c431e  libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
  09eeb2fa79fb240e032461adcbe2cb4a  libstdc++-v3/doc/html/manual/using_exceptions.html
  91385600a9fbb5f8f29c666917403807  libstdc++-v3/doc/html/manual/using_headers.html
  3411d1e07939e0319750eceefff4b4c2  libstdc++-v3/doc/html/manual/using_macros.html
  e8b86abd99dc9893dfa1bb7533fdc23d  libstdc++-v3/doc/html/manual/using_namespaces.html
! 13c8dfb643338ee235bfc84a29e5d3f2  libstdc++-v3/doc/html/manual/utilities.html
  3d34cd999f3bf3133e40f554b6ba525e  libstdc++-v3/doc/xml/api.xml
  8059eb81f5540dc3ae678ac09e1f3159  libstdc++-v3/doc/xml/authors.xml
  5906074c27c57c65b220c35bbcb2c5ec  libstdc++-v3/doc/xml/book.txml
  44d3a92b83abfb18efac80519c79b44c  libstdc++-v3/doc/xml/chapter.txml
  011b8e6a5442e4dc08f02e7295b644a3  libstdc++-v3/doc/xml/class.txml
! bf9bccd7b0755cfea2731e669eb18a76  libstdc++-v3/doc/xml/faq.xml
  ea77580f7e81e2c49aea3f425c01ee2b  libstdc++-v3/doc/xml/gnu/fdl-1.3.xml
  56bb32e9ab9358834c5f8eca2cd0e969  libstdc++-v3/doc/xml/gnu/gpl-3.0.xml
  18a6390297702ec8fd75cbcc525d2005  libstdc++-v3/doc/xml/images/confdeps.dot
*************** b3f117e4c677e60cf6035cf76714b185  libstd
*** 131867,131880 ****
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
  1baba4ec8761c012c41a2ea967630fe1  libstdc++-v3/doc/xml/manual/configure.xml
! 0af07cc2460e288292186ea8149169ee  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
  0423695ef5d72eb026dfccb3b68e16ac  libstdc++-v3/doc/xml/manual/debug.xml
  a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  3680906036c20b1ccc54e2d06b5a3a24  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
  f300cfbcd39d07f1a1628c08ed8bc650  libstdc++-v3/doc/xml/manual/evolution.xml
! f9b28126e916ad19bb8350c6cb6bff95  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  fb1b8e4745ce0e8ee919f6013ad8ba87  libstdc++-v3/doc/xml/manual/intro.xml
  01ddfa93b18eebb84ed0144728f9bc9e  libstdc++-v3/doc/xml/manual/io.xml
--- 131917,131930 ----
  af3361d0d0af961859ec0346c38ac8c8  libstdc++-v3/doc/xml/manual/concurrency.xml
  9da4610e32c81714e9188c6852c8dc93  libstdc++-v3/doc/xml/manual/concurrency_extensions.xml
  1baba4ec8761c012c41a2ea967630fe1  libstdc++-v3/doc/xml/manual/configure.xml
! d7100469dfefd97836f3007f2682087d  libstdc++-v3/doc/xml/manual/containers.xml
  d08c687d9520b2f9d8dd6d973cca9e6a  libstdc++-v3/doc/xml/manual/ctype.xml
  0423695ef5d72eb026dfccb3b68e16ac  libstdc++-v3/doc/xml/manual/debug.xml
  a972c915c47573572139ea9161dec244  libstdc++-v3/doc/xml/manual/debug_mode.xml
  f320f25003678cca910f09ba54c923fc  libstdc++-v3/doc/xml/manual/diagnostics.xml
  3680906036c20b1ccc54e2d06b5a3a24  libstdc++-v3/doc/xml/manual/documentation_hacking.xml
  f300cfbcd39d07f1a1628c08ed8bc650  libstdc++-v3/doc/xml/manual/evolution.xml
! 250fbd9ce8e61158b22da9b231426c24  libstdc++-v3/doc/xml/manual/extensions.xml
  7f1864c7f3c3b2bfde84b7086be97ca7  libstdc++-v3/doc/xml/manual/internals.xml
  fb1b8e4745ce0e8ee919f6013ad8ba87  libstdc++-v3/doc/xml/manual/intro.xml
  01ddfa93b18eebb84ed0144728f9bc9e  libstdc++-v3/doc/xml/manual/io.xml
*************** bfd38fc5f1090656a5139c94c16ea163  libstd
*** 131903,131911 ****
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
  c540dcb615e766afe887215bd7795e42  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 57bdabb57ce2153ad90ca3b1c6a6edbd  libstdc++-v3/doc/xml/manual/using.xml
  257e301935b13b4b045e571fa248a4d8  libstdc++-v3/doc/xml/manual/using_exceptions.xml
! 74a5acaa32b3d223bd413c1bb5b69ac6  libstdc++-v3/doc/xml/manual/utilities.xml
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
--- 131953,131961 ----
  2b80feb1b53a8d0895a292620ec430b2  libstdc++-v3/doc/xml/manual/support.xml
  c540dcb615e766afe887215bd7795e42  libstdc++-v3/doc/xml/manual/test.xml
  e2e099be3dd6a4b7a940a7232635ee2c  libstdc++-v3/doc/xml/manual/test_policy_data_structures.xml
! 89a63a549c3438b3bee6bbf18f4c8b3e  libstdc++-v3/doc/xml/manual/using.xml
  257e301935b13b4b045e571fa248a4d8  libstdc++-v3/doc/xml/manual/using_exceptions.xml
! b820e3490221bb85cbf6bcdde0aa8150  libstdc++-v3/doc/xml/manual/utilities.xml
  c587674e0c370a2d6ccc5213ab3e4e65  libstdc++-v3/doc/xml/spine.xml
  bd966b4a0df6f2a84f9770525581d45c  libstdc++-v3/doc/xsl/customization.xsl.in
  42d14268f2b16c54a6bc2f71538a838c  libstdc++-v3/fragment.am
*************** a155d2afa910d24be0955f42c4585228  libstd
*** 131938,131944 ****
  4ab7627c024bab75db708e43d35616aa  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  2ac54ed5e0fab6bc6f771ecb2e9a9757  libstdc++-v3/include/bits/chrono.h
! 05acbabce31e6dc095a85f422865f245  libstdc++-v3/include/bits/chrono_io.h
  2ff73cb405cb01626a751e0fa0f339f3  libstdc++-v3/include/bits/codecvt.h
  23fc42ee8644308c793f44d20f00420e  libstdc++-v3/include/bits/concept_check.h
  e999e0783a5ca2165919f352526501e9  libstdc++-v3/include/bits/cow_string.h
--- 131988,131994 ----
  4ab7627c024bab75db708e43d35616aa  libstdc++-v3/include/bits/char_traits.h
  195dabcb74f9b313c574745539925b0e  libstdc++-v3/include/bits/charconv.h
  2ac54ed5e0fab6bc6f771ecb2e9a9757  libstdc++-v3/include/bits/chrono.h
! ea64576634de817e9f24e6c0b6b10592  libstdc++-v3/include/bits/chrono_io.h
  2ff73cb405cb01626a751e0fa0f339f3  libstdc++-v3/include/bits/codecvt.h
  23fc42ee8644308c793f44d20f00420e  libstdc++-v3/include/bits/concept_check.h
  e999e0783a5ca2165919f352526501e9  libstdc++-v3/include/bits/cow_string.h
*************** ae96a272e65886b9386e26db37971da1  libstd
*** 132643,132649 ****
  c2e511ae49957a9f02446e544d201582  libstdc++-v3/include/std/filesystem
  f178b6bdcfd6bb2ca46e3cdf19989aaf  libstdc++-v3/include/std/flat_map
  8a5fa0a4bb554b2db8c2fed26a6993ca  libstdc++-v3/include/std/flat_set
! f14441b20a28079d168ee21abe0db0b5  libstdc++-v3/include/std/format
  fa4316749922813b44f2ee282452813b  libstdc++-v3/include/std/forward_list
  e790ae6877466aa86b47f36d201e8563  libstdc++-v3/include/std/fstream
  5b0f9576e4006baf8a1aba30625aa30c  libstdc++-v3/include/std/functional
--- 132693,132699 ----
  c2e511ae49957a9f02446e544d201582  libstdc++-v3/include/std/filesystem
  f178b6bdcfd6bb2ca46e3cdf19989aaf  libstdc++-v3/include/std/flat_map
  8a5fa0a4bb554b2db8c2fed26a6993ca  libstdc++-v3/include/std/flat_set
! 6101cd159afaeadca59a17145628acf0  libstdc++-v3/include/std/format
  fa4316749922813b44f2ee282452813b  libstdc++-v3/include/std/forward_list
  e790ae6877466aa86b47f36d201e8563  libstdc++-v3/include/std/fstream
  5b0f9576e4006baf8a1aba30625aa30c  libstdc++-v3/include/std/functional
*************** e03c583ee7c5891df1c7b190275435c9  libstd
*** 132670,132676 ****
  0f1bf0fdfc91c5159496ce06fc478adc  libstdc++-v3/include/std/print
  317c818ab1030cf117c8d8ef03df06aa  libstdc++-v3/include/std/queue
  01746ff9db8573f15b943b0c36cce6a8  libstdc++-v3/include/std/random
! fec0869f0d5bc62d35559515d6ff9efc  libstdc++-v3/include/std/ranges
  a28bf4bed6789b61535d4b05ff48ba76  libstdc++-v3/include/std/ratio
  400d95a1fd416911b5c47562d7a586cf  libstdc++-v3/include/std/regex
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
--- 132720,132726 ----
  0f1bf0fdfc91c5159496ce06fc478adc  libstdc++-v3/include/std/print
  317c818ab1030cf117c8d8ef03df06aa  libstdc++-v3/include/std/queue
  01746ff9db8573f15b943b0c36cce6a8  libstdc++-v3/include/std/random
! 83f0b1fb9db24c31bf034bd93bb4dec8  libstdc++-v3/include/std/ranges
  a28bf4bed6789b61535d4b05ff48ba76  libstdc++-v3/include/std/ratio
  400d95a1fd416911b5c47562d7a586cf  libstdc++-v3/include/std/regex
  1bad2aed72c4537e7f08d24c1bf7d375  libstdc++-v3/include/std/scoped_allocator
*************** c9dcdd9b0b5c806e787dc702505f57e1  libstd
*** 132971,132977 ****
  ac9644e2d8390587379964f6b7e51ef0  libstdc++-v3/src/c++17/floating_to_chars.cc
  7c668fe3f79c2610268b1bc631741ad5  libstdc++-v3/src/c++17/fs_dir.cc
  38394abc0e937c8a15f74a60356f174a  libstdc++-v3/src/c++17/fs_ops.cc
! f5a89254ae1d1bf53829159bd06faad2  libstdc++-v3/src/c++17/fs_path.cc
  31b8948691651bc14d435c8e7b6fa79b  libstdc++-v3/src/c++17/memory_resource.cc
  4f2f44032e04f77de92166a02f76089d  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
--- 133021,133027 ----
  ac9644e2d8390587379964f6b7e51ef0  libstdc++-v3/src/c++17/floating_to_chars.cc
  7c668fe3f79c2610268b1bc631741ad5  libstdc++-v3/src/c++17/fs_dir.cc
  38394abc0e937c8a15f74a60356f174a  libstdc++-v3/src/c++17/fs_ops.cc
! 94b95a511b91830b1c3dbfdf235ec988  libstdc++-v3/src/c++17/fs_path.cc
  31b8948691651bc14d435c8e7b6fa79b  libstdc++-v3/src/c++17/memory_resource.cc
  4f2f44032e04f77de92166a02f76089d  libstdc++-v3/src/c++17/ostream-inst.cc
  f7696e2f5518e5e873ced4beacb8d107  libstdc++-v3/src/c++17/ryu/LOCAL_PATCHES
*************** d8b5c7bbcaa9de60c969091d64c33068  libstd
*** 139950,139955 ****
--- 140000,140006 ----
  8827bc9f09af2eced5f1d143bac148f2  libstdc++-v3/testsuite/27_io/filesystem/path/compare/lwg2936.cc
  d406f9f786619de550b6d317827282fe  libstdc++-v3/testsuite/27_io/filesystem/path/compare/path.cc
  09db1d962da8c300144c6fe67a87123b  libstdc++-v3/testsuite/27_io/filesystem/path/compare/strings.cc
+ 9b500ed50c013cdbd0290f1d06786f83  libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc
  f9564ca33867f98acac58615ac2496ea  libstdc++-v3/testsuite/27_io/filesystem/path/concat/92853.cc
  a11e1676ce109cebd57b9180939646b0  libstdc++-v3/testsuite/27_io/filesystem/path/concat/94063.cc
  ac83ba1d2034f5ffe1e0fdb36e996b29  libstdc++-v3/testsuite/27_io/filesystem/path/concat/path.cc
*************** ad4d0e37f9c3cd2fddce7c9f9008c951  libstd
*** 141100,141105 ****
--- 141151,141157 ----
  ad770979eea82aaceea1cc0c911a2a0a  libstdc++-v3/testsuite/experimental/filesystem/path/compare/compare.cc
  405c2389ab893cf75376cdcfadf3f39e  libstdc++-v3/testsuite/experimental/filesystem/path/compare/path.cc
  1b1233a0d5a89bc6333811d22af3027f  libstdc++-v3/testsuite/experimental/filesystem/path/compare/strings.cc
+ 83f8a63ee6afbdafe75f08d3ab59ded7  libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc
  c81179c8345b2c7cea96af7f701d9a7a  libstdc++-v3/testsuite/experimental/filesystem/path/concat/path.cc
  d007e99ea64e98101aa9ed705d31d597  libstdc++-v3/testsuite/experimental/filesystem/path/concat/strings.cc
  c06b01e19066f0d4ffa4faa5202f4e3e  libstdc++-v3/testsuite/experimental/filesystem/path/construct/100630.cc
*************** ed2c787f1fa34b84cf6ab7877f8bd604  libstd
*** 142101,142107 ****
  a16369d471363910d742a5c1b8b92c3c  libstdc++-v3/testsuite/std/format/ranges/adaptors.cc
  857552c77c29e3b58e4847f84fc27778  libstdc++-v3/testsuite/std/format/ranges/feature_test.cc
  23c2d31669b319d0063a28d6dd8353cc  libstdc++-v3/testsuite/std/format/ranges/format_kind.cc
! 3fa7ea13575f3418a2f660f7f1668262  libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc
  6cb5d9fc875882db914c7abe02a8f948  libstdc++-v3/testsuite/std/format/ranges/formatter.cc
  533e25e218217c606aaf67745b9dbb5f  libstdc++-v3/testsuite/std/format/ranges/map.cc
  94eb38239ab3228ac384cd8993a156d3  libstdc++-v3/testsuite/std/format/ranges/sequence.cc
--- 142153,142159 ----
  a16369d471363910d742a5c1b8b92c3c  libstdc++-v3/testsuite/std/format/ranges/adaptors.cc
  857552c77c29e3b58e4847f84fc27778  libstdc++-v3/testsuite/std/format/ranges/feature_test.cc
  23c2d31669b319d0063a28d6dd8353cc  libstdc++-v3/testsuite/std/format/ranges/format_kind.cc
! 3eb8e2fa183f344414482633d44531bb  libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc
  6cb5d9fc875882db914c7abe02a8f948  libstdc++-v3/testsuite/std/format/ranges/formatter.cc
  533e25e218217c606aaf67745b9dbb5f  libstdc++-v3/testsuite/std/format/ranges/map.cc
  94eb38239ab3228ac384cd8993a156d3  libstdc++-v3/testsuite/std/format/ranges/sequence.cc
*************** e9ef3f2b572f799b265913487f27690b  libstd
*** 142226,142232 ****
  1cd9b515badcd164d6958b0fbbbb52cf  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
  811bf06fb6123b7a4dc922fa36ba8a06  libstdc++-v3/testsuite/std/time/clock/gps/1.cc
  e9c8ba287435179e8670bb6951a6b4fa  libstdc++-v3/testsuite/std/time/clock/gps/io.cc
! 7d24bd5e236b9d29304e5b9940a2df32  libstdc++-v3/testsuite/std/time/clock/local/io.cc
  13ae31163906c8eda2c2021c882bdc89  libstdc++-v3/testsuite/std/time/clock/system/io.cc
  b3cda48993495a5d2ff69f7f1ad2c695  libstdc++-v3/testsuite/std/time/clock/tai/1.cc
  a87e1152f6bc2804b93ce070a51eeb54  libstdc++-v3/testsuite/std/time/clock/tai/io.cc
--- 142278,142284 ----
  1cd9b515badcd164d6958b0fbbbb52cf  libstdc++-v3/testsuite/std/time/clock/file/overview.cc
  811bf06fb6123b7a4dc922fa36ba8a06  libstdc++-v3/testsuite/std/time/clock/gps/1.cc
  e9c8ba287435179e8670bb6951a6b4fa  libstdc++-v3/testsuite/std/time/clock/gps/io.cc
! 77e52cac2443b4c26b20b6bb1f917624  libstdc++-v3/testsuite/std/time/clock/local/io.cc
  13ae31163906c8eda2c2021c882bdc89  libstdc++-v3/testsuite/std/time/clock/system/io.cc
  b3cda48993495a5d2ff69f7f1ad2c695  libstdc++-v3/testsuite/std/time/clock/tai/1.cc
  a87e1152f6bc2804b93ce070a51eeb54  libstdc++-v3/testsuite/std/time/clock/tai/io.cc
diff -Nrcpad gcc-15-20250517/gcc/ChangeLog gcc-15-20250524/gcc/ChangeLog
*** gcc-15-20250517/gcc/ChangeLog	Sat May 17 22:32:07 2025
--- gcc-15-20250524/gcc/ChangeLog	Sat May 24 22:32:05 2025
***************
*** 1,3 ****
--- 1,28 ----
+ 2025-05-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-14  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	PR tree-optimization/111873
+ 	* tree-sra.cc (sra_modify_expr): When processing a load which has
+ 	a type-incompatible replacement, do not store the contents of the
+ 	replacement into the original aggregate when that aggregate is
+ 	const.
+ 
+ 2025-05-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-16  Martin Jambor  <mjambor@suse.cz>
+ 		    Michal Jires  <mjires@suse.cz>
+ 
+ 	* cgraph.h (symtab_node): Make member function get_uid const.
+ 	* cgraphclones.cc (dump_callgraph_transformation): Dump m_uid of the
+ 	call graph nodes instead of order.
+ 	* cgraph.cc (cgraph_node::remove): Likewise.
+ 	* ipa-cp.cc (ipcp_lattice<valtype>::print): Likewise.
+ 	* ipa-sra.cc (ipa_sra_summarize_function): Likewise.
+ 	* symtab.cc (symtab_node::dump_base): Likewise.
+ 
  2025-05-16  Maciej W. Rozycki  <macro@orcam.me.uk>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250517/gcc/DATESTAMP gcc-15-20250524/gcc/DATESTAMP
*** gcc-15-20250517/gcc/DATESTAMP	Sat May 17 22:32:07 2025
--- gcc-15-20250524/gcc/DATESTAMP	Sat May 24 22:32:05 2025
***************
*** 1 ****
! 20250517
--- 1 ----
! 20250524
diff -Nrcpad gcc-15-20250517/gcc/cgraph.cc gcc-15-20250524/gcc/cgraph.cc
*** gcc-15-20250517/gcc/cgraph.cc	Sat May 17 22:32:08 2025
--- gcc-15-20250524/gcc/cgraph.cc	Sat May 24 22:32:06 2025
*************** cgraph_node::remove (void)
*** 1879,1885 ****
    clone_info *info, saved_info;
    if (symtab->ipa_clones_dump_file && symtab->cloned_nodes.contains (this))
      fprintf (symtab->ipa_clones_dump_file,
! 	     "Callgraph removal;%s;%d;%s;%d;%d\n", asm_name (), order,
  	     DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl),
  	     DECL_SOURCE_COLUMN (decl));
  
--- 1879,1885 ----
    clone_info *info, saved_info;
    if (symtab->ipa_clones_dump_file && symtab->cloned_nodes.contains (this))
      fprintf (symtab->ipa_clones_dump_file,
! 	     "Callgraph removal;%s;%d;%s;%d;%d\n", asm_name (), get_uid (),
  	     DECL_SOURCE_FILE (decl), DECL_SOURCE_LINE (decl),
  	     DECL_SOURCE_COLUMN (decl));
  
diff -Nrcpad gcc-15-20250517/gcc/cgraph.h gcc-15-20250524/gcc/cgraph.h
*** gcc-15-20250517/gcc/cgraph.h	Sat May 17 22:32:08 2025
--- gcc-15-20250524/gcc/cgraph.h	Sat May 24 22:32:06 2025
*************** public:
*** 493,499 ****
    static inline void checking_verify_symtab_nodes (void);
  
    /* Get unique identifier of the node.  */
!   inline int get_uid ()
    {
      return m_uid;
    }
--- 493,499 ----
    static inline void checking_verify_symtab_nodes (void);
  
    /* Get unique identifier of the node.  */
!   inline int get_uid () const
    {
      return m_uid;
    }
diff -Nrcpad gcc-15-20250517/gcc/cgraphclones.cc gcc-15-20250524/gcc/cgraphclones.cc
*** gcc-15-20250517/gcc/cgraphclones.cc	Sat May 17 22:32:08 2025
--- gcc-15-20250524/gcc/cgraphclones.cc	Sat May 24 22:32:06 2025
*************** dump_callgraph_transformation (const cgr
*** 324,334 ****
      {
        fprintf (symtab->ipa_clones_dump_file,
  	       "Callgraph clone;%s;%d;%s;%d;%d;%s;%d;%s;%d;%d;%s\n",
! 	       original->asm_name (), original->order,
  	       DECL_SOURCE_FILE (original->decl),
  	       DECL_SOURCE_LINE (original->decl),
  	       DECL_SOURCE_COLUMN (original->decl), clone->asm_name (),
! 	       clone->order, DECL_SOURCE_FILE (clone->decl),
  	       DECL_SOURCE_LINE (clone->decl), DECL_SOURCE_COLUMN (clone->decl),
  	       suffix);
  
--- 324,334 ----
      {
        fprintf (symtab->ipa_clones_dump_file,
  	       "Callgraph clone;%s;%d;%s;%d;%d;%s;%d;%s;%d;%d;%s\n",
! 	       original->asm_name (), original->get_uid (),
  	       DECL_SOURCE_FILE (original->decl),
  	       DECL_SOURCE_LINE (original->decl),
  	       DECL_SOURCE_COLUMN (original->decl), clone->asm_name (),
! 	       clone->get_uid (), DECL_SOURCE_FILE (clone->decl),
  	       DECL_SOURCE_LINE (clone->decl), DECL_SOURCE_COLUMN (clone->decl),
  	       suffix);
  
diff -Nrcpad gcc-15-20250517/gcc/cp/ChangeLog gcc-15-20250524/gcc/cp/ChangeLog
*** gcc-15-20250517/gcc/cp/ChangeLog	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/cp/ChangeLog	Sat May 24 22:32:07 2025
***************
*** 1,3 ****
--- 1,38 ----
+ 2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120363
+ 	* decl2.cc (get_tls_init_fn): Set context as global_namespace.
+ 	(get_tls_wrapper_fn): Likewise.
+ 
+ 2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120414
+ 	* module.cc (trees_in::tree_node): Allow reading a USING_DECL
+ 	when streaming tt_data_member.
+ 
+ 2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120013
+ 	* module.cc (trees_in::install_entity): Handle re-registering
+ 	the inner TYPE_DECL of a partial specialisation.
+ 
+ 2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120350
+ 	* rtti.cc (get_tinfo_decl_direct): Mark TREE_ADDRESSABLE.
+ 
  2025-05-15  Patrick Palka  <ppalka@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250517/gcc/cp/decl2.cc gcc-15-20250524/gcc/cp/decl2.cc
*** gcc-15-20250517/gcc/cp/decl2.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/cp/decl2.cc	Sat May 24 22:32:07 2025
*************** get_tls_init_fn (tree var)
*** 4026,4031 ****
--- 4026,4032 ----
        SET_DECL_LANGUAGE (fn, lang_c);
        TREE_PUBLIC (fn) = TREE_PUBLIC (var);
        DECL_ARTIFICIAL (fn) = true;
+       DECL_CONTEXT (fn) = FROB_CONTEXT (global_namespace);
        DECL_COMDAT (fn) = DECL_COMDAT (var);
        DECL_EXTERNAL (fn) = DECL_EXTERNAL (var);
        if (DECL_ONE_ONLY (var))
*************** get_tls_wrapper_fn (tree var)
*** 4085,4091 ****
        TREE_PUBLIC (fn) = TREE_PUBLIC (var);
        DECL_ARTIFICIAL (fn) = true;
        DECL_IGNORED_P (fn) = 1;
!       DECL_CONTEXT (fn) = DECL_CONTEXT (var);
        /* The wrapper is inline and emitted everywhere var is used.  */
        DECL_DECLARED_INLINE_P (fn) = true;
        if (TREE_PUBLIC (var))
--- 4086,4092 ----
        TREE_PUBLIC (fn) = TREE_PUBLIC (var);
        DECL_ARTIFICIAL (fn) = true;
        DECL_IGNORED_P (fn) = 1;
!       DECL_CONTEXT (fn) = FROB_CONTEXT (global_namespace);
        /* The wrapper is inline and emitted everywhere var is used.  */
        DECL_DECLARED_INLINE_P (fn) = true;
        if (TREE_PUBLIC (var))
diff -Nrcpad gcc-15-20250517/gcc/cp/module.cc gcc-15-20250524/gcc/cp/module.cc
*** gcc-15-20250517/gcc/cp/module.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/cp/module.cc	Sat May 24 22:32:07 2025
*************** trees_in::install_entity (tree decl)
*** 8097,8114 ****
        gcc_checking_assert (!existed);
        slot = ident;
      }
!   else if (state->is_partition ())
      {
-       /* The decl is already in the entity map, but we see it again now from a
- 	 partition: we want to overwrite if the original decl wasn't also from
- 	 a (possibly different) partition.  Otherwise, for things like template
- 	 instantiations, make_dependency might not realise that this is also
- 	 provided from a partition and should be considered part of this module
- 	 (and thus always emitted into the primary interface's CMI).  */
        unsigned *slot = entity_map->get (DECL_UID (decl));
!       module_state *imp = import_entity_module (*slot);
!       if (!imp->is_partition ())
! 	*slot = ident;
      }
  
    return true;
--- 8097,8133 ----
        gcc_checking_assert (!existed);
        slot = ident;
      }
!   else
      {
        unsigned *slot = entity_map->get (DECL_UID (decl));
! 
!       /* The entity must be in the entity map already.  However, DECL may
! 	 be the DECL_TEMPLATE_RESULT of an existing partial specialisation
! 	 if we matched it while streaming another instantiation; in this
! 	 case we already registered that TEMPLATE_DECL.  */
!       if (!slot)
! 	{
! 	  tree type = TREE_TYPE (decl);
! 	  gcc_checking_assert (TREE_CODE (decl) == TYPE_DECL
! 			       && CLASS_TYPE_P (type)
! 			       && CLASSTYPE_TEMPLATE_SPECIALIZATION (type));
! 	  slot = entity_map->get (DECL_UID (CLASSTYPE_TI_TEMPLATE (type)));
! 	}
!       gcc_checking_assert (slot);
! 
!       if (state->is_partition ())
! 	{
! 	  /* The decl is already in the entity map, but we see it again now
! 	     from a partition: we want to overwrite if the original decl
! 	     wasn't also from a (possibly different) partition.  Otherwise,
! 	     for things like template instantiations, make_dependency might
! 	     not realise that this is also provided from a partition and
! 	     should be considered part of this module (and thus always
! 	     emitted into the primary interface's CMI).  */
! 	  module_state *imp = import_entity_module (*slot);
! 	  if (!imp->is_partition ())
! 	    *slot = ident;
! 	}
      }
  
    return true;
*************** trees_in::tree_node (bool is_use)
*** 10503,10509 ****
  	      res = lookup_field_ident (ctx, u ());
  
  	    if (!res
! 		|| TREE_CODE (res) != FIELD_DECL
  		|| DECL_CONTEXT (res) != ctx)
  	      res = NULL_TREE;
  	  }
--- 10522,10529 ----
  	      res = lookup_field_ident (ctx, u ());
  
  	    if (!res
! 		|| (TREE_CODE (res) != FIELD_DECL
! 		    && TREE_CODE (res) != USING_DECL)
  		|| DECL_CONTEXT (res) != ctx)
  	      res = NULL_TREE;
  	  }
diff -Nrcpad gcc-15-20250517/gcc/cp/rtti.cc gcc-15-20250524/gcc/cp/rtti.cc
*** gcc-15-20250517/gcc/cp/rtti.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/cp/rtti.cc	Sat May 24 22:32:07 2025
*************** get_tinfo_decl_direct (tree type, tree n
*** 468,473 ****
--- 468,474 ----
        DECL_IGNORED_P (d) = 1;
        TREE_READONLY (d) = 1;
        TREE_STATIC (d) = 1;
+       TREE_ADDRESSABLE (d) = 1;
        /* Tell equal_address_to that different tinfo decls never
  	 overlap.  */
        if (vec_safe_is_empty (unemitted_tinfo_decls))
diff -Nrcpad gcc-15-20250517/gcc/fortran/ChangeLog gcc-15-20250524/gcc/fortran/ChangeLog
*** gcc-15-20250517/gcc/fortran/ChangeLog	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/fortran/ChangeLog	Sat May 24 22:32:07 2025
***************
*** 1,3 ****
--- 1,40 ----
+ 2025-05-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-05-15  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/85750
+ 	* resolve.cc (resolve_symbol): Reorder conditions when to apply
+ 	default-initializers.
+ 
+ 2025-05-20  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-05-10  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/102891
+ 	* dependency.cc (gfc_ref_needs_temporary_p): Within an array
+ 	reference, inquiry references of complex variables generally
+ 	need a temporary.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-05-15  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* trans-openmp.cc (gfc_omp_deep_mapping_do): Handle SSA_NAME if
+ 	a def_stmt is available.
+ 
+ 2025-05-17  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/120049
+ 	* check.cc (gfc_check_c_associated): Modify checks to avoid
+ 	ICE and allow use, intrinsic :: iso_c_binding from a separate
+ 	module file.
+ 
  2025-05-15  Thomas Koenig  <tkoenig@gcc.gnu.org>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250517/gcc/fortran/dependency.cc gcc-15-20250524/gcc/fortran/dependency.cc
*** gcc-15-20250517/gcc/fortran/dependency.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/fortran/dependency.cc	Sat May 24 22:32:07 2025
*************** gfc_ref_needs_temporary_p (gfc_ref *ref)
*** 944,951 ****
  	   types), not in characters.  */
  	return subarray_p;
  
-       case REF_COMPONENT:
        case REF_INQUIRY:
  	break;
        }
  
--- 944,955 ----
  	   types), not in characters.  */
  	return subarray_p;
  
        case REF_INQUIRY:
+ 	/* Within an array reference, inquiry references of complex
+ 	   variables generally need a temporary.  */
+ 	return subarray_p;
+ 
+       case REF_COMPONENT:
  	break;
        }
  
diff -Nrcpad gcc-15-20250517/gcc/fortran/resolve.cc gcc-15-20250524/gcc/fortran/resolve.cc
*** gcc-15-20250517/gcc/fortran/resolve.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/fortran/resolve.cc	Sat May 24 22:32:07 2025
*************** skip_interfaces:
*** 17970,17985 ****
  	  || (a->dummy && !a->pointer && a->intent == INTENT_OUT
  	      && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY))
  	apply_default_init (sym);
        else if (a->function && sym->result && a->access != ACCESS_PRIVATE
  	       && (sym->ts.u.derived->attr.alloc_comp
  		   || sym->ts.u.derived->attr.pointer_comp))
  	/* Mark the result symbol to be referenced, when it has allocatable
  	   components.  */
  	sym->result->attr.referenced = 1;
-       else if (a->function && !a->pointer && !a->allocatable && !a->use_assoc
- 	       && sym->result)
- 	/* Default initialization for function results.  */
- 	apply_default_init (sym->result);
      }
  
    if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
--- 17970,17985 ----
  	  || (a->dummy && !a->pointer && a->intent == INTENT_OUT
  	      && sym->ns->proc_name->attr.if_source != IFSRC_IFBODY))
  	apply_default_init (sym);
+       else if (a->function && !a->pointer && !a->allocatable && !a->use_assoc
+ 	       && sym->result)
+ 	/* Default initialization for function results.  */
+ 	apply_default_init (sym->result);
        else if (a->function && sym->result && a->access != ACCESS_PRIVATE
  	       && (sym->ts.u.derived->attr.alloc_comp
  		   || sym->ts.u.derived->attr.pointer_comp))
  	/* Mark the result symbol to be referenced, when it has allocatable
  	   components.  */
  	sym->result->attr.referenced = 1;
      }
  
    if (sym->ts.type == BT_CLASS && sym->ns == gfc_current_ns
diff -Nrcpad gcc-15-20250517/gcc/fortran/trans-openmp.cc gcc-15-20250524/gcc/fortran/trans-openmp.cc
*** gcc-15-20250517/gcc/fortran/trans-openmp.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/fortran/trans-openmp.cc	Sat May 24 22:32:07 2025
*************** gfc_omp_deep_mapping_do (bool is_cnt, co
*** 2478,2483 ****
--- 2478,2503 ----
    else
      while (TREE_CODE (tmp) == COMPONENT_REF || TREE_CODE (tmp) == ARRAY_REF)
        tmp = TREE_OPERAND (tmp, TREE_CODE (tmp) == COMPONENT_REF ? 1 : 0);
+   if (TREE_CODE (tmp) == MEM_REF)
+     tmp = TREE_OPERAND (tmp, 0);
+   if (TREE_CODE (tmp) == SSA_NAME)
+     {
+       gimple *def_stmt = SSA_NAME_DEF_STMT (tmp);
+       if (gimple_code (def_stmt) == GIMPLE_ASSIGN)
+ 	{
+ 	  tmp = gimple_assign_rhs1 (def_stmt);
+ 	  if (poly)
+ 	    {
+ 	      tmp = TYPE_FIELDS (type);
+ 	      type = TREE_TYPE (tmp);
+ 	    }
+ 	  else
+ 	    while (TREE_CODE (tmp) == COMPONENT_REF
+ 		   || TREE_CODE (tmp) == ARRAY_REF)
+ 	      tmp = TREE_OPERAND (tmp,
+ 				  TREE_CODE (tmp) == COMPONENT_REF ? 1 : 0);
+ 	}
+     }
    /* If the clause argument is nonallocatable, skip is-allocate check. */
    if (GFC_DECL_GET_SCALAR_ALLOCATABLE (tmp)
        || GFC_DECL_GET_SCALAR_POINTER (tmp)
diff -Nrcpad gcc-15-20250517/gcc/ipa-cp.cc gcc-15-20250524/gcc/ipa-cp.cc
*** gcc-15-20250517/gcc/ipa-cp.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/ipa-cp.cc	Sat May 24 22:32:07 2025
*************** ipcp_lattice<valtype>::print (FILE * f,
*** 292,298 ****
  	  else
  	    fprintf (f, " [scc: %i, from:", val->scc_no);
  	  for (s = val->sources; s; s = s->next)
! 	    fprintf (f, " %i(%f)", s->cs->caller->order,
  		     s->cs->sreal_frequency ().to_double ());
  	  fprintf (f, "]");
  	}
--- 292,298 ----
  	  else
  	    fprintf (f, " [scc: %i, from:", val->scc_no);
  	  for (s = val->sources; s; s = s->next)
! 	    fprintf (f, " %i(%f)", s->cs->caller->get_uid (),
  		     s->cs->sreal_frequency ().to_double ());
  	  fprintf (f, "]");
  	}
diff -Nrcpad gcc-15-20250517/gcc/ipa-sra.cc gcc-15-20250524/gcc/ipa-sra.cc
*** gcc-15-20250517/gcc/ipa-sra.cc	Sat May 17 22:32:09 2025
--- gcc-15-20250524/gcc/ipa-sra.cc	Sat May 24 22:32:07 2025
*************** ipa_sra_summarize_function (cgraph_node
*** 4644,4650 ****
  {
    if (dump_file)
      fprintf (dump_file, "Creating summary for %s/%i:\n", node->name (),
! 	     node->order);
    gcc_obstack_init (&gensum_obstack);
    loaded_decls = new hash_set<tree>;
  
--- 4644,4650 ----
  {
    if (dump_file)
      fprintf (dump_file, "Creating summary for %s/%i:\n", node->name (),
! 	     node->get_uid ());
    gcc_obstack_init (&gensum_obstack);
    loaded_decls = new hash_set<tree>;
  
diff -Nrcpad gcc-15-20250517/gcc/symtab.cc gcc-15-20250524/gcc/symtab.cc
*** gcc-15-20250517/gcc/symtab.cc	Sat May 17 22:32:10 2025
--- gcc-15-20250524/gcc/symtab.cc	Sat May 24 22:32:08 2025
*************** symtab_node::dump_base (FILE *f)
*** 989,998 ****
  	     same_comdat_group->dump_asm_name ());
    if (next_sharing_asm_name)
      fprintf (f, "  next sharing asm name: %i\n",
! 	     next_sharing_asm_name->order);
    if (previous_sharing_asm_name)
      fprintf (f, "  previous sharing asm name: %i\n",
! 	     previous_sharing_asm_name->order);
  
    if (address_taken)
      fprintf (f, "  Address is taken.\n");
--- 989,998 ----
  	     same_comdat_group->dump_asm_name ());
    if (next_sharing_asm_name)
      fprintf (f, "  next sharing asm name: %i\n",
! 	     next_sharing_asm_name->get_uid ());
    if (previous_sharing_asm_name)
      fprintf (f, "  previous sharing asm name: %i\n",
! 	     previous_sharing_asm_name->get_uid ());
  
    if (address_taken)
      fprintf (f, "  Address is taken.\n");
diff -Nrcpad gcc-15-20250517/gcc/testsuite/ChangeLog gcc-15-20250524/gcc/testsuite/ChangeLog
*** gcc-15-20250517/gcc/testsuite/ChangeLog	Sat May 17 22:32:10 2025
--- gcc-15-20250524/gcc/testsuite/ChangeLog	Sat May 24 22:32:08 2025
***************
*** 1,3 ****
--- 1,91 ----
+ 2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120363
+ 	* g++.dg/modules/pr113292_a.H: Move to...
+ 	* g++.dg/modules/tls-1_a.H: ...here.
+ 	* g++.dg/modules/pr113292_b.C: Move to...
+ 	* g++.dg/modules/tls-1_b.C: ...here.
+ 	* g++.dg/modules/pr113292_c.C: Move to...
+ 	* g++.dg/modules/tls-1_c.C: ...here.
+ 	* g++.dg/modules/tls-2_a.C: New test.
+ 	* g++.dg/modules/tls-2_b.C: New test.
+ 	* g++.dg/modules/tls-2_c.C: New test.
+ 	* g++.dg/modules/tls-3.h: New test.
+ 	* g++.dg/modules/tls-3_a.H: New test.
+ 	* g++.dg/modules/tls-3_b.C: New test.
+ 
+ 2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-23  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120414
+ 	* g++.dg/modules/using-31_a.C: New test.
+ 	* g++.dg/modules/using-31_b.C: New test.
+ 
+ 2025-05-22  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-05-15  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/85750
+ 	* gfortran.dg/alloc_comp_auto_array_3.f90: Adjust scan counts.
+ 	* gfortran.dg/alloc_comp_class_3.f03: Remove bogus warnings.
+ 	* gfortran.dg/alloc_comp_class_4.f03: Likewise.
+ 	* gfortran.dg/allocate_with_source_14.f03: Adjust scan count.
+ 	* gfortran.dg/derived_constructor_comps_6.f90: Likewise.
+ 	* gfortran.dg/derived_result_5.f90: New test.
+ 
+ 2025-05-20  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	Backported from master:
+ 	2025-05-10  Harald Anlauf  <anlauf@gmx.de>
+ 
+ 	PR fortran/102891
+ 	* gfortran.dg/transfer_array_subref.f90: New test.
+ 
+ 2025-05-20  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	Backported from master:
+ 	2025-05-14  Martin Jambor  <mjambor@suse.cz>
+ 
+ 	* gcc.dg/ipa/pr120044-1.c: New test.
+ 	* gcc.dg/ipa/pr120044-2.c: Likewise.
+ 	* gcc.dg/tree-ssa/pr114864.c: Likewise.
+ 
+ 2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120013
+ 	* g++.dg/modules/partial-8.h: New test.
+ 	* g++.dg/modules/partial-8_a.C: New test.
+ 	* g++.dg/modules/partial-8_b.C: New test.
+ 	* g++.dg/modules/partial-8_c.C: New test.
+ 	* g++.dg/modules/partial-8_d.C: New test.
+ 
+ 2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Nathaniel Shead  <nathanieloshead@gmail.com>
+ 
+ 	PR c++/120350
+ 	* g++.dg/modules/tinfo-3_a.H: New test.
+ 	* g++.dg/modules/tinfo-3_b.C: New test.
+ 
+ 2025-05-17  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	Backported from master:
+ 	2025-05-06  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+ 
+ 	PR fortran/120049
+ 	* gfortran.dg/pr120049_a.f90: New test.
+ 	* gfortran.dg/pr120049_b.f90: New test.
+ 
  2025-05-16  Maciej W. Rozycki  <macro@orcam.me.uk>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8.h gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8.h
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8.h	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/120013
+ 
+ template <typename> struct tuple_element;
+ template <typename T> tuple_element<T*> get(T);
+ 
+ // This case wasn't an issue for the PR, but worth double-checking
+ template <typename> constexpr int var = 123;
+ template <typename T> void foo(T, int = var<T*>);
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_a.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_a.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_a.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_a.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,10 ----
+ // PR c++/120013
+ // { dg-additional-options "-fmodules -Wno-global-module" }
+ // { dg-module-cmi m:a }
+ 
+ module;
+ #include "partial-8.h"
+ template <typename T> struct tuple_element<T*>;
+ template <typename T> constexpr int var<T*> = 456;
+ module m:a;
+ template <typename T> void a(T t) { ::get(t); foo(t); }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_b.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/120013
+ // { dg-additional-options "-fmodules -Wno-global-module" }
+ // { dg-module-cmi m:b }
+ 
+ module;
+ #include "partial-8.h"
+ module m:b;
+ template <typename T> void b(T t) { ::get(t); foo(t); }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_c.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_c.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_c.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_c.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/120013
+ // { dg-additional-options "-fmodules" }
+ // { dg-module-cmi m }
+ 
+ export module m;
+ import :a;
+ import :b;
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_d.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_d.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/partial-8_d.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/partial-8_d.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,9 ----
+ // PR c++/120013
+ // { dg-additional-options "-fmodules" }
+ // { dg-module-cmi m }
+ // Same as partial-8_c.C but in the other order, to ensure
+ // that loading a partial spec over an instantiation works
+ 
+ export module m;
+ import :b;
+ import :a;
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/pr113292_a.H gcc-15-20250524/gcc/testsuite/g++.dg/modules/pr113292_a.H
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/pr113292_a.H	Sat May 17 22:32:12 2025
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/pr113292_a.H	Thu Jan  1 00:00:00 1970
***************
*** 1,34 ****
- // PR c++/113292
- // { dg-additional-options "-fmodule-header" }
- // { dg-module-cmi {} }
- 
- struct test {
-   static const test& get_instance() {
-     return instance;
-   }
-   static thread_local test instance;
- };
- 
- 
- template <typename T>
- struct test_template {
-   static const test_template& get_instance() {
-     return instance;
-   }
-   static thread_local test_template instance;
- 
-   template <typename U>
-   static const test_template& get_template_instance() {
-     return template_instance<U>;
-   }
- 
-   template <typename U>
-   static thread_local test_template template_instance;
- };
- 
- template <typename T>
- thread_local test_template<T> test_template<T>::instance;
- 
- template <typename T>
- template <typename U>
- thread_local test_template<T> test_template<T>::template_instance;
--- 0 ----
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/pr113292_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/pr113292_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/pr113292_b.C	Sat May 17 22:32:12 2025
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/pr113292_b.C	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- // PR c++/113292
- // { dg-additional-options "-fmodules-ts" }
- 
- import "pr113292_a.H";
- 
- // provide a definition of 'instance' so things link
- thread_local test test::instance;
- 
- void instantiate() {
-   auto& instance = test::get_instance();
-   auto& t_instance = test_template<int>::get_instance();
-   auto& tt_instance = test_template<int>::get_template_instance<double>();
- };
--- 0 ----
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/pr113292_c.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/pr113292_c.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/pr113292_c.C	Sat May 17 22:32:12 2025
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/pr113292_c.C	Thu Jan  1 00:00:00 1970
***************
*** 1,13 ****
- // PR c++/113292
- // { dg-module-do link }
- // { dg-require-effective-target tls_runtime }
- // { dg-add-options tls }
- // { dg-additional-options "-fmodules-ts" }
- 
- import "pr113292_a.H";
- 
- int main() {
-   auto& instance = test::get_instance();
-   auto& t_instance = test_template<int>::get_instance();
-   auto& tt_instance = test_template<int>::get_template_instance<double>();
- }
--- 0 ----
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tinfo-3_a.H gcc-15-20250524/gcc/testsuite/g++.dg/modules/tinfo-3_a.H
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tinfo-3_a.H	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tinfo-3_a.H	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,7 ----
+ // PR c++/120350
+ // { dg-additional-options "-fmodule-header" }
+ // { dg-module-cmi {} }
+ 
+ #include <typeinfo>
+ struct S {};
+ inline const std::type_info& tinfo = typeid(S);
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tinfo-3_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tinfo-3_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tinfo-3_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tinfo-3_b.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,8 ----
+ // PR c++/120350
+ // { dg-additional-options "-fmodules" }
+ 
+ import "tinfo-3_a.H";
+ 
+ int main() {
+   return tinfo == typeid(int);
+ }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-1_a.H gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-1_a.H
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-1_a.H	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-1_a.H	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,34 ----
+ // PR c++/113292
+ // { dg-additional-options "-fmodule-header" }
+ // { dg-module-cmi {} }
+ 
+ struct test {
+   static const test& get_instance() {
+     return instance;
+   }
+   static thread_local test instance;
+ };
+ 
+ 
+ template <typename T>
+ struct test_template {
+   static const test_template& get_instance() {
+     return instance;
+   }
+   static thread_local test_template instance;
+ 
+   template <typename U>
+   static const test_template& get_template_instance() {
+     return template_instance<U>;
+   }
+ 
+   template <typename U>
+   static thread_local test_template template_instance;
+ };
+ 
+ template <typename T>
+ thread_local test_template<T> test_template<T>::instance;
+ 
+ template <typename T>
+ template <typename U>
+ thread_local test_template<T> test_template<T>::template_instance;
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-1_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-1_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-1_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-1_b.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/113292
+ // { dg-additional-options "-fmodules-ts" }
+ 
+ import "tls-1_a.H";
+ 
+ // provide a definition of 'instance' so things link
+ thread_local test test::instance;
+ 
+ void instantiate() {
+   auto& instance = test::get_instance();
+   auto& t_instance = test_template<int>::get_instance();
+   auto& tt_instance = test_template<int>::get_template_instance<double>();
+ };
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-1_c.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-1_c.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-1_c.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-1_c.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,13 ----
+ // PR c++/113292
+ // { dg-module-do link }
+ // { dg-require-effective-target tls_runtime }
+ // { dg-add-options tls }
+ // { dg-additional-options "-fmodules-ts" }
+ 
+ import "tls-1_a.H";
+ 
+ int main() {
+   auto& instance = test::get_instance();
+   auto& t_instance = test_template<int>::get_instance();
+   auto& tt_instance = test_template<int>::get_template_instance<double>();
+ }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-2_a.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-2_a.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-2_a.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-2_a.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,12 ----
+ // PR c++/120363
+ // { dg-additional-options "-fmodules" }
+ // { dg-module-cmi M }
+ 
+ export module M;
+ 
+ export struct test {
+   static inline const int& get_instance() {
+     return instance;
+   }
+   static thread_local int instance;
+ };
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-2_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-2_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-2_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-2_b.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/120363
+ // { dg-additional-options "-fmodules" }
+ 
+ module M;
+ thread_local int test::instance;
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-2_c.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-2_c.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-2_c.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-2_c.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,11 ----
+ // PR c++/120363
+ // { dg-module-do link }
+ // { dg-require-effective-target tls_runtime }
+ // { dg-add-options tls }
+ // { dg-additional-options "-fmodules" }
+ 
+ import M;
+ 
+ int main() {
+   auto& instance = test::get_instance();
+ }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-3.h gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-3.h
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-3.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-3.h	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,42 ----
+ inline thread_local int tla;
+ inline int& get_tla() {
+   return tla;
+ }
+ 
+ static thread_local int tlb;
+ static int& get_tlb() {
+   return tlb;
+ }
+ 
+ struct test {
+   static const test& get_instance() {
+     return instance;
+   }
+   static thread_local test instance;
+ };
+ 
+ template <typename T>
+ struct test_template {
+   static const test_template& get_instance() {
+     return instance;
+   }
+   static thread_local test_template instance;
+ 
+   template <typename U>
+   static const test_template& get_template_instance() {
+     return template_instance<U>;
+   }
+ 
+   template <typename U>
+   static thread_local test_template template_instance;
+ };
+ 
+ template <typename T>
+ thread_local test_template<T> test_template<T>::instance;
+ 
+ template <typename T>
+ template <typename U>
+ thread_local test_template<T> test_template<T>::template_instance;
+ 
+ template struct test_template<int>;
+ template const test_template<int>& test_template<int>::get_template_instance<int>();
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-3_a.H gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-3_a.H
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-3_a.H	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-3_a.H	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ // { dg-additional-options "-fmodule-header" }
+ // { dg-module-cmi {} }
+ 
+ #include "tls-3.h"
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-3_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-3_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/tls-3_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/tls-3_b.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,4 ----
+ // { dg-additional-options "-fmodules -fno-module-lazy" }
+ 
+ #include "tls-3.h"
+ import "tls-3_a.H";
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/using-31_a.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/using-31_a.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/using-31_a.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/using-31_a.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,18 ----
+ // PR c++/120414
+ // { dg-additional-options "-fmodules" }
+ // { dg-module-cmi m }
+ 
+ export module m;
+ 
+ template <int n>
+ struct Base {
+   static constexpr int base_static_mbr_n = n;
+ };
+ 
+ template <int n>
+ struct Derived : Base<n> {
+   using Base<n>::base_static_mbr_n;
+   static constexpr int go(int x = base_static_mbr_n) { return x; }
+ };
+ 
+ template struct Derived<1>;
diff -Nrcpad gcc-15-20250517/gcc/testsuite/g++.dg/modules/using-31_b.C gcc-15-20250524/gcc/testsuite/g++.dg/modules/using-31_b.C
*** gcc-15-20250517/gcc/testsuite/g++.dg/modules/using-31_b.C	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/g++.dg/modules/using-31_b.C	Sat May 24 22:32:11 2025
***************
*** 0 ****
--- 1,5 ----
+ // PR c++/120414
+ // { dg-additional-options "-fmodules" }
+ 
+ module m;
+ static_assert(Derived<1>::go() == 1);
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gcc.dg/ipa/pr120044-1.c gcc-15-20250524/gcc/testsuite/gcc.dg/ipa/pr120044-1.c
*** gcc-15-20250517/gcc/testsuite/gcc.dg/ipa/pr120044-1.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/gcc.dg/ipa/pr120044-1.c	Sat May 24 22:32:14 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-early-inlining -fno-tree-fre -fno-tree-pre -fno-code-hoisting -fno-inline" } */
+ 
+ struct a {
+   int b;
+ } const c;
+ void d(char p, struct a e) {
+   while (e.b)
+     ;
+ }
+ static unsigned short f(const struct a g) {
+   d(g.b, g);
+   return g.b;
+ }
+ int main() {
+   return f(c);
+ }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gcc.dg/ipa/pr120044-2.c gcc-15-20250524/gcc/testsuite/gcc.dg/ipa/pr120044-2.c
*** gcc-15-20250517/gcc/testsuite/gcc.dg/ipa/pr120044-2.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/gcc.dg/ipa/pr120044-2.c	Sat May 24 22:32:14 2025
***************
*** 0 ****
--- 1,17 ----
+ /* { dg-do run } */
+ /* { dg-options "-O3 -fno-early-inlining -fno-tree-fre -fno-tree-pre -fno-code-hoisting -fno-ipa-cp" } */
+ 
+ struct a {
+   int b;
+ } const c;
+ void d(char p, struct a e) {
+   while (e.b)
+     ;
+ }
+ static unsigned short f(const struct a g) {
+   d(g.b, g);
+   return g.b;
+ }
+ int main() {
+   return f(c);
+ }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c gcc-15-20250524/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c
*** gcc-15-20250517/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/gcc.dg/tree-ssa/pr114864.c	Sat May 24 22:32:15 2025
***************
*** 0 ****
--- 1,15 ----
+ /* { dg-do run } */
+ /* { dg-options "-O1 -fno-tree-dce -fno-tree-fre" } */
+ 
+ struct a {
+   int b;
+ } const c;
+ void d(const struct a f) {}
+ void e(const struct a f) {
+   f.b == 0 ? 1 : f.b;
+   d(f);
+ }
+ int main() {
+   e(c);
+   return 0;
+ }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90 gcc-15-20250524/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90	Sat May 17 22:32:19 2025
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/alloc_comp_auto_array_3.f90	Sat May 24 22:32:21 2025
*************** contains
*** 25,30 ****
      allocate (array(1)%bigarr)
    end function
  end
! ! { dg-final { scan-tree-dump-times "builtin_malloc" 3 "original" } }
  ! { dg-final { scan-tree-dump-times "builtin_free" 3 "original" } }
! ! { dg-final { scan-tree-dump-times "while \\(1\\)" 4 "original" } }
--- 25,30 ----
      allocate (array(1)%bigarr)
    end function
  end
! ! { dg-final { scan-tree-dump-times "builtin_malloc" 4 "original" } }
  ! { dg-final { scan-tree-dump-times "builtin_free" 3 "original" } }
! ! { dg-final { scan-tree-dump-times "while \\(1\\)" 5 "original" } }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03 gcc-15-20250524/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03	Sat May 17 22:32:19 2025
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/alloc_comp_class_3.f03	Sat May 24 22:32:21 2025
*************** contains
*** 45,55 ****
      type(c), value :: d
    end subroutine
  
!   type(c) function c_init()  ! { dg-warning "not set" }
    end function
  
    subroutine sub(d)
      type(u), value :: d
    end subroutine
  end program test_pr58586
- 
--- 45,54 ----
      type(c), value :: d
    end subroutine
  
!   type(c) function c_init()
    end function
  
    subroutine sub(d)
      type(u), value :: d
    end subroutine
  end program test_pr58586
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03 gcc-15-20250524/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03	Sat May 17 22:32:19 2025
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/alloc_comp_class_4.f03	Sat May 24 22:32:21 2025
*************** contains
*** 51,64 ****
      type(t), value :: d
    end subroutine
  
!   type(c) function c_init() ! { dg-warning "not set" }
    end function
  
    class(c) function c_init2() ! { dg-warning "not set" }
      allocatable :: c_init2
    end function
  
!   type(c) function d_init(this) ! { dg-warning "not set" }
      class(d) :: this
    end function
  
--- 51,64 ----
      type(t), value :: d
    end subroutine
  
!   type(c) function c_init()
    end function
  
    class(c) function c_init2() ! { dg-warning "not set" }
      allocatable :: c_init2
    end function
  
!   type(c) function d_init(this)
      class(d) :: this
    end function
  
*************** program test_pr58586
*** 102,105 ****
    call add_c(oe%init())
    deallocate(oe)
  end program
- 
--- 102,104 ----
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03 gcc-15-20250524/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03	Sat May 17 22:32:19 2025
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/allocate_with_source_14.f03	Sat May 24 22:32:21 2025
*************** program main
*** 210,214 ****
    call v%free()
    deallocate(av)
  end program
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 22 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 29 "original" } }
--- 210,214 ----
    call v%free()
    deallocate(av)
  end program
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 23 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 29 "original" } }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90 gcc-15-20250524/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90	Sat May 17 22:32:20 2025
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/derived_constructor_comps_6.f90	Sat May 24 22:32:22 2025
*************** contains
*** 129,133 ****
      prt_spec = name
    end function new_prt_spec3
  end program main
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 15 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 33 "original" } }
--- 129,133 ----
      prt_spec = name
    end function new_prt_spec3
  end program main
! ! { dg-final { scan-tree-dump-times "__builtin_malloc" 16 "original" } }
  ! { dg-final { scan-tree-dump-times "__builtin_free" 33 "original" } }
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/derived_result_5.f90 gcc-15-20250524/gcc/testsuite/gfortran.dg/derived_result_5.f90
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/derived_result_5.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/derived_result_5.f90	Sat May 24 22:32:22 2025
***************
*** 0 ****
--- 1,123 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -Wreturn-type" }
+ !
+ ! PR fortran/85750 - default-initialization and functions returning derived type
+ 
+ module bar
+   implicit none
+   type ilist
+     integer          :: count = 42
+     integer, pointer :: ptr(:) => null()
+   end type ilist
+ 
+   type jlist
+     real, allocatable :: a(:)
+     integer           :: count = 23
+   end type jlist
+ 
+ contains
+ 
+   function make_list(i)
+     integer,     intent(in)   :: i
+     type(ilist), dimension(2) :: make_list
+     make_list(i)%count = i
+   end function make_list
+ 
+   function make_list_res(i) result(list)
+     integer,     intent(in)   :: i
+     type(ilist), dimension(2) :: list
+     list(i)%count = i
+   end function make_list_res
+ 
+   function make_jlist(i)
+     integer,     intent(in)   :: i
+     type(jlist), dimension(2) :: make_jlist
+     make_jlist(i)%count = i
+   end function make_jlist
+ 
+   function make_jlist_res(i) result(list)
+     integer,     intent(in)   :: i
+     type(jlist), dimension(2) :: list
+     list(i)%count = i
+   end function make_jlist_res
+ 
+   function empty_ilist()
+     type(ilist), dimension(2) :: empty_ilist
+   end function
+ 
+   function empty_jlist()
+     type(jlist), dimension(2) :: empty_jlist
+   end function
+ 
+   function empty_ilist_res() result (res)
+     type(ilist), dimension(2) :: res
+   end function
+ 
+   function empty_jlist_res() result (res)
+     type(jlist), dimension(2) :: res
+   end function
+ 
+ end module bar
+ 
+ program foo
+   use bar
+   implicit none
+   type(ilist)              :: mylist(2) = ilist(count=-2)
+   type(jlist), allocatable :: yourlist(:)
+ 
+   mylist = ilist(count=-1)
+   if (any (mylist%count /= [-1,-1])) stop 1
+   mylist = empty_ilist()
+   if (any (mylist%count /= [42,42])) stop 2
+   mylist = ilist(count=-1)
+   mylist = empty_ilist_res()
+   if (any (mylist%count /= [42,42])) stop 3
+ 
+   allocate(yourlist(1:2))
+   if (any (yourlist%count /= [23,23])) stop 4
+   yourlist = jlist(count=-1)
+   if (any (yourlist%count /= [-1,-1])) stop 5
+   yourlist = empty_jlist()
+   if (any (yourlist%count /= [23,23])) stop 6
+   yourlist = jlist(count=-1)
+   yourlist = empty_jlist_res()
+   if (any (yourlist%count /= [23,23])) stop 7
+ 
+   mylist = make_list(1)
+   if (any (mylist%count /= [1,42])) stop 11
+   mylist = make_list(2)
+   if (any (mylist%count /= [42,2])) stop 12
+   mylist = (make_list(1))
+   if (any (mylist%count /= [1,42])) stop 13
+   mylist = [make_list(2)]
+   if (any (mylist%count /= [42,2])) stop 14
+ 
+   mylist = make_list_res(1)
+   if (any (mylist%count /= [1,42])) stop 21
+   mylist = make_list_res(2)
+   if (any (mylist%count /= [42,2])) stop 22
+   mylist = (make_list_res(1))
+   if (any (mylist%count /= [1,42])) stop 23
+   mylist = [make_list_res(2)]
+   if (any (mylist%count /= [42,2])) stop 24
+ 
+   yourlist = make_jlist(1)
+   if (any (yourlist%count /= [1,23])) stop 31
+   yourlist = make_jlist(2)
+   if (any (yourlist%count /= [23,2])) stop 32
+   yourlist = (make_jlist(1))
+   if (any (yourlist%count /= [1,23])) stop 33
+   yourlist = [make_jlist(2)]
+   if (any (yourlist%count /= [23,2])) stop 34
+ 
+   yourlist = make_jlist_res(1)
+   if (any (yourlist%count /= [1,23])) stop 41
+   yourlist = make_jlist_res(2)
+   if (any (yourlist%count /= [23,2])) stop 42
+   yourlist = (make_jlist_res(1))
+   if (any (yourlist%count /= [1,23])) stop 43
+   yourlist = [make_jlist_res(2)]
+   if (any (yourlist%count /= [23,2])) stop 44
+ 
+   deallocate (yourlist)
+ end program foo
diff -Nrcpad gcc-15-20250517/gcc/testsuite/gfortran.dg/transfer_array_subref.f90 gcc-15-20250524/gcc/testsuite/gfortran.dg/transfer_array_subref.f90
*** gcc-15-20250517/gcc/testsuite/gfortran.dg/transfer_array_subref.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/gcc/testsuite/gfortran.dg/transfer_array_subref.f90	Sat May 24 22:32:22 2025
***************
*** 0 ****
--- 1,48 ----
+ ! { dg-do run }
+ ! { dg-additional-options "-O2 -fdump-tree-optimized" }
+ !
+ ! PR fortran/102891 - passing of inquiry ref of complex array to TRANSFER
+ 
+ program main
+   implicit none
+   integer, parameter :: dp = 8
+ 
+   type complex_wrap1
+      complex(dp) :: z(2)
+   end type complex_wrap1
+ 
+   type complex_wrap2
+      complex(dp), dimension(:), allocatable :: z
+   end type complex_wrap2
+ 
+   type(complex_wrap1) :: x = complex_wrap1([ (1, 2), (3, 4) ])
+   type(complex_wrap2) :: w
+ 
+   w%z = x%z
+ 
+   ! The following statements should get optimized away...
+   if (size (transfer ( x%z%re ,[1.0_dp])) /= 2) error stop 1
+   if (size (transfer ((x%z%re),[1.0_dp])) /= 2) error stop 2
+   if (size (transfer ([x%z%re],[1.0_dp])) /= 2) error stop 3
+   if (size (transfer ( x%z%im ,[1.0_dp])) /= 2) error stop 4
+   if (size (transfer ((x%z%im),[1.0_dp])) /= 2) error stop 5
+   if (size (transfer ([x%z%im],[1.0_dp])) /= 2) error stop 6
+ 
+   ! ... while the following may not:
+   if (any  (transfer ( x%z%re ,[1.0_dp])  /= x%z%re)) stop 7
+   if (any  (transfer ( x%z%im ,[1.0_dp])  /= x%z%im)) stop 8
+ 
+   if (size (transfer ( w%z%re ,[1.0_dp])) /= 2) stop 11
+   if (size (transfer ((w%z%re),[1.0_dp])) /= 2) stop 12
+   if (size (transfer ([w%z%re],[1.0_dp])) /= 2) stop 13
+   if (size (transfer ( w%z%im ,[1.0_dp])) /= 2) stop 14
+   if (size (transfer ((w%z%im),[1.0_dp])) /= 2) stop 15
+   if (size (transfer ([w%z%im],[1.0_dp])) /= 2) stop 16
+ 
+   if (any  (transfer ( w%z%re ,[1.0_dp])  /= x%z%re)) stop 17
+   if (any  (transfer ( w%z%im ,[1.0_dp])  /= x%z%im)) stop 18
+ 
+   deallocate (w%z)
+ end program main
+ 
+ ! { dg-final { scan-tree-dump-not "_gfortran_error_stop_numeric" "optimized" } }
diff -Nrcpad gcc-15-20250517/gcc/tree-sra.cc gcc-15-20250524/gcc/tree-sra.cc
*** gcc-15-20250517/gcc/tree-sra.cc	Sat May 17 22:32:21 2025
--- gcc-15-20250524/gcc/tree-sra.cc	Sat May 24 22:32:24 2025
*************** sra_modify_expr (tree *expr, bool write,
*** 4205,4212 ****
  	    }
  	  else
  	    {
! 	      gassign *stmt;
  
  	      if (access->grp_partial_lhs)
  		repl = force_gimple_operand_gsi (stmt_gsi, repl, true,
  						 NULL_TREE, true,
--- 4205,4214 ----
  	    }
  	  else
  	    {
! 	      if (TREE_READONLY (access->base))
! 		return false;
  
+ 	      gassign *stmt;
  	      if (access->grp_partial_lhs)
  		repl = force_gimple_operand_gsi (stmt_gsi, repl, true,
  						 NULL_TREE, true,
diff -Nrcpad gcc-15-20250517/libgomp/ChangeLog gcc-15-20250524/libgomp/ChangeLog
*** gcc-15-20250517/libgomp/ChangeLog	Sat May 17 22:32:37 2025
--- gcc-15-20250524/libgomp/ChangeLog	Sat May 24 22:32:26 2025
***************
*** 1,3 ****
--- 1,134 ----
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-05-15  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/alloc-comp-4.f90: New test.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-05-14  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* target.c (gomp_attach_pointer): Return bool; accept additional
+ 	bool to optionally silence the fatal pointee-not-found error.
+ 	(gomp_map_vars_internal): If the pointee could not be found,
+ 	check whether it was mapped as GOMP_MAP_ZERO_LEN_ARRAY_SECTION.
+ 	* libgomp.h (gomp_attach_pointer): Update prototype.
+ 	* oacc-mem.c (acc_attach_async, goacc_enter_data_internal): Update
+ 	calls.
+ 	* testsuite/libgomp.c/target-map-zero-sized.c: New test.
+ 	* testsuite/libgomp.c/target-map-zero-sized-2.c: New test.
+ 	* testsuite/libgomp.c/target-map-zero-sized-3.c: New test.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-05-09  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.c/interop-cuda-full.c: Use 'link' instead
+ 	of 'run' when the default device is "! offload_device_nvptx".
+ 	* testsuite/libgomp.c/interop-cuda-libonly.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-full.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-no-headers.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-nvidia-full.F90: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90: Likewise.
+ 	* testsuite/libgomp.c/interop-hip-amd-full.c: Use 'link' instead
+ 	of 'run' when the default device is "! offload_device_gcn".
+ 	* testsuite/libgomp.c/interop-hip-amd-no-hip-header.c: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-amd-full.F90: Likewise.
+ 	* testsuite/libgomp.fortran/interop-hip-amd-no-module.F90: Likewise.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-05-07  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/map-alloc-comp-9.f90: Process differently
+ 	when USE_USM_REQUIREMENT is set.
+ 	* testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90: New test.
+ 
+ 2025-05-19  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-05-05  Thomas Schwinge  <tschwinge@baylibre.com>
+ 
+ 	* testsuite/libgomp.c/interop-hsa.c: GCN offloading only.
+ 
+ 2025-05-19  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	Backported from master:
+ 	2025-05-01  Tobias Burnus  <tobias@codesourcery.com>
+ 
+ 	* testsuite/libgomp.fortran/allocate-8a.f90: New test.
+ 
+ 2025-05-19  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-04-25  Andrew Stubbs  <ams@baylibre.com>
+ 
+ 	* testsuite/libgomp.c/interop-hsa.c: New test.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-04-24  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/lib/libgomp.exp
+ 	(check_effective_target_gomp_hip_header_nvidia): Compile with
+ 	"-Wno-deprecated-declarations".
+ 	* testsuite/libgomp.c/interop-hip-nvidia-full.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hipblas-nvidia-full.c: Likewise.
+ 	* testsuite/libgomp.c/interop-hipblas.h: Add workarounds
+ 	when using the HIP headers with __HIP_PLATFORM_NVIDIA__.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-04-24  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/lib/libgomp.exp (check_effective_target_openacc_cublas,
+ 	check_effective_target_openacc_cudart): Update description as
+ 	the check requires more.
+ 	(check_effective_target_openacc_libcuda,
+ 	check_effective_target_openacc_libcublas,
+ 	check_effective_target_openacc_libcudart,
+ 	check_effective_target_gomp_hip_header_amd,
+ 	check_effective_target_gomp_hip_header_nvidia,
+ 	check_effective_target_gomp_hipfort_module,
+ 	check_effective_target_gomp_libamdhip64,
+ 	check_effective_target_gomp_libhipblas): New.
+ 	* testsuite/libgomp.c-c++-common/interop-2.c: New test.
+ 	* testsuite/libgomp.c/interop-cublas-full.c: New test.
+ 	* testsuite/libgomp.c/interop-cublas-libonly.c: New test.
+ 	* testsuite/libgomp.c/interop-cuda-full.c: New test.
+ 	* testsuite/libgomp.c/interop-cuda-libonly.c: New test.
+ 	* testsuite/libgomp.c/interop-hip-amd-full.c: New test.
+ 	* testsuite/libgomp.c/interop-hip-amd-no-hip-header.c: New test.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-full.c: New test.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-no-headers.c: New test.
+ 	* testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c: New test.
+ 	* testsuite/libgomp.c/interop-hip.h: New test.
+ 	* testsuite/libgomp.c/interop-hipblas-amd-full.c: New test.
+ 	* testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c: New test.
+ 	* testsuite/libgomp.c/interop-hipblas-nvidia-full.c: New test.
+ 	* testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c: New test.
+ 	* testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c: New test.
+ 	* testsuite/libgomp.c/interop-hipblas.h: New test.
+ 	* testsuite/libgomp.fortran/interop-hip-amd-full.F90: New test.
+ 	* testsuite/libgomp.fortran/interop-hip-amd-no-module.F90: New test.
+ 	* testsuite/libgomp.fortran/interop-hip-nvidia-full.F90: New test.
+ 	* testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90: New test.
+ 	* testsuite/libgomp.fortran/interop-hip.h: New test.
+ 
+ 2025-05-19  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	Backported from master:
+ 	2025-04-23  Tobias Burnus  <tburnus@baylibre.com>
+ 
+ 	* testsuite/libgomp.fortran/target-enter-data-8.f90: New test.
+ 
  2025-05-06  Tejas Belagod  <tejas.belagod@arm.com>
  
  	* testsuite/libgomp.c-target/aarch64/udr-sve.c: Fix test.
diff -Nrcpad gcc-15-20250517/libgomp/libgomp.h gcc-15-20250524/libgomp/libgomp.h
*** gcc-15-20250517/libgomp/libgomp.h	Sat May 17 22:32:37 2025
--- gcc-15-20250524/libgomp/libgomp.h	Sat May 24 22:32:26 2025
*************** extern void gomp_copy_dev2host (struct g
*** 1468,1477 ****
  				struct goacc_asyncqueue *, void *, const void *,
  				size_t);
  extern uintptr_t gomp_map_val (struct target_mem_desc *, void **, size_t);
! extern void gomp_attach_pointer (struct gomp_device_descr *,
  				 struct goacc_asyncqueue *, splay_tree,
  				 splay_tree_key, uintptr_t, size_t,
! 				 struct gomp_coalesce_buf *, bool);
  extern void gomp_detach_pointer (struct gomp_device_descr *,
  				 struct goacc_asyncqueue *, splay_tree_key,
  				 uintptr_t, bool, struct gomp_coalesce_buf *);
--- 1468,1477 ----
  				struct goacc_asyncqueue *, void *, const void *,
  				size_t);
  extern uintptr_t gomp_map_val (struct target_mem_desc *, void **, size_t);
! extern bool gomp_attach_pointer (struct gomp_device_descr *,
  				 struct goacc_asyncqueue *, splay_tree,
  				 splay_tree_key, uintptr_t, size_t,
! 				 struct gomp_coalesce_buf *, bool, bool);
  extern void gomp_detach_pointer (struct gomp_device_descr *,
  				 struct goacc_asyncqueue *, splay_tree_key,
  				 uintptr_t, bool, struct gomp_coalesce_buf *);
diff -Nrcpad gcc-15-20250517/libgomp/oacc-mem.c gcc-15-20250524/libgomp/oacc-mem.c
*** gcc-15-20250517/libgomp/oacc-mem.c	Sat May 17 22:32:37 2025
--- gcc-15-20250524/libgomp/oacc-mem.c	Sat May 24 22:32:26 2025
*************** acc_attach_async (void **hostaddr, int a
*** 951,957 ****
      }
  
    gomp_attach_pointer (acc_dev, aq, &acc_dev->mem_map, n, (uintptr_t) hostaddr,
! 		       0, NULL, false);
  
    gomp_mutex_unlock (&acc_dev->lock);
  }
--- 951,957 ----
      }
  
    gomp_attach_pointer (acc_dev, aq, &acc_dev->mem_map, n, (uintptr_t) hostaddr,
! 		       0, NULL, false, true);
  
    gomp_mutex_unlock (&acc_dev->lock);
  }
*************** goacc_enter_data_internal (struct gomp_d
*** 1158,1164 ****
  	  if ((kinds[i] & 0xff) == GOMP_MAP_ATTACH)
  	    {
  	      gomp_attach_pointer (acc_dev, aq, &acc_dev->mem_map, n,
! 				   (uintptr_t) h, s, NULL, false);
  	      /* OpenACC 'attach'/'detach' doesn't affect structured/dynamic
  		 reference counts ('n->refcount', 'n->dynamic_refcount').  */
  	    }
--- 1158,1164 ----
  	  if ((kinds[i] & 0xff) == GOMP_MAP_ATTACH)
  	    {
  	      gomp_attach_pointer (acc_dev, aq, &acc_dev->mem_map, n,
! 				   (uintptr_t) h, s, NULL, false, true);
  	      /* OpenACC 'attach'/'detach' doesn't affect structured/dynamic
  		 reference counts ('n->refcount', 'n->dynamic_refcount').  */
  	    }
*************** goacc_enter_data_internal (struct gomp_d
*** 1176,1182 ****
  		  = lookup_host (acc_dev, hostaddrs[j], sizeof (void *));
  		gomp_attach_pointer (acc_dev, aq, &acc_dev->mem_map, m,
  				     (uintptr_t) hostaddrs[j], sizes[j], NULL,
! 				     false);
  	      }
  
  	  bool processed = false;
--- 1176,1182 ----
  		  = lookup_host (acc_dev, hostaddrs[j], sizeof (void *));
  		gomp_attach_pointer (acc_dev, aq, &acc_dev->mem_map, m,
  				     (uintptr_t) hostaddrs[j], sizes[j], NULL,
! 				     false, true);
  	      }
  
  	  bool processed = false;
diff -Nrcpad gcc-15-20250517/libgomp/target.c gcc-15-20250524/libgomp/target.c
*** gcc-15-20250517/libgomp/target.c	Sat May 17 22:32:37 2025
--- gcc-15-20250524/libgomp/target.c	Sat May 24 22:32:26 2025
*************** gomp_map_fields_existing (struct target_
*** 800,811 ****
  	      (void *) cur_node.host_end);
  }
  
! attribute_hidden void
  gomp_attach_pointer (struct gomp_device_descr *devicep,
  		     struct goacc_asyncqueue *aq, splay_tree mem_map,
  		     splay_tree_key n, uintptr_t attach_to, size_t bias,
  		     struct gomp_coalesce_buf *cbufp,
! 		     bool allow_zero_length_array_sections)
  {
    struct splay_tree_key_s s;
    size_t size, idx;
--- 800,821 ----
  	      (void *) cur_node.host_end);
  }
  
! /* Update the devptr by setting it to the device address of the host pointee
!    'attach_to'; devptr is obtained from the splay_tree_key n.
!    When the pointer is already attached or the host pointee is either
!    NULL or in memory map, this function returns true.
!    Otherwise, the device pointer is set to point to the host pointee and:
!    - If allow_zero_length_array_sections is set, true is returned.
!    - Else, if fail_if_not_found is set, a fatal error is issued.
!    - Otherwise, false is returned.  */
! 
! attribute_hidden bool
  gomp_attach_pointer (struct gomp_device_descr *devicep,
  		     struct goacc_asyncqueue *aq, splay_tree mem_map,
  		     splay_tree_key n, uintptr_t attach_to, size_t bias,
  		     struct gomp_coalesce_buf *cbufp,
! 		     bool allow_zero_length_array_sections,
! 		     bool fail_if_not_found)
  {
    struct splay_tree_key_s s;
    size_t size, idx;
*************** gomp_attach_pointer (struct gomp_device_
*** 860,866 ****
  	  gomp_copy_host2dev (devicep, aq, (void *) devptr, (void *) &data,
  			      sizeof (void *), true, cbufp);
  
! 	  return;
  	}
  
        s.host_start = target + bias;
--- 870,876 ----
  	  gomp_copy_host2dev (devicep, aq, (void *) devptr, (void *) &data,
  			      sizeof (void *), true, cbufp);
  
! 	  return true;
  	}
  
        s.host_start = target + bias;
*************** gomp_attach_pointer (struct gomp_device_
*** 869,883 ****
  
        if (!tn)
  	{
! 	  if (allow_zero_length_array_sections)
! 	    /* When allowing attachment to zero-length array sections, we
! 	       copy the host pointer when the target region is not mapped.  */
! 	    data = target;
! 	  else
  	    {
  	      gomp_mutex_unlock (&devicep->lock);
  	      gomp_fatal ("pointer target not mapped for attach");
  	    }
  	}
        else
  	data = tn->tgt->tgt_start + tn->tgt_offset + target - tn->host_start;
--- 879,894 ----
  
        if (!tn)
  	{
! 	  /* We copy the host pointer when the target region is not mapped;
! 	     for allow_zero_length_array_sections, that's permitted.
! 	     Otherwise, it depends on the context. Return false in that
! 	     case, unless fail_if_not_found.  */
! 	  if (!allow_zero_length_array_sections && fail_if_not_found)
  	    {
  	      gomp_mutex_unlock (&devicep->lock);
  	      gomp_fatal ("pointer target not mapped for attach");
  	    }
+ 	  data = target;
  	}
        else
  	data = tn->tgt->tgt_start + tn->tgt_offset + target - tn->host_start;
*************** gomp_attach_pointer (struct gomp_device_
*** 889,898 ****
--- 900,912 ----
  
        gomp_copy_host2dev (devicep, aq, (void *) devptr, (void *) &data,
  			  sizeof (void *), true, cbufp);
+       if (!tn && !allow_zero_length_array_sections)
+ 	return false;
      }
    else
      gomp_debug (1, "%s: attach count for %p -> %u\n", __FUNCTION__,
  		(void *) attach_to, (int) n->aux->attach_count[idx]);
+   return true;
  }
  
  attribute_hidden void
*************** gomp_map_vars_internal (struct gomp_devi
*** 1587,1595 ****
  		      bool zlas
  			= ((kind & typemask)
  			   == GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION);
! 		      gomp_attach_pointer (devicep, aq, mem_map, n,
! 					   (uintptr_t) hostaddrs[i], sizes[i],
! 					   cbufp, zlas);
  		    }
  		  else if ((pragma_kind & GOMP_MAP_VARS_OPENACC) != 0)
  		    {
--- 1601,1637 ----
  		      bool zlas
  			= ((kind & typemask)
  			   == GOMP_MAP_ATTACH_ZERO_LENGTH_ARRAY_SECTION);
! 		      /* For 'target enter data', the map clauses are split;
! 			 however, for more complex code with struct and
! 			 pointer members, the mapping and the attach can end up
! 			 in different sets; or the wrong mapping with the
! 			 attach. As there is no way to know whether a size
! 			 zero like  'var->ptr[i][:0]' happend in the same
! 			 directive or not, the not-attached check is now
! 			 fully silenced for 'enter data'.  */
! 		      if (openmp_p && (pragma_kind & GOMP_MAP_VARS_ENTER_DATA))
! 			zlas = true;
! 		      if (!gomp_attach_pointer (devicep, aq, mem_map, n,
! 						(uintptr_t) hostaddrs[i], sizes[i],
! 						cbufp, zlas, !openmp_p))
! 			{
! 			  /* Pointee not found; that's an error except for
! 			     map(var[:n]) with n == 0; the compiler adds a
! 			     runtime condition such that for those the kind is
! 			     always GOMP_MAP_ZERO_LEN_ARRAY_SECTION.  */
! 			  for (j = i; j > 0; j--)
! 			    if (*(void**) hostaddrs[i] == hostaddrs[j-1] - sizes[i]
! 				&& sizes[j-1] == 0
! 				&& (GOMP_MAP_ZERO_LEN_ARRAY_SECTION
! 				    == (get_kind (short_mapkind, kinds, j-1)
! 					& typemask)))
! 			      break;
! 			  if (j == 0)
! 			    {
! 			      gomp_mutex_unlock (&devicep->lock);
! 			      gomp_fatal ("pointer target not mapped for attach");
! 			    }
! 			}
  		    }
  		  else if ((pragma_kind & GOMP_MAP_VARS_OPENACC) != 0)
  		    {
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/lib/libgomp.exp gcc-15-20250524/libgomp/testsuite/lib/libgomp.exp
*** gcc-15-20250517/libgomp/testsuite/lib/libgomp.exp	Sat May 17 22:32:37 2025
--- gcc-15-20250524/libgomp/testsuite/lib/libgomp.exp	Sat May 24 22:32:26 2025
*************** int main() {
*** 553,559 ****
  } } "-lcuda" ]
  }
  
! # Return 1 if cublas_v2.h and -lcublas are available.
  
  proc check_effective_target_openacc_cublas { } {
      return [check_no_compiler_messages openacc_cublas executable {
--- 553,575 ----
  } } "-lcuda" ]
  }
  
! # Return 1 if -lcuda is available (header not required).
! 
! proc check_effective_target_openacc_libcuda { } {
!     return [check_no_compiler_messages openacc_libcuda executable {
! typedef enum { CUDA_SUCCESS } CUresult;
! typedef int CUdevice;
! CUresult cuDeviceGet (CUdevice *, int);
! int main() {
!     CUdevice dev;
!     CUresult r = cuDeviceGet (&dev, 0);
!     if (r != CUDA_SUCCESS)
! 	return 1;
!     return 0;
! } } "-lcuda" ]
! }
! 
! # Return 1 if cublas_v2.h, cuda.h, -lcublas and -lcuda are available.
  
  proc check_effective_target_openacc_cublas { } {
      return [check_no_compiler_messages openacc_cublas executable {
*************** int main() {
*** 573,579 ****
  } } "-lcuda -lcublas" ]
  }
  
! # Return 1 if cuda_runtime_api.h and -lcudart are available.
  
  proc check_effective_target_openacc_cudart { } {
      return [check_no_compiler_messages openacc_cudart executable {
--- 589,613 ----
  } } "-lcuda -lcublas" ]
  }
  
! # Return 1 if -lcublas is available header not required).
! 
! proc check_effective_target_openacc_libcublas { } {
!     return [check_no_compiler_messages openacc_libcublas executable {
! typedef enum { CUBLAS_STATUS_SUCCESS } cublasStatus_t;
! typedef struct cublasContext* cublasHandle_t;
! #define cublasCreate cublasCreate_v2
! cublasStatus_t cublasCreate_v2 (cublasHandle_t *);
! int main() {
!     cublasStatus_t s;
!     cublasHandle_t h;
!     s = cublasCreate (&h);
!     if (s != CUBLAS_STATUS_SUCCESS)
! 	return 1;
!     return 0;
! } } "-lcublas" ]
! }
! 
! # Return 1 if cuda_runtime_api.h, cuda.h, -lcuda and -lcudart are available.
  
  proc check_effective_target_openacc_cudart { } {
      return [check_no_compiler_messages openacc_cudart executable {
*************** int main() {
*** 592,594 ****
--- 626,723 ----
      return 0;
  } } "-lcuda -lcudart" ]
  }
+ 
+ # Return 1 if -lcudart is available (no header required).
+ 
+ proc check_effective_target_openacc_libcudart { } {
+     return [check_no_compiler_messages openacc_libcudart executable {
+ typedef int cudaError_t;
+ cudaError_t cudaGetDevice(int *);
+ enum { cudaSuccess };
+ int main() {
+     cudaError_t e;
+     int devn;
+     e = cudaGetDevice (&devn);
+     if (e != cudaSuccess)
+ 	return 1;
+     return 0;
+ } } "-lcudart" ]
+ }
+ 
+ # Return 1 if hip.h is available (no link check; AMD platform).
+ 
+ proc check_effective_target_gomp_hip_header_amd { } {
+     return [check_no_compiler_messages gomp_hip_header_amd assembly {
+ #define __HIP_PLATFORM_AMD__
+ #include <hip/hip_runtime_api.h>
+ int main() {
+     hipDevice_t dev;
+     hipError_t r = hipDeviceGet (&dev, 0);
+     if (r != hipSuccess)
+ 	return 1;
+     return 0;
+ } }]
+ }
+ 
+ # Return 1 if hip.h is available (no link check; Nvidia/CUDA platform).
+ 
+ proc check_effective_target_gomp_hip_header_nvidia { } {
+     return [check_no_compiler_messages gomp_hip_header_nvidia assembly {
+ #define __HIP_PLATFORM_NVIDIA__
+ #include <hip/hip_runtime_api.h>
+ int main() {
+     hipDevice_t dev;
+     hipError_t r = hipDeviceGet (&dev, 0);
+     if (r != hipSuccess)
+ 	return 1;
+     return 0;
+ } } "-Wno-deprecated-declarations"]
+ }
+ 
+ # Return 1 if the Fortran hipfort module is available (no link check)
+ 
+ proc check_effective_target_gomp_hipfort_module { } {
+     return [check_no_compiler_messages gomp_hipfort_module assembly {
+ ! Fortran
+ use hipfort
+ implicit none
+ integer(kind(hipSuccess)) :: r
+ integer(c_int) :: dev
+ r = hipDeviceGet (dev, 0)
+ if (r /= hipSuccess) error stop
+ end
+ }]
+ }
+ 
+ # Return 1 if AMD HIP's -lamdhip64 is available (no header required).
+ 
+ proc check_effective_target_gomp_libamdhip64 { } {
+     return [check_no_compiler_messages gomp_libamdhip64 executable {
+ typedef int hipError_t;
+ typedef int hipDevice_t;
+ enum { hipSuccess = 0 };
+ hipError_t hipDeviceGet(hipDevice_t*, int);
+ int main() {
+     hipDevice_t dev;
+     hipError_t r = hipDeviceGet (&dev, 0);
+     if (r != hipSuccess)
+ 	return 1;
+     return 0;
+ } } "-lamdhip64" ]
+ }
+ 
+ # Return 1 if AMD HIP's -lamdhip64 is available (no header required).
+ 
+ proc check_effective_target_gomp_libhipblas { } {
+     return [check_no_compiler_messages gomp_libhipblas executable {
+ typedef enum { HIPBLAS_STATUS_SUCCESS = 0 } hipblasStatus_t;
+ typedef void* hipblasHandle_t;
+ hipblasStatus_t hipblasCreate (hipblasHandle_t*);
+ int main() {
+     hipblasHandle_t handle;
+     hipblasStatus_t stat = hipblasCreate (&handle);
+     if (stat != HIPBLAS_STATUS_SUCCESS)
+ 	return 1;
+     return 0;
+ } } "-lhipblas" ]
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cublas-full.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cublas-full.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cublas-full.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cublas-full.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,176 ----
+ /* { dg-require-effective-target openacc_cublas } */
+ /* { dg-additional-options "-lcublas" } */
+ 
+ /* NOTE: This file is also included by libgomp.c-c++-common/interop-cudablas-libonly.c
+    to test the fallback version.  */
+ 
+ /* Check whether cuBlas' daxpy works with an interop object.
+      daxpy(N, DA, DX, INCX, DY, INCY)
+    calculates (for DX = DY = 1):
+      DY(1:N) =  DY(1:N) + DA * DX(1:N)
+    and otherwise N array elements, taking every INCX-th or INCY-th one, repectively.
+ 
+ Based on the interop example in OpenMP's example document  */
+ 
+ /* Minimal check whether CUDA works - by checking whether the API routines
+    seem to work.  This includes a fallback if the header is not
+    available.  */
+ 
+ #include <assert.h>
+ #include <omp.h>
+ #include "../libgomp.c-c++-common/on_device_arch.h"
+ 
+ 
+ #if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && __has_include(<cublas_v2.h>) && !defined(USE_CUDA_FALLBACK_HEADER)
+   #include <cuda.h>
+   #include <cudaTypedefs.h>
+   #include <cuda_runtime.h>
+   #include <cublas_v2.h>
+ 
+ #else
+   /* Add a poor man's fallback declaration.  */
+   #if USE_CUDA_FALLBACK_HEADER
+     // Don't warn.
+   #elif !__has_include(<cuda.h>)
+     #warning "Using GCC's cuda.h as fallback for cuda.h"
+   #elif !__has_include(<cudaTypedefs.h>)
+     #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h"
+   #elif !__has_include(<cuda_runtime.h>)
+     #warning "Using GCC's cuda.h as fallback for cuda_runtime.h"
+   #else
+     #warning "Using GCC's cuda.h as fallback for cublas_v2.h"
+   #endif
+   #include "../../../include/cuda/cuda.h"
+ 
+   typedef enum {
+     CUBLAS_STATUS_SUCCESS = 0,
+   } cublasStatus_t;
+ 
+   typedef CUstream cudaStream_t;
+   typedef struct cublasContext* cublasHandle_t;
+ 
+   #define cublasCreate cublasCreate_v2
+   cublasStatus_t cublasCreate_v2 (cublasHandle_t *);
+ 
+   #define cublasSetStream cublasSetStream_v2
+   cublasStatus_t cublasSetStream_v2 (cublasHandle_t, cudaStream_t);
+ 
+   #define cublasDaxpy cublasDaxpy_v2
+   cublasStatus_t cublasDaxpy_v2(cublasHandle_t, int, const double*, const double*, int, double*, int);
+ #endif
+ 
+ static int used_variant = 0;
+ 
+ void
+ run_cuBlasdaxpy (int n, double da, const double *dx, int incx, double *dy, int incy, omp_interop_t obj)
+ {
+   used_variant = 1;
+ 
+   omp_interop_rc_t res;
+   cublasStatus_t stat;
+ 
+   omp_intptr_t fr = omp_get_interop_int(obj, omp_ipr_fr_id, &res);
+   assert (res == omp_irc_success && fr == omp_ifr_cuda);
+ 
+   cudaStream_t stream = (cudaStream_t) omp_get_interop_ptr (obj, omp_ipr_targetsync, &res);
+   assert (res == omp_irc_success);
+ 
+   cublasHandle_t handle;
+   stat = cublasCreate (&handle);
+   assert (stat == CUBLAS_STATUS_SUCCESS);
+ 
+   stat = cublasSetStream (handle, stream);
+   assert (stat == CUBLAS_STATUS_SUCCESS);
+ 
+   /* 'da' can be in host or device space, 'dx' and 'dy' must be in device space.  */
+   stat = cublasDaxpy (handle, n, &da, dx, 1, dy, 1) ;
+   assert (stat == CUBLAS_STATUS_SUCCESS);
+ }
+ 
+ 
+ #pragma omp declare variant(run_cuBlasdaxpy) \
+                        match(construct={dispatch}, target_device={kind(nohost), arch("nvptx")}) \
+                        adjust_args(need_device_ptr : dx, dy) \
+                        append_args(interop(targetsync, prefer_type("cuda")))
+ 
+ void
+ run_daxpy (int n, double da, const double *dx, int incx, double *dy, int incy)
+ {
+   used_variant = 2;
+ 
+   if (incx == 1 && incy == 1)
+     #pragma omp simd
+     for (int i = 0; i < n; i++)
+       dy[i] += da * dx[i];
+   else
+     {
+       int ix = 0;
+       int iy = 0;
+       for (int i = 0; i < n; i++)
+ 	{
+ 	  dy[iy] += da * dx[ix];
+ 	  ix += incx;
+ 	  iy += incy;
+ 	}
+     }
+ }
+ 
+ 
+ void
+ run_test (int dev)
+ {
+   constexpr int N = 1024;
+ 
+   // A = {1,2,...,N}
+   // B = {-1, -2, ..., N}
+   // B' = daxpy (N, 3, A, incx=1, B, incy=1)
+   //    = B + 3*A
+   // -> B' = {0, 2, 4, 6, ... }
+ 
+   double A[N], B[N];
+   double factor = 3.0;
+   for (int i = 0; i < N; i++)
+     {
+       A[i] = i;
+       B[i] = -i;
+     }
+ 
+   if (dev != omp_initial_device && dev != omp_get_num_devices ())
+     {
+       #pragma omp target enter data device(dev) map(A, B)
+     }
+ 
+   used_variant = 99;
+   #pragma omp dispatch device(dev)
+     run_daxpy (N, factor, A, 1, B, 1);  
+ 
+   if (dev != omp_initial_device && dev != omp_get_num_devices ())
+     {
+       #pragma omp target exit data device(dev) map(release: A) map(from: B)
+ 
+       int tmp = omp_get_default_device ();
+       omp_set_default_device (dev);
+       if (on_device_arch_nvptx ())
+ 	assert (used_variant == 1);
+       else
+ 	assert (used_variant == 2);
+       omp_set_default_device (tmp);
+     }
+   else
+     assert (used_variant == 2);
+ 
+   for (int i = 0; i < N; i++)
+     assert (B[i] == 2*i);
+ }
+ 
+ int   
+ main () 
+ {   
+   int ndev = omp_get_num_devices ();
+ 
+   for (int dev = 0; dev <= ndev; dev++)
+     run_test (dev);
+   run_test (omp_initial_device);  
+ 
+   return 0;
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cublas-libonly.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-require-effective-target openacc_libcublas } */
+ /* { dg-additional-options "-lcublas" } */
+ 
+ /* Same as interop-cudablas-full.c, but also works if the header is not available. */
+ 
+ #define USE_CUDA_FALLBACK_HEADER 1
+ #include "interop-cublas-full.c"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cuda-full.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cuda-full.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cuda-full.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cuda-full.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,162 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
+ /* { dg-require-effective-target openacc_cuda } */
+ /* { dg-require-effective-target openacc_cudart } */
+ /* { dg-additional-options "-lcuda -lcudart" } */
+ 
+ /* NOTE: This file is also included by libgomp.c-c++-common/interop-cuda-libonly.c
+    to test the fallback version, which defines USE_CUDA_FALLBACK_HEADER.  */
+ 
+ /* Minimal check whether CUDA works - by checking whether the API routines
+    seem to work.  This includes a fallback if the header is not
+    available.  */
+ 
+ #include <assert.h>
+ #include <omp.h>
+ 
+ #if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && !defined(USE_CUDA_FALLBACK_HEADER)
+   #include <cuda.h>
+   #include <cudaTypedefs.h>
+   #include <cuda_runtime.h>
+ 
+ #else
+   /* Add a poor man's fallback declaration.  */
+   #if USE_CUDA_FALLBACK_HEADER
+     // Don't warn.
+   #elif !__has_include(<cuda.h>)
+     #warning "Using GCC's cuda.h as fallback for cuda.h"
+   #elif !__has_include(<cudaTypedefs.h>)
+     #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h"
+   #else
+     #warning "Using GCC's cuda.h as fallback for cuda_runtime.h"
+   #endif
+   #include "../../../include/cuda/cuda.h"
+ 
+   typedef int cudaError_t;
+   typedef CUstream cudaStream_t;
+   enum {
+     cudaSuccess = 0
+   };
+ 
+   enum cudaDeviceAttr {
+     cudaDevAttrClockRate = 13,
+     cudaDevAttrMaxGridDimX = 5
+   };
+ 
+   cudaError_t cudaDeviceGetAttribute (int *, enum cudaDeviceAttr, int);
+   cudaError_t cudaStreamQuery(cudaStream_t);
+   CUresult cuCtxGetApiVersion(CUcontext, unsigned int *);
+   CUresult cuStreamGetCtx (CUstream, CUcontext *);
+ #endif
+ 
+ int
+ main ()
+ {
+   int ivar;
+   unsigned uvar;
+   omp_interop_rc_t res;
+   omp_interop_t obj_cuda = omp_interop_none;
+   omp_interop_t obj_cuda_driver = omp_interop_none;
+   cudaError_t cuda_err;
+   CUresult cu_err;
+ 
+   #pragma omp interop init(target, targetsync, prefer_type("cuda") : obj_cuda) \
+ 		      init(target, targetsync, prefer_type("cuda_driver") : obj_cuda_driver) \
+ 
+   omp_interop_fr_t fr = (omp_interop_fr_t) omp_get_interop_int (obj_cuda, omp_ipr_fr_id, &res);
+   assert (res == omp_irc_success);
+   assert (fr == omp_ifr_cuda);
+ 
+   fr = (omp_interop_fr_t) omp_get_interop_int (obj_cuda_driver, omp_ipr_fr_id, &res);
+   assert (res == omp_irc_success);
+   assert (fr == omp_ifr_cuda_driver);
+ 
+   ivar = (int) omp_get_interop_int (obj_cuda, omp_ipr_vendor, &res);
+   assert (res == omp_irc_success);
+   assert (ivar == 11);
+ 
+   ivar = (int) omp_get_interop_int (obj_cuda_driver, omp_ipr_vendor, &res);
+   assert (res == omp_irc_success);
+   assert (ivar == 11);
+ 
+ 
+   /* Check whether the omp_ipr_device -> cudaDevice_t yields a valid device.  */
+ 
+   CUdevice cu_dev = (int) omp_get_interop_int (obj_cuda_driver, omp_ipr_device, &res);
+   assert (res == omp_irc_success);
+ 
+   /* Assume a clock size is available and > 1 GHz; value is in kHz.  */
+   cu_err = cuDeviceGetAttribute (&ivar, cudaDevAttrClockRate, cu_dev);
+   assert (cu_err == CUDA_SUCCESS);
+   assert (ivar > 1000000 /* kHz */);
+ 
+   /* Assume that the MaxGridDimX is available and > 1024.  */
+   cu_err = cuDeviceGetAttribute (&ivar, cudaDevAttrMaxGridDimX, cu_dev);
+   assert (cu_err == CUDA_SUCCESS);
+   assert (ivar > 1024);
+ 
+   int cuda_dev = (int) omp_get_interop_int (obj_cuda, omp_ipr_device, &res);
+   assert (res == omp_irc_success);
+   assert (cuda_dev == (CUdevice) cu_dev); // Assume they are the same ...
+ 
+   /* Assume a clock size is available and > 1 GHz; value is in kHz.  */
+   cuda_err = cudaDeviceGetAttribute (&ivar, cudaDevAttrClockRate, cuda_dev);
+   assert (cuda_err == cudaSuccess);
+   assert (ivar > 1000000 /* kHz */);
+ 
+   /* Assume that the MaxGridDimX is available and > 1024.  */
+   cuda_err = cudaDeviceGetAttribute (&ivar, cudaDevAttrMaxGridDimX, cuda_dev);
+   assert (cuda_err == cudaSuccess);
+   assert (ivar > 1024);
+ 
+ 
+ 
+ 
+   /* Check whether the omp_ipr_device_context -> CUcontext yields a context.  */
+ 
+   CUcontext cu_ctx = (CUcontext) omp_get_interop_ptr (obj_cuda_driver, omp_ipr_device_context, &res);
+   assert (res == omp_irc_success);
+ 
+   /* Assume API Version > 0 for Nvidia, cudaErrorNotSupported for AMD.  */
+   uvar = 99;
+   cu_err = cuCtxGetApiVersion (cu_ctx, &uvar);
+   assert (cu_err == CUDA_SUCCESS);
+   assert (uvar > 0);
+ 
+ 
+   /* Check whether the omp_ipr_targetsync -> cudaStream_t yields a stream.  */
+ 
+   cudaStream_t cuda_sm = (cudaStream_t) omp_get_interop_ptr (obj_cuda, omp_ipr_targetsync, &res);
+   assert (res == omp_irc_success);
+ 
+   CUstream cu_sm = (cudaStream_t) omp_get_interop_ptr (obj_cuda_driver, omp_ipr_targetsync, &res);
+   assert (res == omp_irc_success);
+ 
+   assert ((void*) cu_sm != (void*) cuda_sm); // Type compatible but should have created two streams
+ 
+   int dev_stream = 99;
+ #if CUDA_VERSION >= 12080
+   cuda_err = cudaStreamGetDevice (cuda_sm, &dev_stream);
+   assert (cuda_err == cudaSuccess);
+ #else
+   cu_err = cuStreamGetCtx (cu_sm, &cu_ctx) != CUDA_SUCCESS;
+   if (cu_err == CUDA_SUCCESS)
+     cuda_err = cuCtxPushCurrent (cu_ctx) != CUDA_SUCCESS;
+   if (cu_err == CUDA_SUCCESS)
+     cuda_err = cuCtxGetDevice (&dev_stream) != CUDA_SUCCESS;
+   if (cu_err == CUDA_SUCCESS)
+     cu_err = cuCtxPopCurrent (&cu_ctx) != CUDA_SUCCESS;
+   assert (cu_err == CUDA_SUCCESS);
+ #endif
+   assert (dev_stream == cuda_dev);
+ 
+   /* All jobs should have been completed (as there were none none)  */
+   cuda_err = cudaStreamQuery (cuda_sm);
+   assert (cuda_err == cudaSuccess);
+ 
+   cu_err = cuStreamQuery (cu_sm);
+   assert (cu_err == CUDA_SUCCESS);
+ 
+   #pragma omp interop destroy(obj_cuda, obj_cuda_driver)
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-cuda-libonly.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
+ /* { dg-require-effective-target openacc_libcudart } */
+ /* { dg-require-effective-target openacc_libcuda } */
+ /* { dg-additional-options "-lcuda -lcudart" } */
+ 
+ /* Same as interop-cuda-full.c, but also works if the header is not available. */
+ 
+ #define USE_CUDA_FALLBACK_HEADER 1
+ #include "interop-cuda-full.c"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-amd-full.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,10 ----
+ /* { dg-do run { target { offload_device_gcn } } } */
+ /* { dg-do link { target { ! offload_device_gcn } } } */
+ 
+ /* { dg-require-effective-target gomp_hip_header_amd } */
+ /* { dg-require-effective-target gomp_libamdhip64 } */
+ /* { dg-additional-options "-lamdhip64" } */
+ 
+ #define __HIP_PLATFORM_AMD__ 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-amd-no-hip-header.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do run { target { offload_device_gcn } } } */
+ /* { dg-do link { target { ! offload_device_gcn } } } */
+ 
+ /* { dg-require-effective-target gomp_libamdhip64 } */
+ /* { dg-additional-options "-lamdhip64" } */
+ 
+ #define __HIP_PLATFORM_AMD__ 1
+ 
+ #define USE_HIP_FALLBACK_HEADER 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-nvidia-full.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,11 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
+ /* { dg-require-effective-target openacc_cudart } */
+ /* { dg-require-effective-target openacc_cuda } */
+ /* { dg-require-effective-target gomp_hip_header_nvidia } */
+ /* { dg-additional-options "-lcuda -lcudart -Wno-deprecated-declarations" } */
+ 
+ #define __HIP_PLATFORM_NVIDIA__ 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-headers.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,13 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
+ /* { dg-require-effective-target openacc_libcudart } */
+ /* { dg-require-effective-target openacc_libcuda } */
+ /* { dg-additional-options "-lcuda -lcudart" } */
+ 
+ #define __HIP_PLATFORM_NVIDIA__ 1
+ 
+ #define USE_HIP_FALLBACK_HEADER 1
+ #define USE_CUDA_FALLBACK_HEADER 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip-nvidia-no-hip-header.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,12 ----
+ /* { dg-do run { target { offload_device_nvptx } } } */
+ /* { dg-do link { target { ! offload_device_nvptx } } } */
+ 
+ /* { dg-require-effective-target openacc_cudart } */
+ /* { dg-require-effective-target openacc_cuda } */
+ /* { dg-additional-options "-lcuda -lcudart" } */
+ 
+ #define __HIP_PLATFORM_NVIDIA__ 1
+ 
+ #define USE_HIP_FALLBACK_HEADER 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip.h gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip.h
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hip.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hip.h	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,234 ----
+ /* Minimal check whether HIP works - by checking whether the API routines
+    seem to work.  This includes various fallbacks if the header is not
+    available.  */
+ 
+ #include <assert.h>
+ #include <omp.h>
+ 
+ #if !defined(__HIP_PLATFORM_AMD__) && !defined(__HIP_PLATFORM_NVIDIA__)
+   #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined"
+ #endif
+ 
+ #if defined(__HIP_PLATFORM_AMD__) && defined(__HIP_PLATFORM_NVIDIA__)
+   #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined"
+ #endif
+ 
+ #if __has_include(<hip/hip_runtime_api.h>) && !defined(USE_HIP_FALLBACK_HEADER)
+   #include <hip/hip_runtime_api.h>
+ 
+ #elif defined(__HIP_PLATFORM_AMD__)
+   /* Add a poor man's fallback declaration.  */
+   #if !defined(USE_HIP_FALLBACK_HEADER)
+     #warning "Using fallback declaration for <hip/hip_runtime_api.h> for __HIP_PLATFORM_AMD__"
+   #endif
+ 
+   typedef struct ihipStream_t* hipStream_t;
+   typedef struct ihipCtx_t* hipCtx_t;
+   typedef int hipError_t;
+   typedef int hipDevice_t;
+   enum {
+     hipSuccess = 0,
+     hipErrorNotSupported = 801
+   };
+ 
+   typedef enum hipDeviceAttribute_t {
+     hipDeviceAttributeClockRate = 5,
+     hipDeviceAttributeMaxGridDimX = 29
+   } hipDeviceAttribute_t;
+ 
+   hipError_t hipDeviceGetAttribute (int *, hipDeviceAttribute_t, hipDevice_t);
+   hipError_t hipCtxGetApiVersion (hipCtx_t, int *);
+   hipError_t hipStreamGetDevice (hipStream_t, hipDevice_t *);
+   hipError_t hipStreamQuery (hipStream_t);
+ 
+ #elif defined(__HIP_PLATFORM_NVIDIA__)
+   /* Add a poor man's fallback declaration.  */
+   #if !defined(USE_HIP_FALLBACK_HEADER)
+     #warning "Using fallback declaration for <hip/hip_runtime_api.h> for __HIP_PLATFORM_NVIDIA__"
+   #endif
+ 
+   #if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && !defined(USE_CUDA_FALLBACK_HEADER)
+     #include <cuda.h>
+     #include <cudaTypedefs.h>
+     #include <cuda_runtime.h>
+   #else
+     #if defined(USE_CUDA_FALLBACK_HEADER)
+        // no warning
+     #elif !__has_include(<cuda.h>)
+       #warning "Using GCC's cuda.h as fallback for cuda.h"
+     #elif !__has_include(<cudaTypedefs.h>)
+       #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h"
+     #else
+       #warning "Using GCC's cuda.h as fallback for cuda_runtime.h"
+     #endif
+ 
+     #include "../../../include/cuda/cuda.h"
+ 
+     typedef int cudaError_t;
+     enum {
+       cudaSuccess = 0
+     };
+ 
+     enum cudaDeviceAttr {
+       cudaDevAttrClockRate = 13,
+       cudaDevAttrMaxGridDimX = 5
+     };
+ 
+     cudaError_t cudaDeviceGetAttribute (int *, enum cudaDeviceAttr, int);
+     CUresult cuCtxGetApiVersion(CUcontext, unsigned int *);
+     CUresult cuStreamGetCtx (CUstream, CUcontext *);
+   #endif
+ 
+   typedef CUstream hipStream_t;
+   typedef CUcontext hipCtx_t;
+   typedef CUdevice hipDevice_t;
+ 
+   typedef int hipError_t;
+   typedef int hipDevice_t;
+   enum {
+     hipSuccess = 0,
+     hipErrorNotSupported = 801
+   };
+ 
+ 
+   typedef enum hipDeviceAttribute_t {
+     hipDeviceAttributeClockRate = 5,
+     hipDeviceAttributeMaxGridDimX = 29
+   } hipDeviceAttribute_t;
+ 
+   inline static hipError_t
+   hipDeviceGetAttribute (int *ival, hipDeviceAttribute_t attr, hipDevice_t dev)
+   {
+     enum cudaDeviceAttr cuattr;
+     switch (attr)
+       {
+       case hipDeviceAttributeClockRate:
+ 	cuattr = cudaDevAttrClockRate;
+ 	break;
+       case hipDeviceAttributeMaxGridDimX:
+ 	cuattr = cudaDevAttrMaxGridDimX;
+ 	break;
+       default:
+ 	assert (0);
+       }
+     return cudaDeviceGetAttribute (ival, cuattr, dev) != cudaSuccess;
+   }
+ 
+   inline static hipError_t
+   hipCtxGetApiVersion (hipCtx_t ctx, int *ver)
+   {
+     unsigned uver;
+     hipError_t err;
+     err = cuCtxGetApiVersion (ctx, &uver) != CUDA_SUCCESS;
+     *ver = (int) uver;
+     return err;
+   }
+ 
+   inline static hipError_t
+   hipStreamGetDevice (hipStream_t stream, hipDevice_t *dev)
+   {
+ #if CUDA_VERSION >= 12080
+     return cudaStreamGetDevice (stream, dev);
+ #else
+     hipError_t err;
+     CUcontext ctx;
+     err = cuStreamGetCtx (stream, &ctx) != CUDA_SUCCESS;
+     if (err == hipSuccess)
+       err = cuCtxPushCurrent (ctx) != CUDA_SUCCESS;
+     if (err == hipSuccess)
+       err = cuCtxGetDevice (dev) != CUDA_SUCCESS;
+     if (err == hipSuccess)
+       err = cuCtxPopCurrent (&ctx) != CUDA_SUCCESS;
+     return err;
+ #endif
+   }
+ 
+   inline static hipError_t
+   hipStreamQuery (hipStream_t stream)
+   {
+     return cuStreamQuery (stream) != CUDA_SUCCESS;
+   }
+ 
+ #else
+   #error "should be unreachable"
+ #endif
+ 
+ int
+ main ()
+ {
+   int ivar;
+   omp_interop_rc_t res;
+   omp_interop_t obj = omp_interop_none;
+   hipError_t hip_err;
+ 
+   #pragma omp interop init(target, targetsync, prefer_type("hip") : obj)
+ 
+   omp_interop_fr_t fr = (omp_interop_fr_t) omp_get_interop_int (obj, omp_ipr_fr_id, &res);
+   assert (res == omp_irc_success);
+   assert (fr == omp_ifr_hip);
+ 
+   ivar = (int) omp_get_interop_int (obj, omp_ipr_vendor, &res);
+   assert (res == omp_irc_success);
+   int vendor_is_amd = ivar == 1;
+   #if defined(__HIP_PLATFORM_AMD__)
+     assert (ivar == 1);
+   #elif defined(__HIP_PLATFORM_NVIDIA__)
+     assert (ivar == 11);
+   #else
+     assert (0);
+   #endif
+ 
+ 
+   /* Check whether the omp_ipr_device -> hipDevice_t yields a valid device.  */
+ 
+   hipDevice_t hip_dev = (int) omp_get_interop_int (obj, omp_ipr_device, &res);
+   assert (res == omp_irc_success);
+ 
+   /* Assume a clock size is available and > 1 GHz; value is in kHz.  */
+   hip_err = hipDeviceGetAttribute (&ivar, hipDeviceAttributeClockRate, hip_dev);
+   assert (hip_err == hipSuccess);
+   assert (ivar > 1000000 /* kHz */);
+ 
+   /* Assume that the MaxGridDimX is available and > 1024.  */
+   hip_err = hipDeviceGetAttribute (&ivar, hipDeviceAttributeMaxGridDimX, hip_dev);
+   assert (hip_err == hipSuccess);
+   assert (ivar > 1024);
+ 
+ 
+   /* Check whether the omp_ipr_device_context -> hipCtx_t yields a context.  */
+ 
+   hipCtx_t hip_ctx = (hipCtx_t) omp_get_interop_ptr (obj, omp_ipr_device_context, &res);
+   assert (res == omp_irc_success);
+ 
+   /* Assume API Version > 0 for Nvidia, hipErrorNotSupported for AMD.  */
+   ivar = -99;
+   #pragma GCC diagnostic push
+   #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+     hip_err = hipCtxGetApiVersion (hip_ctx, &ivar);
+   #pragma GCC diagnostic pop
+ 
+   if (vendor_is_amd)
+     assert (hip_err == hipErrorNotSupported && ivar == -99);
+   else
+     {
+       assert (hip_err == hipSuccess);
+       assert (ivar > 0);
+     }
+ 
+ 
+   /* Check whether the omp_ipr_targetsync -> hipStream_t yields a stream.  */
+ 
+   hipStream_t hip_sm = (hipStream_t) omp_get_interop_ptr (obj, omp_ipr_targetsync, &res);
+   assert (res == omp_irc_success);
+ 
+   hipDevice_t dev_stream = 99;
+   hip_err = hipStreamGetDevice (hip_sm, &dev_stream);
+   assert (hip_err == hipSuccess);
+   assert (dev_stream == hip_dev);
+ 
+   /* All jobs should have been completed (as there were none none)  */
+   hip_err = hipStreamQuery (hip_sm);
+   assert (hip_err == hipSuccess);
+ 
+   #pragma omp interop destroy(obj)
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-amd-full.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-require-effective-target gomp_hip_header_amd } */
+ /* { dg-require-effective-target gomp_libhipblas } */
+ /* { dg-additional-options "-lhipblas" } */
+ 
+ #define __HIP_PLATFORM_AMD__ 1
+ 
+ #include "interop-hipblas.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-amd-no-hip-header.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-require-effective-target gomp_libhipblas } */
+ /* { dg-additional-options "-lhipblas" } */
+ 
+ #define __HIP_PLATFORM_AMD__ 1
+ 
+ #define USE_HIP_FALLBACK_HEADER 1
+ 
+ #include "interop-hipblas.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-full.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,7 ----
+ /* { dg-require-effective-target openacc_cublas } */
+ /* { dg-require-effective-target gomp_hip_header_nvidia } */
+ /* { dg-additional-options "-lcublas -Wno-deprecated-declarations" } */
+ 
+ #define __HIP_PLATFORM_NVIDIA__ 1
+ 
+ #include "interop-hipblas.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-headers.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,9 ----
+ /* { dg-require-effective-target openacc_libcublas } */
+ /* { dg-additional-options "-lcublas" } */
+ 
+ #define __HIP_PLATFORM_NVIDIA__ 1
+ 
+ #define USE_HIP_FALLBACK_HEADER 1
+ #define USE_CUDA_FALLBACK_HEADER 1
+ 
+ #include "interop-hipblas.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas-nvidia-no-hip-header.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,8 ----
+ /* { dg-require-effective-target openacc_cublas } */
+ /* { dg-additional-options "-lcublas" } */
+ 
+ #define __HIP_PLATFORM_NVIDIA__ 1
+ 
+ #define USE_HIP_FALLBACK_HEADER 1
+ 
+ #include "interop-hipblas.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas.h gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas.h
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hipblas.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hipblas.h	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,240 ----
+ /* Check whether hipBlas' daxpy works with an interop object.
+      daxpy(N, DA, DX, INCX, DY, INCY)
+    calculates (for DX = DY = 1):
+      DY(1:N) =  DY(1:N) + DA * DX(1:N)
+    and otherwise N array elements, taking every INCX-th or INCY-th one, repectively.
+ 
+ Based on the interop example in OpenMP's example document  */
+ 
+ /* Minimal check whether HIP works - by checking whether the API routines
+    seem to work.  This includes a fallback if the header is not
+    available.  */
+ 
+ #if !defined(__HIP_PLATFORM_AMD__) && !defined(__HIP_PLATFORM_NVIDIA__)
+   #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined"
+ #endif
+ 
+ #if defined(__HIP_PLATFORM_AMD__) && defined(__HIP_PLATFORM_NVIDIA__)
+   #error "Either __HIP_PLATFORM_AMD__ or __HIP_PLATFORM_NVIDIA__ must be defined"
+ #endif
+ 
+ 
+ #include <assert.h>
+ #include <omp.h>
+ #include "../libgomp.c-c++-common/on_device_arch.h"
+ 
+ 
+ #if __has_include(<hipblas/hipblas.h>) && (__has_include(<library_types.h>) || !defined(__HIP_PLATFORM_NVIDIA__)) && !defined(USE_HIP_FALLBACK_HEADER)
+   #ifdef __HIP_PLATFORM_NVIDIA__
+     /* There seems to be an issue with hip/library_types.h including
+        CUDA's "library_types.h". Include CUDA's one explicitly here.
+        Could possibly worked around by using -isystem vs. -I.  */
+     #include <library_types.h>
+ 
+     /* For some reasons, the following symbols do not seem to get
+        mapped from HIP to CUDA, causing link errors.  */
+     #define hipblasSetStream cublasSetStream_v2
+     #define hipblasDaxpy cublasDaxpy_v2
+     #define hipblasCreate cublasCreate_v2
+   #endif
+   #include <hipblas/hipblas.h>
+ 
+ #elif defined(__HIP_PLATFORM_AMD__)
+   /* Add a poor man's fallback declaration.  */
+   #if !defined(USE_HIP_FALLBACK_HEADER)
+     #warning "Using fallback declaration for <hipblas/hipblas.h> for __HIP_PLATFORM_AMD__"
+   #endif
+ 
+   typedef enum
+   {
+     HIPBLAS_STATUS_SUCCESS = 0
+ 
+   } hipblasStatus_t;
+ 
+   typedef struct ihipStream_t* hipStream_t;
+   typedef void* hipblasHandle_t;
+ 
+   hipblasStatus_t hipblasCreate (hipblasHandle_t*);
+   hipblasStatus_t hipblasSetStream (hipblasHandle_t, hipStream_t);
+   hipblasStatus_t hipblasDaxpy (hipblasHandle_t, int, const double*, const double*, int, double*, int);
+ 
+ #else
+   /* Add a poor man's fallback declaration.  */
+   #if !defined(USE_HIP_FALLBACK_HEADER)
+     #warning "Using fallback declaration for <hipblas/hipblas.h> for __HIP_PLATFORM_NVIDA__"
+   #endif
+ 
+   #if __has_include(<cuda.h>) && __has_include(<cudaTypedefs.h>) && __has_include(<cuda_runtime.h>) && __has_include(<cublas_v2.h>) && !defined(USE_CUDA_FALLBACK_HEADER)
+     #include <cuda.h>
+     #include <cudaTypedefs.h>
+     #include <cuda_runtime.h>
+     #include <cublas_v2.h>
+ 
+   #else
+     /* Add a poor man's fallback declaration.  */
+     #if defined(USE_CUDA_FALLBACK_HEADER)
+       // no warning
+     #elif !__has_include(<cuda.h>)
+       #warning "Using GCC's cuda.h as fallback for cuda.h"
+     #elif !__has_include(<cudaTypedefs.h>)
+       #warning "Using GCC's cuda.h as fallback for cudaTypedefs.h"
+     #elif !__has_include(<cuda_runtime.h>)
+       #warning "Using GCC's cuda.h as fallback for cuda_runtime.h"
+     #else
+       #warning "Using GCC's cuda.h as fallback for cublas_v2.h"
+     #endif
+     #include "../../../include/cuda/cuda.h"
+ 
+     typedef enum {
+       CUBLAS_STATUS_SUCCESS = 0,
+     } cublasStatus_t;
+ 
+     typedef CUstream cudaStream_t;
+     typedef struct cublasContext* cublasHandle_t;
+ 
+     #define cublasCreate cublasCreate_v2
+     cublasStatus_t cublasCreate_v2 (cublasHandle_t *);
+ 
+     #define cublasSetStream cublasSetStream_v2
+     cublasStatus_t cublasSetStream_v2 (cublasHandle_t, cudaStream_t);
+ 
+     #define cublasDaxpy cublasDaxpy_v2
+     cublasStatus_t cublasDaxpy_v2(cublasHandle_t, int, const double*, const double*, int, double*, int);
+   #endif
+ 
+   #define HIPBLAS_STATUS_SUCCESS CUBLAS_STATUS_SUCCESS
+   #define hipblasStatus_t cublasStatus_t
+   #define hipStream_t cudaStream_t
+   #define hipblasHandle_t cublasHandle_t
+   #define hipblasCreate cublasCreate
+   #define hipblasSetStream cublasSetStream
+   #define hipblasDaxpy cublasDaxpy
+ #endif
+ 
+ static int used_variant = 0;
+ 
+ void
+ run_hipBlasdaxpy (int n, double da, const double *dx, int incx, double *dy, int incy, omp_interop_t obj)
+ {
+   used_variant = 1;
+ 
+   omp_interop_rc_t res;
+   hipblasStatus_t stat;
+ 
+   omp_intptr_t fr = omp_get_interop_int(obj, omp_ipr_fr_id, &res);
+   assert (res == omp_irc_success && fr == omp_ifr_hip);
+ 
+   hipStream_t stream = (hipStream_t) omp_get_interop_ptr (obj, omp_ipr_targetsync, &res);
+   assert (res == omp_irc_success);
+ 
+   hipblasHandle_t handle;
+   stat = hipblasCreate (&handle);
+   assert (stat == HIPBLAS_STATUS_SUCCESS);
+ 
+   stat = hipblasSetStream (handle, stream);
+   assert (stat == HIPBLAS_STATUS_SUCCESS);
+ 
+   /* 'da' can be in host or device space, 'dx' and 'dy' must be in device space.  */
+   stat = hipblasDaxpy (handle, n, &da, dx, 1, dy, 1) ;
+   assert (stat == HIPBLAS_STATUS_SUCCESS);
+ }
+ 
+ #if defined(__HIP_PLATFORM_AMD__)
+ #pragma omp declare variant(run_hipBlasdaxpy) \
+                        match(construct={dispatch}, target_device={kind(nohost), arch("amdgcn")}) \
+                        adjust_args(need_device_ptr : dx, dy) \
+                        append_args(interop(targetsync, prefer_type("hip")))
+ #elif defined(__HIP_PLATFORM_NVIDIA__) 
+ #pragma omp declare variant(run_hipBlasdaxpy) \
+                        match(construct={dispatch}, target_device={kind(nohost), arch("nvptx")}) \
+                        adjust_args(need_device_ptr : dx, dy) \
+                        append_args(interop(targetsync, prefer_type("hip")))
+ #else
+  #error "wrong platform"
+ #endif
+ 
+ void
+ run_daxpy (int n, double da, const double *dx, int incx, double *dy, int incy)
+ {
+   used_variant = 2;
+ 
+   if (incx == 1 && incy == 1)
+     #pragma omp simd
+     for (int i = 0; i < n; i++)
+       dy[i] += da * dx[i];
+   else
+     {
+       int ix = 0;
+       int iy = 0;
+       for (int i = 0; i < n; i++)
+ 	{
+ 	  dy[iy] += da * dx[ix];
+ 	  ix += incx;
+ 	  iy += incy;
+ 	}
+     }
+ }
+ 
+ 
+ void
+ run_test (int dev)
+ {
+   constexpr int N = 1024;
+ 
+   // A = {1,2,...,N}
+   // B = {-1, -2, ..., N}
+   // B' = daxpy (N, 3, A, incx=1, B, incy=1)
+   //    = B + 3*A
+   // -> B' = {0, 2, 4, 6, ... }
+ 
+   double A[N], B[N];
+   double factor = 3.0;
+   for (int i = 0; i < N; i++)
+     {
+       A[i] = i;
+       B[i] = -i;
+     }
+ 
+   if (dev != omp_initial_device && dev != omp_get_num_devices ())
+     {
+       #pragma omp target enter data device(dev) map(A, B)
+     }
+ 
+   used_variant = 99;
+   #pragma omp dispatch device(dev)
+     run_daxpy (N, factor, A, 1, B, 1);  
+ 
+   if (dev != omp_initial_device && dev != omp_get_num_devices ())
+     {
+       #pragma omp target exit data device(dev) map(release: A) map(from: B)
+ 
+       int tmp = omp_get_default_device ();
+       omp_set_default_device (dev);
+ #if defined(__HIP_PLATFORM_AMD__)
+       if (on_device_arch_gcn ())
+ #else
+       if (on_device_arch_nvptx ())
+ #endif
+ 	assert (used_variant == 1);
+       else
+ 	assert (used_variant == 2);
+       omp_set_default_device (tmp);
+     }
+   else
+     assert (used_variant == 2);
+ 
+   for (int i = 0; i < N; i++)
+     assert (B[i] == 2*i);
+ }
+ 
+ int   
+ main () 
+ {   
+   int ndev = omp_get_num_devices ();
+ 
+   for (int dev = 0; dev <= ndev; dev++)
+     run_test (dev);
+   run_test (omp_initial_device);  
+ 
+   return 0;
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hsa.c gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hsa.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/interop-hsa.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/interop-hsa.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,205 ----
+ /* { dg-additional-options "-ldl" } */
+ /* { dg-require-effective-target offload_device_gcn }
+    The 'asm' insert is valid for GCN only:
+    { dg-additional-options -foffload=amdgcn-amdhsa } */
+ 
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <omp.h>
+ #include <assert.h>
+ #include <dlfcn.h>
+ #include "../../../include/hsa.h"
+ #include "../../config/gcn/libgomp-gcn.h"
+ 
+ #define STACKSIZE (100 * 1024)
+ #define HEAPSIZE (10 * 1024 * 1024)
+ #define ARENASIZE HEAPSIZE
+ 
+ /* This code fragment must be optimized or else the host-fallback kernel has
+  * invalid ASM inserts.  The rest of the file can be compiled safely at -O0.  */
+ #pragma omp declare target
+ uintptr_t __attribute__((optimize("O1")))
+ get_kernel_ptr ()
+ {
+   uintptr_t val;
+   if (!omp_is_initial_device ())
+     /* "main._omp_fn.0" is the name GCC gives the first OpenMP target
+      * region in the "main" function.
+      * The ".kd" suffix is added by the LLVM assembler when it creates the
+      * kernel meta-data, and this is what we need to launch a kernel.  */
+     asm ("s_getpc_b64 %0\n\t"
+ 	 "s_add_u32 %L0, %L0, main._omp_fn.0.kd@rel32@lo+4\n\t"
+ 	 "s_addc_u32 %H0, %H0, main._omp_fn.0.kd@rel32@hi+4"
+ 	 : "=Sg"(val));
+   return val;
+ }
+ #pragma omp end declare target
+ 
+ int
+ main(int argc, char** argv)
+ {
+ 
+   /* Load the HSA runtime DLL.  */
+   void *hsalib = dlopen ("libhsa-runtime64.so.1", RTLD_LAZY);
+   assert (hsalib);
+ 
+   hsa_status_t (*hsa_signal_create) (hsa_signal_value_t initial_value,
+ 				     uint32_t num_consumers,
+ 				     const hsa_agent_t *consumers,
+ 				     hsa_signal_t *signal)
+     = dlsym (hsalib, "hsa_signal_create");
+   assert (hsa_signal_create);
+ 
+   uint64_t (*hsa_queue_load_write_index_relaxed) (const hsa_queue_t *queue)
+     = dlsym (hsalib, "hsa_queue_load_write_index_relaxed");
+   assert (hsa_queue_load_write_index_relaxed);
+ 
+   void (*hsa_signal_store_relaxed) (hsa_signal_t signal,
+ 				    hsa_signal_value_t value)
+     = dlsym (hsalib, "hsa_signal_store_relaxed");
+   assert (hsa_signal_store_relaxed);
+ 
+   hsa_signal_value_t (*hsa_signal_wait_relaxed) (hsa_signal_t signal,
+ 						 hsa_signal_condition_t condition,
+ 						 hsa_signal_value_t compare_value,
+ 						 uint64_t timeout_hint,
+ 						 hsa_wait_state_t wait_state_hint)
+     = dlsym (hsalib, "hsa_signal_wait_relaxed");
+   assert (hsa_signal_wait_relaxed);
+ 
+   void (*hsa_queue_store_write_index_relaxed) (const hsa_queue_t *queue,
+ 					       uint64_t value)
+     = dlsym (hsalib, "hsa_queue_store_write_index_relaxed");
+   assert (hsa_queue_store_write_index_relaxed);
+ 
+   hsa_status_t (*hsa_signal_destroy) (hsa_signal_t signal)
+     = dlsym (hsalib, "hsa_signal_destroy");
+   assert (hsa_signal_destroy);
+ 
+   /* Set up the device data environment.  */
+   int test_data_value = 0;
+ #pragma omp target enter data map(test_data_value)
+ 
+   /* Get the interop details.  */
+   int device_num = omp_get_default_device();
+   hsa_agent_t *gpu_agent;
+   hsa_queue_t *hsa_queue = NULL;
+ 
+   omp_interop_t interop = omp_interop_none;
+ #pragma omp interop init(target, targetsync, prefer_type("hsa"): interop) device(device_num)
+   assert (interop != omp_interop_none);
+ 
+   omp_interop_rc_t retcode;
+   omp_interop_fr_t fr = omp_get_interop_int (interop, omp_ipr_fr_id, &retcode);
+   assert (retcode == omp_irc_success);
+   assert (fr == omp_ifr_hsa);
+ 
+   gpu_agent = omp_get_interop_ptr(interop, omp_ipr_device, &retcode);
+   assert (retcode == omp_irc_success);
+ 
+   hsa_queue = omp_get_interop_ptr(interop, omp_ipr_targetsync, &retcode);
+   assert (retcode == omp_irc_success);
+   assert (hsa_queue);
+ 
+   /* Call an offload kernel via OpenMP/libgomp.
+    *
+    * This kernel serves two purposes:
+    *   1) Lookup the device-side load-address of itself (thus avoiding the
+    *   need to access the libgomp internals).
+    *   2) Count how many times it is called.
+    * We then call it once using OpenMP, and once manually, and check
+    * the counter reads "2".  */
+   uint64_t kernel_object = 0;
+ #pragma omp target map(from:kernel_object) map(present,alloc:test_data_value)
+   {
+     kernel_object = get_kernel_ptr ();
+     ++test_data_value;
+   }
+ 
+   assert (kernel_object != 0);
+ 
+   /* Configure the same kernel to run again, using HSA manually this time.  */
+   hsa_status_t status;
+   hsa_signal_t signal;
+   status = hsa_signal_create(1, 0, NULL, &signal);
+   assert (status == HSA_STATUS_SUCCESS);
+ 
+   /* The kernel is built by GCC for OpenMP, so we need to pass the same
+    * data pointers that libgomp would pass in.  */
+   struct {
+     uintptr_t test_data_value;
+     uintptr_t kernel_object;
+   } tgtaddrs;
+ 
+ #pragma omp target data use_device_addr(test_data_value)
+   {
+     tgtaddrs.test_data_value = (uintptr_t)&test_data_value;
+     tgtaddrs.kernel_object = (uintptr_t)omp_target_alloc (8, device_num);
+   }
+ 
+   /* We also need to duplicate the launch ABI used by plugin-gcn.c.  */
+   struct kernargs_abi args;    /* From libgomp-gcn.h.  */
+   args.dummy1 = (int64_t)&tgtaddrs;
+   args.out_ptr = (int64_t)malloc (sizeof (struct output)); /* Host side.  */
+   args.heap_ptr = (int64_t)omp_target_alloc (HEAPSIZE, device_num);
+   args.arena_ptr = (int64_t)omp_target_alloc (ARENASIZE, device_num);
+   args.stack_ptr = (int64_t)omp_target_alloc (STACKSIZE, device_num);
+   args.arena_size_per_team = ARENASIZE;
+   args.stack_size_per_thread = STACKSIZE;
+ 
+   /* Build the HSA dispatch packet, and insert it into the queue.  */
+   uint64_t packet_id = hsa_queue_load_write_index_relaxed (hsa_queue);
+   const uint32_t queueMask = hsa_queue->size - 1;
+   hsa_kernel_dispatch_packet_t *dispatch_packet =
+     &(((hsa_kernel_dispatch_packet_t *)
+ 	  (hsa_queue->base_address))[packet_id & queueMask]);
+ 
+   dispatch_packet->setup = 3 << HSA_KERNEL_DISPATCH_PACKET_SETUP_DIMENSIONS;
+   dispatch_packet->workgroup_size_x = 1;
+   dispatch_packet->workgroup_size_y = 64;
+   dispatch_packet->workgroup_size_z = 1;
+   dispatch_packet->grid_size_x = 1;
+   dispatch_packet->grid_size_y = 64;
+   dispatch_packet->grid_size_z = 1;
+   dispatch_packet->completion_signal = signal;
+   dispatch_packet->kernel_object = kernel_object;
+   dispatch_packet->kernarg_address = &args;
+   dispatch_packet->private_segment_size = 0;
+   dispatch_packet->group_segment_size = 1536;
+ 
+   uint16_t header = 0;
+   header |= HSA_PACKET_TYPE_KERNEL_DISPATCH << HSA_PACKET_HEADER_TYPE;
+   header |= HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_ACQUIRE_FENCE_SCOPE;
+   header |= HSA_FENCE_SCOPE_SYSTEM << HSA_PACKET_HEADER_RELEASE_FENCE_SCOPE;
+ 
+   /* Finish writing the packet header with an atomic release.  */
+   __atomic_store_n((uint16_t*)dispatch_packet, header, __ATOMIC_RELEASE);
+ 
+   hsa_queue_store_write_index_relaxed (hsa_queue, packet_id + 1);
+   
+   ;/* Run the kernel and wait for it to complete.  */
+   hsa_signal_store_relaxed(hsa_queue->doorbell_signal, packet_id);
+   while (hsa_signal_wait_relaxed(signal, HSA_SIGNAL_CONDITION_LT, 1,
+ 	UINT64_MAX, HSA_WAIT_STATE_ACTIVE) != 0)
+     ;
+ 
+   /* Clean up HSA.  */
+   hsa_signal_destroy(signal);
+   free ((void*)args.out_ptr);
+   omp_target_free ((void*)args.heap_ptr, device_num);
+   omp_target_free ((void*)args.arena_ptr, device_num);
+   omp_target_free ((void*)args.stack_ptr, device_num);
+   omp_target_free ((void*)tgtaddrs.kernel_object, device_num);
+ 
+   /* Clean up OpenMP.  */
+   #pragma omp interop destroy(interop)
+ 
+   /* Bring the data back from the device.  */
+ #pragma omp target exit data map(test_data_value)
+ 
+   /* Ensure the kernel was called twice.  Once by OpenMP, once by HSA.  */
+   assert (test_data_value == 2);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c gcc-15-20250524/libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/target-map-zero-sized-2.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,74 ----
+ int
+ main ()
+ {
+   int i, n;
+   int data[] = {1,2};
+   struct S { int **ptrset; };
+ 
+ // -----------------------------------
+ 
+ /* The produced mapping for sptr1->ptrset[i][:n]
+ 
+    GOMP_MAP_STRUCT (size = 1)
+       GOMP_MAP_ZERO_LEN_ARRAY_SECTION
+    GOMP_MAP_ZERO_LEN_ARRAY_SECTION
+       GOMP_MAP_ATTACH
+    GOMP_MAP_ATTACH -> attaching to 2nd GOMP_MAP_ZERO_LEN_ARRAY_SECTION
+ 
+ which get split into 3 separate map_vars call; in particular,
+ the latter is separate and points to an unmpapped variable.
+ 
+ Thus, it failed with:
+    libgomp: pointer target not mapped for attach  */
+ 
+   struct S s1, *sptr1;
+   s1.ptrset = (int **) __builtin_malloc (sizeof(void*) * 3);
+   s1.ptrset[0] = data;
+   s1.ptrset[1] = data;
+   s1.ptrset[2] = data;
+   sptr1 = &s1;
+ 
+   i = 1;
+   n = 0;
+   #pragma omp target enter data map(sptr1[:1], sptr1->ptrset[:3])
+   #pragma omp target enter data map(sptr1->ptrset[i][:n])
+ 
+   #pragma omp target exit data map(sptr1->ptrset[i][:n])
+   #pragma omp target exit data map(sptr1[:1], sptr1->ptrset[:3])
+ 
+   __builtin_free (s1.ptrset);
+ 
+ // -----------------------------------
+ 
+ /* The produced mapping for sptr2->ptrset[i][:n] is similar:
+ 
+    GOMP_MAP_STRUCT (size = 1)
+       GOMP_MAP_ZERO_LEN_ARRAY_SECTION
+    GOMP_MAP_TO  ! this one has now a finite size
+       GOMP_MAP_ATTACH
+    GOMP_MAP_ATTACH -> attach to the GOMP_MAP_TO
+ 
+ As the latter GOMP_MAP_ATTACH has now a pointer target,
+ the attachment worked.  */
+ 
+   struct S s2, *sptr2;
+   s2.ptrset = (int **) __builtin_malloc (sizeof(void*) * 3);
+   s2.ptrset[0] = data;
+   s2.ptrset[1] = data;
+   s2.ptrset[2] = data;
+   sptr2 = &s2;
+ 
+   i = 1;
+   n = 2;
+   #pragma omp target enter data map(sptr2[:1], sptr2->ptrset[:3])
+   #pragma omp target enter data map(sptr2->ptrset[i][:n])
+ 
+   #pragma omp target
+     if (sptr2->ptrset[1][0] != 1 || sptr2->ptrset[1][1] != 2)
+       __builtin_abort ();
+ 
+   #pragma omp target exit data map(sptr2->ptrset[i][:n])
+   #pragma omp target exit data map(sptr2[:1], sptr2->ptrset[:3])
+ 
+   __builtin_free (s2.ptrset);
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c gcc-15-20250524/libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/target-map-zero-sized-3.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,49 ----
+ int
+ main ()
+ {
+   int i, n, n2;
+   int data[] = {1,2};
+   struct S {
+     int **ptrset;
+     int **ptrset2;
+   };
+ 
+   /* This is the same as target-map-zero-sized-3.c, but by mixing
+      mapped and non-mapped items, the mapping before the ATTACH
+      might (or here: is) not actually associated with the the
+      pointer used for attaching. Thus, if one does a simple
+ 
+        if (openmp_p
+ 	   && (pragma_kind & GOMP_MAP_VARS_ENTER_DATA)
+ 	   && mapnum == 1)
+      check in target.c's gomp_map_vars_internal will fail
+      as mapnum > 1 but still the map associated with this
+      ATTACH is in a different set.  */
+ 
+   struct S s1, *sptr1;
+   s1.ptrset = (int **) __builtin_malloc (sizeof(void*) * 3);
+   s1.ptrset2 = (int **) __builtin_malloc (sizeof(void*) * 3);
+   s1.ptrset[0] = data;
+   s1.ptrset[1] = data;
+   s1.ptrset[2] = data;
+   s1.ptrset2[0] = data;
+   s1.ptrset2[1] = data;
+   s1.ptrset2[2] = data;
+   sptr1 = &s1;
+ 
+   i = 1;
+   n = 0;
+   n2 = 2;
+   #pragma omp target enter data map(sptr1[:1], sptr1->ptrset[:3], sptr1->ptrset2[:3])
+   #pragma omp target enter data map(sptr1->ptrset[i][:n], sptr1->ptrset2[i][:n])
+ 
+   #pragma omp target
+     if (sptr1->ptrset2[1][0] != 1 || sptr1->ptrset2[1][1] != 2)
+       __builtin_abort ();
+ 
+   #pragma omp target exit data map(sptr1->ptrset[i][:n], sptr1->ptrset2[i][:n])
+   #pragma omp target exit data map(sptr1[:1], sptr1->ptrset[:3], sptr1->ptrset2[:3])
+ 
+   __builtin_free (s1.ptrset);
+   __builtin_free (s1.ptrset2);
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c/target-map-zero-sized.c gcc-15-20250524/libgomp/testsuite/libgomp.c/target-map-zero-sized.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c/target-map-zero-sized.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c/target-map-zero-sized.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,107 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-O0" }  */
+ 
+ /* Issue showed up in the real world when large data was distributed
+    over multiple MPI progresses - such that for one process n == 0
+    happend at run time.
+ 
+    Before  map(var[:0])  and  map(var[:n])  with n > 0 was handled,
+    this patch now also handles  map(var[:n]) with n == 0.
+ 
+    Failed before with "libgomp: pointer target not mapped for attach".  */
+ 
+ /* Here, the base address is shifted - which should have no effect,
+    but must work as well.  */
+ void
+ with_offset ()
+ {
+   struct S {
+      int *ptr1, *ptr2;
+   };
+   struct S s1, s2;
+   int *a, *b, *c, *d;
+   s1.ptr1 = (int *) 0L;
+   s1.ptr2 = (int *) 0xdeedbeef;
+   s2.ptr1 = (int *) 0L;
+   s2.ptr2 = (int *) 0xdeedbeef;
+   a = (int *) 0L;
+   b = (int *) 0xdeedbeef;
+   c = (int *) 0L;
+   d = (int *) 0xdeedbeef;
+ 
+   int n1, n2, n3, n4;
+   n1 = n2 = n3 = n4 = 0;
+ 
+   #pragma omp target enter data map(s1.ptr1[4:n1], s1.ptr2[6:n2], a[3:n3], b[2:n4])
+ 
+   #pragma omp target map(s2.ptr1[4:n1], s2.ptr2[2:n2], c[6:n3], d[9:n4])
+   {
+     if (s2.ptr1 != (void *) 0L || s2.ptr2 != (void *) 0xdeedbeef
+ 	|| c != (void *) 0L || d != (void *) 0xdeedbeef)
+       __builtin_abort ();
+   }
+ 
+   #pragma omp target map(s1.ptr1[4:n1], s1.ptr2[6:n2], a[3:n3], b[2:n4])
+   {
+     if (s1.ptr1 != (void *) 0L || s1.ptr2 != (void *) 0xdeedbeef
+ 	|| a != (void *) 0L || b != (void *) 0xdeedbeef)
+       __builtin_abort ();
+   }
+ 
+   #pragma omp target
+   {
+     if (s1.ptr1 != (void *) 0L || s1.ptr2 != (void *) 0xdeedbeef
+ 	|| a != (void *) 0L || b != (void *) 0xdeedbeef)
+       __builtin_abort ();
+   }
+ 
+   #pragma omp target exit data map(s1.ptr1[4:n1], s1.ptr2[6:n2], a[3:n3], b[2:n4])
+ }
+ 
+ int
+ main ()
+ {
+   struct S {
+      int *ptr1, *ptr2;
+   };
+   struct S s1, s2;
+   int *a, *b, *c, *d;
+   s1.ptr1 = (int *) 0L;
+   s1.ptr2 = (int *) 0xdeedbeef;
+   s2.ptr1 = (int *) 0L;
+   s2.ptr2 = (int *) 0xdeedbeef;
+   a = (int *) 0L;
+   b = (int *) 0xdeedbeef;
+   c = (int *) 0L;
+   d = (int *) 0xdeedbeef;
+ 
+   int n1, n2, n3, n4;
+   n1 = n2 = n3 = n4 = 0;
+ 
+   #pragma omp target enter data map(s1.ptr1[:n1], s1.ptr2[:n2], a[:n3], b[:n4])
+ 
+   #pragma omp target map(s2.ptr1[:n1], s2.ptr2[:n2], c[:n3], d[:n4])
+   {
+     if (s2.ptr1 != (void *) 0L || s2.ptr2 != (void *) 0xdeedbeef
+ 	|| c != (void *) 0L || d != (void *) 0xdeedbeef)
+       __builtin_abort ();
+   }
+ 
+   #pragma omp target map(s1.ptr1[:n1], s1.ptr2[:n2], a[:n3], b[:n4])
+   {
+     if (s1.ptr1 != (void *) 0L || s1.ptr2 != (void *) 0xdeedbeef
+ 	|| a != (void *) 0L || b != (void *) 0xdeedbeef)
+       __builtin_abort ();
+   }
+ 
+   #pragma omp target
+   {
+     if (s1.ptr1 != (void *) 0L || s1.ptr2 != (void *) 0xdeedbeef
+ 	|| a != (void *) 0L || b != (void *) 0xdeedbeef)
+       __builtin_abort ();
+   }
+ 
+   #pragma omp target exit data map(s1.ptr1[:n1], s1.ptr2[:n2], a[:n3], b[:n4])
+ 
+   with_offset ();
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.c-c++-common/interop-2.c gcc-15-20250524/libgomp/testsuite/libgomp.c-c++-common/interop-2.c
*** gcc-15-20250517/libgomp/testsuite/libgomp.c-c++-common/interop-2.c	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.c-c++-common/interop-2.c	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,129 ----
+ /* { dg-do run } */
+ /* { dg-additional-options "-lm" } */
+ 
+ /* Note: At the time this program was written, Nvptx was not asynchronous
+    enough to trigger the issue (with a 'nowait' added); however, one
+    AMD GPUs, it triggered.  */
+ 
+ /* Test whether nowait / dependency is handled correctly.
+    Motivated by OpenMP_VV's 5.1/interop/test_interop_target.c
+ 
+    The code actually only creates a streaming object without actually using it,
+    except for dependency tracking.
+ 
+    Note that there is a difference between having a steaming (targetsync) object
+    and not (= omp_interop_none); at least if one assumes that omp_interop_none
+    does not include 'targetsync' as (effective) interop type - in that case,
+    'nowait' has no effect and the 'depend' is active as included task, otherwise
+    the code continues with the depend being active only for the about to be
+    destroyed or used thread.
+ 
+    The OpenMP spec states (here 6.0):
+      "If the interop-type set includes 'targetsync', an empty mergeable task is
+       generated.  If the 'nowait' clause is not present on the construct then
+       the task is also an included task. If the interop-type set does not
+       include 'targetsync', the 'nowait' clause has no effect.  Any depend
+       clauses that are present on the construct apply to the generated task.  */
+ 
+ #include <omp.h>
+ 
+ void
+ test_async (const int dev)
+ {
+   constexpr int N = 2048;
+   constexpr int ulp = 4;
+   constexpr double M_PI = 2.0 * __builtin_acos (0.0);
+   omp_interop_t obj1, obj2;
+   double A[N] = { };
+   int B[N] = { };
+ 
+   /* Create interop object.  */
+   #pragma omp interop device(dev) init(targetsync : obj1, obj2)
+ 
+   if (dev == omp_initial_device || dev == omp_get_num_devices ())
+     {
+       if (obj1 != omp_interop_none || obj2 != omp_interop_none)
+ 	__builtin_abort ();
+     }
+   else
+     {
+       if (obj1 == omp_interop_none || obj2 == omp_interop_none)
+ 	__builtin_abort ();
+     }
+ 
+   /* DOUBLE */
+ 
+   /* Now in the background update it, slowly enough that the
+      code afterwards is reached while still running asynchronously.
+      As OpenMP_VV's Issue #863 shows, the overhead is high enough to
+      fail even when only doing an atomic integer increment.  */
+ 
+   #pragma omp target device(dev) map(A) depend(out: A[:N]) nowait
+   for (int i = 0; i < N; i++)
+     #pragma omp atomic update
+     A[i] += __builtin_sin (2*i*M_PI/N);
+ 
+   /* DESTROY take care of the dependeny such that ... */
+ 
+   if (obj1 == omp_interop_none)
+     {
+       // Same as below as 'nowait' is ignored.
+       #pragma omp interop destroy(obj1) depend(in: A[:N]) nowait
+     }
+   else
+     {
+       #pragma omp interop destroy(obj1) depend(in: A[:N])
+     }
+ 
+   /* ... this code is only executed once the dependency as been fulfilled.  */
+ 
+   /* Check the value - part I: quick, avoid A[0] == sin(0) = 0.  */
+   for (int i = 1; i < N; i++)
+     if (A[i] == 0.0)
+       __builtin_abort ();
+ 
+   /* Check the value - part II: throughly */
+   for (int i = 0; i < N; i++)
+     {
+       double x = A[i];
+       double y = __builtin_sin (2*i*M_PI/N);
+       if (__builtin_fabs (x - y) > ulp * __builtin_fabs (x+y) * __DBL_EPSILON__)
+ 	__builtin_abort ();
+     }
+ 
+   /* Integer */
+ 
+   #pragma omp target device(dev) map(B) depend(out: B[:N]) nowait
+   for (int i = 0; i < N; i++)
+     #pragma omp atomic update
+     B[i] += 42;
+ 
+   /* Same - but using USE.  */
+   if (obj2 == omp_interop_none)
+     {
+       // Same as below as 'nowait' is ignored.
+       #pragma omp interop use(obj2) depend(in: B[:N]) nowait
+     }
+   else
+     {
+       #pragma omp interop use(obj2) depend(in: B[:N])
+     }
+ 
+   for (int i = 0; i < N; i++)
+     if (B[i] != 42)
+       __builtin_abort ();
+ 
+   #pragma omp interop destroy(obj2)
+ }
+ 
+ int
+ main ()
+ {
+   int ndev = omp_get_num_devices ();
+ 
+   for (int dev = 0; dev <= ndev; dev++)
+     test_async (dev);
+   test_async (omp_initial_device);
+ 
+   return 0;
+ }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/alloc-comp-4.f90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/alloc-comp-4.f90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/alloc-comp-4.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/alloc-comp-4.f90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,75 ----
+ !
+ ! Check that mapping with map(var%tiles(1)) works.
+ !
+ ! This uses deep mapping to handle the allocatable
+ ! derived-type components
+ !
+ ! The tricky part is that GCC generates intermittently
+ ! an SSA_NAME that needs to be resolved.
+ !
+ module m
+ type t
+  integer, allocatable :: den1(:,:), den2(:,:)
+ end type t
+ 
+ type t2
+  type(t), allocatable :: tiles(:)
+ end type t2
+ end
+ 
+ use m
+ use iso_c_binding
+ implicit none (type, external)
+ type(t2), target :: var
+ logical :: is_self_map
+ type(C_ptr) :: pden1, pden2, ptiles, ptiles1
+ 
+ allocate(var%tiles(1))
+ var%tiles(1)%den1 = reshape([1,2,3,4],[2,2])
+ var%tiles(1)%den2 = reshape([11,22,33,44],[2,2])
+ 
+ ptiles = c_loc(var%tiles)
+ ptiles1 = c_loc(var%tiles(1))
+ pden1 = c_loc(var%tiles(1)%den1)
+ pden2 = c_loc(var%tiles(1)%den2)
+ 
+ 
+ is_self_map = .false.
+ !$omp target map(to: is_self_map)
+   is_self_map = .true.
+ !$omp end target
+ 
+ !$omp target enter data map(var%tiles(1))
+ 
+ !$omp target firstprivate(ptiles, ptiles1, pden1, pden2)
+  if (any (var%tiles(1)%den1 /= reshape([1,2,3,4],[2,2]))) stop 1
+  if (any (var%tiles(1)%den2 /= reshape([11,22,33,44],[2,2]))) stop 2
+  var%tiles(1)%den1 = var%tiles(1)%den1 + 5
+  var%tiles(1)%den2 = var%tiles(1)%den2 + 7
+ 
+  if (is_self_map) then
+    if (.not. c_associated (ptiles, c_loc(var%tiles))) stop 3
+    if (.not. c_associated (ptiles1, c_loc(var%tiles(1)))) stop 4
+    if (.not. c_associated (pden1, c_loc(var%tiles(1)%den1))) stop 5
+    if (.not. c_associated (pden2, c_loc(var%tiles(1)%den2))) stop 6
+  else
+    if (c_associated (ptiles, c_loc(var%tiles))) stop 3
+    if (c_associated (ptiles1, c_loc(var%tiles(1)))) stop 4
+    if (c_associated (pden1, c_loc(var%tiles(1)%den1))) stop 5
+    if (c_associated (pden2, c_loc(var%tiles(1)%den2))) stop 6
+  endif
+ !$omp end target
+ 
+ if (is_self_map) then
+   if (any (var%tiles(1)%den1 /= 5 + reshape([1,2,3,4],[2,2]))) stop 7
+   if (any (var%tiles(1)%den2 /= 7 + reshape([11,22,33,44],[2,2]))) stop 8
+ else
+   if (any (var%tiles(1)%den1 /= reshape([1,2,3,4],[2,2]))) stop 7
+   if (any (var%tiles(1)%den2 /= reshape([11,22,33,44],[2,2]))) stop 8
+ endif
+ 
+ !$omp target exit data map(var%tiles(1))
+ 
+ if (any (var%tiles(1)%den1 /= 5 + reshape([1,2,3,4],[2,2]))) stop 7
+ if (any (var%tiles(1)%den2 /= 7 + reshape([11,22,33,44],[2,2]))) stop 8
+ end
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/allocate-8a.f90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/allocate-8a.f90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/allocate-8a.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/allocate-8a.f90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,45 ----
+ ! { dg-additional-options "-fopenmp-allocators" }
+ ! { dg-additional-options "-fdump-tree-omplower" }
+ program main
+   use iso_c_binding
+   use omp_lib
+   implicit none (type, external)
+   integer(omp_allocator_handle_kind):: alloc_h
+   integer :: i, N
+   integer(c_intptr_t) :: intptr
+   integer, allocatable :: A(:)
+   type(omp_alloctrait):: traits(1) = [omp_alloctrait(omp_atk_alignment, 128)]
+ 
+   N = 10
+   alloc_h = omp_init_allocator(omp_default_mem_space, 1, traits)
+ 
+   !$omp allocate(A) allocator(alloc_h)
+   allocate(A(N))
+   a(:) = [(i, i=1,N)]
+   if (mod (transfer (loc(a), intptr),128) /= 0) &
+     stop 1
+   if (any (a /= [(i, i=1,N)])) &
+     stop 2
+   deallocate(A)
+   !$omp allocate(A) allocator(alloc_h) align(512)
+   allocate(A(N))
+   block
+     integer, allocatable :: B(:)
+     !$omp allocators allocate(allocator(alloc_h), align(256) : B)
+     allocate(B(N))
+     B(:) = [(2*i, i=1,N)]
+     A(:) = B
+     if (mod (transfer (loc(B), intptr), 256) /= 0) &
+       stop 1
+     ! end of scope deallocation
+   end block
+   if (mod (transfer (loc(a), intptr),512) /= 0) &
+     stop 1
+   if (any (a /= [(2*i, i=1,N)])) &
+     stop 2
+   deallocate(A) ! Must deallocate here - before deallocator is destroyed
+   call omp_destroy_allocator(alloc_h)
+   ! No auto dealloc of A because it is SAVE
+ end
+ ! { dg-final { scan-tree-dump-times "__builtin_GOMP_alloc \\(" 3 "omplower" } }
+ ! { dg-final { scan-tree-dump-times "__builtin_GOMP_free \\(" 3 "omplower" } }
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-amd-full.F90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,10 ----
+ ! { dg-do run { target { offload_device_gcn } } }
+ ! { dg-do link { target { ! offload_device_gcn } } }
+ 
+ ! { dg-require-effective-target gomp_hipfort_module }
+ ! { dg-require-effective-target gomp_libamdhip64 }
+ ! { dg-additional-options "-lamdhip64" }
+ 
+ #define HAVE_HIPFORT 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-amd-no-module.F90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,9 ----
+ ! { dg-do run { target { offload_device_gcn } } }
+ ! { dg-do link { target { ! offload_device_gcn } } }
+ 
+ ! { dg-require-effective-target gomp_libamdhip64 }
+ ! { dg-additional-options "-lamdhip64" }
+ 
+ #define USE_HIP_FALLBACK_MODULE 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-full.F90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,12 ----
+ ! { dg-do run { target { offload_device_nvptx } } }
+ ! { dg-do link { target { ! offload_device_nvptx } } }
+ 
+ ! { dg-require-effective-target gomp_hipfort_module }
+ ! { dg-require-effective-target openacc_cudart }
+ ! { dg-require-effective-target openacc_cuda }
+ ! { dg-additional-options "-lcuda -lcudart" }
+ 
+ #define HAVE_HIPFORT 1
+ #define USE_CUDA_NAMES 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip-nvidia-no-module.F90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-do run { target { offload_device_nvptx } } }
+ ! { dg-do link { target { ! offload_device_nvptx } } }
+ 
+ ! { dg-require-effective-target openacc_libcudart }
+ ! { dg-require-effective-target openacc_libcuda }
+ ! { dg-additional-options "-lcuda -lcudart" }
+ 
+ #define USE_CUDA_NAMES 1
+ #define USE_HIP_FALLBACK_MODULE 1
+ 
+ #include "interop-hip.h"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip.h gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip.h
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/interop-hip.h	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/interop-hip.h	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,214 ----
+ ! Minimal check whether HIP works - by checking whether the API routines
+ ! seem to work.  This includes a  fallback if hipfort is not available
+ 
+ #ifndef HAVE_HIPFORT
+ #ifndef USE_HIP_FALLBACK_MODULE
+ #if USE_CUDA_NAMES
+ #warning "Using fallback implementation for module hipfort as HAVE_HIPFORT is undefined (for NVIDA/CUDA)"
+ #else
+ #warning "Using fallback implementation for module hipfort as HAVE_HIPFORT is undefined - assume AMD as USE_CUDA_NAMES is unset"
+ #endif
+ #endif
+ module hipfort  ! Minimal implementation for the testsuite
+   implicit none
+ 
+   enum, bind(c)
+     enumerator :: hipSuccess = 0
+     enumerator :: hipErrorNotSupported = 801
+   end enum
+ 
+   enum, bind(c)
+     enumerator :: hipDeviceAttributeClockRate = 5
+     enumerator :: hipDeviceAttributeMaxGridDimX = 29
+   end enum
+ 
+   interface
+     integer(kind(hipSuccess)) function hipDeviceGetAttribute (ip, attr, dev) &
+ #if USE_CUDA_NAMES
+         bind(c, name="cudaDeviceGetAttribute")
+ #else
+         bind(c, name="hipDeviceGetAttribute")
+ #endif
+       use iso_c_binding, only: c_ptr, c_int
+       import
+       implicit none
+       type(c_ptr), value :: ip
+       integer(kind(hipDeviceAttributeClockRate)), value :: attr
+       integer(c_int), value :: dev
+     end
+ 
+     integer(kind(hipSuccess)) function hipCtxGetApiVersion (ctx, ip) &
+ #if USE_CUDA_NAMES
+         bind(c, name="cudaCtxGetApiVersion")
+ #else
+         bind(c, name="hipCtxGetApiVersion")
+ #endif
+       use iso_c_binding, only: c_ptr
+       import
+       implicit none
+       type(c_ptr), value :: ctx, ip
+     end
+ 
+     integer(kind(hipSuccess)) function hipStreamQuery (stream) &
+ #if USE_CUDA_NAMES
+         bind(c, name="cudaStreamQuery")
+ #else
+         bind(c, name="hipStreamQuery")
+ #endif
+       use iso_c_binding, only: c_ptr
+       import
+       implicit none
+       type(c_ptr), value :: stream
+     end
+ 
+    integer(kind(hipSuccess)) function hipStreamGetFlags (stream, flags) &
+ #if USE_CUDA_NAMES
+         bind(c, name="cudaStreamGetFlags")
+ #else
+         bind(c, name="hipStreamGetFlags")
+ #endif
+       use iso_c_binding, only: c_ptr
+       import
+       implicit none
+       type(c_ptr), value :: stream
+       type(c_ptr), value :: flags
+     end
+   end interface
+ end module
+ #endif
+ 
+ program main
+   use iso_c_binding, only: c_ptr, c_int, c_loc
+   use omp_lib
+   use hipfort
+   implicit none (type, external)
+ 
+ ! Only supported since CUDA 12.8 - skip for better compatibility
+ !  ! Manally implement hipStreamGetDevice as hipfort misses it
+ !  ! -> https://github.com/ROCm/hipfort/issues/238
+ !  interface
+ !    integer(kind(hipSuccess)) function my_hipStreamGetDevice(stream, dev) &
+ !#if USE_CUDA_NAMES
+ !        bind(c, name="cudaStreamGetDevice")
+ !#else
+ !        bind(c, name="hipStreamGetDevice")
+ !#endif
+ !      use iso_c_binding, only: c_ptr, c_int
+ !      import
+ !      implicit none
+ !      type(c_ptr), value :: stream
+ !      integer(c_int) :: dev
+ !    end
+ !  end interface
+ 
+   integer(c_int), target :: ivar
+   integer(omp_interop_rc_kind) :: res
+   integer(omp_interop_kind) :: obj
+   integer(omp_interop_fr_kind) :: fr
+   integer(kind(hipSuccess)) :: hip_err
+   integer(c_int) :: hip_dev, dev_stream
+   type(c_ptr) :: hip_ctx, hip_sm
+ 
+   logical :: vendor_is_amd
+ 
+   obj = omp_interop_none
+ 
+   !$omp interop init(target, targetsync, prefer_type("hip") : obj)
+ 
+   fr = omp_get_interop_int (obj, omp_ipr_fr_id, res)
+   if (res /= omp_irc_success) error stop 1
+   if (fr /= omp_ifr_hip) error stop 1
+ 
+   ivar = omp_get_interop_int (obj, omp_ipr_vendor, res)
+   if (ivar == 1) then  ! AMD
+     vendor_is_amd = .true.
+   else if (ivar == 11) then  ! Nvidia
+     vendor_is_amd = .false.
+   else
+     error stop 1  ! Unknown
+   endif
+ #if USE_CUDA_NAMES
+   if (vendor_is_amd) error stop 1
+ #else
+   if (.not. vendor_is_amd) error stop 1
+ #endif
+ 
+   ! Check whether the omp_ipr_device -> hipDevice_t yields a valid device.
+ 
+   hip_dev = omp_get_interop_int (obj, omp_ipr_device, res)
+   if (res /= omp_irc_success) error stop 1
+ 
+ ! AMD messed up in Fortran with the attribute handling, missing the
+ ! translation table it has for C.
+ block
+   enum, bind(c)
+     enumerator :: cudaDevAttrClockRate = 13
+     enumerator :: cudaDevAttrMaxGridDimX = 5
+   end enum
+ 
+   ! Assume a clock size is available and > 1 GHz; value is in kHz.
+   ! c_loc is completely bogus, but as AMD messed up the interface ...
+   ! Cf. https://github.com/ROCm/hipfort/issues/239
+ if (vendor_is_amd) then
+   hip_err = hipDeviceGetAttribute (c_loc(ivar), hipDeviceAttributeClockRate, hip_dev)
+ else
+   hip_err = hipDeviceGetAttribute (c_loc(ivar), cudaDevAttrClockRate, hip_dev)
+ endif
+   if (hip_err /= hipSuccess) error stop 1
+   if (ivar <= 1000000) error stop 1  ! in kHz
+ 
+   ! Assume that the MaxGridDimX is available and > 1024
+   ! c_loc is completely bogus, but as AMD messed up the interface ...
+   ! Cf. https://github.com/ROCm/hipfort/issues/239
+ if (vendor_is_amd) then
+   hip_err = hipDeviceGetAttribute (c_loc(ivar), hipDeviceAttributeMaxGridDimX, hip_dev)
+ else
+   hip_err = hipDeviceGetAttribute (c_loc(ivar), cudaDevAttrMaxGridDimX, hip_dev)
+ endif
+   if (hip_err /= hipSuccess) error stop 1
+   if (ivar <= 1024) error stop 1
+ end block
+ 
+ 
+   ! Check whether the omp_ipr_device_context -> hipCtx_t yields a context.
+ 
+   hip_ctx = omp_get_interop_ptr (obj, omp_ipr_device_context, res)
+   if (res /= omp_irc_success) error stop 1
+ 
+ !  ! Assume API Version > 0 for Nvidia, hipErrorNotSupported for AMD.  */
+ !  ivar = -99
+ !  ! AMD deprectated hipCtxGetApiVersion (in C/C++)
+ !  hip_err = hipCtxGetApiVersion (hip_ctx, c_loc(ivar))
+ !
+ !  if (vendor_is_amd) then
+ !    if (hip_err /= hipErrorNotSupported .or. ivar /= -99) error stop 1
+ !  else
+ !    if (hip_err /= hipSuccess) error stop 1
+ !    if (ivar <= 0) error stop 1
+ !  end if
+ 
+ 
+   ! Check whether the omp_ipr_targetsync -> hipStream_t yields a stream.
+ 
+   hip_sm = omp_get_interop_ptr (obj, omp_ipr_targetsync, res)
+   if (res /= omp_irc_success) error stop 1
+ 
+ ! Skip as this is only in CUDA 12.8
+ !  dev_stream = 99
+ !    ! Not (yet) implemented: https://github.com/ROCm/hipfort/issues/238
+ !    !  hip_err = hipStreamGetDevice (hip_sm, dev_stream)
+ !  hip_err = my_hipStreamGetDevice (hip_sm, dev_stream)
+ !  if (hip_err /= hipSuccess) error stop 1
+ !  if (dev_stream /= hip_dev) error stop 1
+ 
+   ! Get flags of the stream
+   hip_err = hipStreamGetFlags (hip_sm, c_loc (ivar))
+   if (hip_err /= hipSuccess) error stop 1
+   ! Accept any value
+ 
+   ! All jobs should have been completed (as there were none none)
+   hip_err = hipStreamQuery (hip_sm)
+   if (hip_err /= hipSuccess) error stop 1
+ 
+   !$omp interop destroy(obj)
+ end
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9-usm.f90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,11 ----
+ ! { dg-additional-options "-cpp -DUSE_USM_REQUIREMENT=1 -Wno-openmp" }
+ !
+ ! We silence the warning:
+ !  Mapping of polymorphic list item '...' is unspecified behavior [-Wopenmp]
+ !
+ ! Ensure that polymorphic mapping is diagnosed as undefined behavior
+ ! Ensure that static access to polymorphic variables works
+ 
+ ! Run map-alloc-comp-9.f90 in unified-shared-memory mode
+ 
+ #include "map-alloc-comp-9.f90"
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90	Sat May 17 22:32:37 2025
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/map-alloc-comp-9.f90	Sat May 24 22:32:26 2025
***************
*** 1,8 ****
--- 1,19 ----
+ ! { dg-additional-options "-cpp" }
+ !
  ! Ensure that polymorphic mapping is diagnosed as undefined behavior
  ! Ensure that static access to polymorphic variables works
  
+ ! Some extended tests are only run with shared memory
+ ! To enforce this (where possible) on the device side:
+ !   #define USE_USM_REQUIREMENT
+ ! which is done in map-alloc-comp-9-usm.f90
+ 
  subroutine test(case)
  implicit none(type, external)
+ #ifdef USE_USM_REQUIREMENT
+   !$omp requires unified_shared_memory
+ #endif
+ 
  type t
    integer :: x(4)
  end type t
*************** var4%y2(2)%y%x%x = -7 * [1111,2222,3333,
*** 73,82 ****
--- 84,97 ----
  var4%y2(2)%y%x2(1)%x = -8 * [1111,2222,3333,4444]
  var4%y2(2)%y%x2(2)%x = -9 * [1111,2222,3333,4444]
  
+ #ifdef USE_USM_REQUIREMENT
+ is_shared_mem = .true.
+ #else
  is_shared_mem = .false.
  !$omp target map(to: is_shared_mem)
    is_shared_mem = .true.
  !$omp end target
+ #endif
  
  if (case == 1) then
    ! implicit mapping
*************** end subroutine test
*** 532,537 ****
--- 547,556 ----
  program main
    use omp_lib
    implicit none(type, external)
+ #ifdef USE_USM_REQUIREMENT
+   !$omp requires unified_shared_memory
+ #endif
+ 
    interface
      subroutine test(case)
        integer, value :: case
diff -Nrcpad gcc-15-20250517/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90 gcc-15-20250524/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90
*** gcc-15-20250517/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libgomp/testsuite/libgomp.fortran/target-enter-data-8.f90	Sat May 24 22:32:26 2025
***************
*** 0 ****
--- 1,532 ----
+ ! { dg-additional-options "-cpp" }
+ 
+ ! FIXME: Some tests do not work yet. Those are for now in '#if 0'
+ 
+ ! Check that 'map(alloc:' properly works with
+ ! - deferred-length character strings
+ ! - arrays with array descriptors
+ ! For those, the array descriptor / string length must be mapped with 'to:'
+ 
+ program main
+ implicit none
+ 
+ type t
+   integer :: ic(2:5), ic2
+   character(len=11) :: ccstr(3:4), ccstr2
+   character(len=11,kind=4) :: cc4str(3:7), cc4str2
+   integer, pointer :: pc(:), pc2
+   character(len=:), pointer :: pcstr(:), pcstr2
+   character(len=:,kind=4), pointer :: pc4str(:), pc4str2
+ end type t
+ 
+ type(t) :: dt
+ 
+ integer :: ii(5), ii2
+ character(len=11) :: clstr(-1:1), clstr2
+ character(len=11,kind=4) :: cl4str(0:3), cl4str2
+ integer, pointer :: ip(:), ip2
+ integer, allocatable :: ia(:), ia2
+ character(len=:), pointer :: pstr(:), pstr2
+ character(len=:), allocatable :: astr(:), astr2
+ character(len=:,kind=4), pointer :: p4str(:), p4str2
+ character(len=:,kind=4), allocatable :: a4str(:), a4str2
+ 
+ 
+ allocate(dt%pc(5), dt%pc2)
+ allocate(character(len=2) :: dt%pcstr(2))
+ allocate(character(len=4) :: dt%pcstr2)
+ 
+ allocate(character(len=3,kind=4) :: dt%pc4str(2:3))
+ allocate(character(len=5,kind=4) :: dt%pc4str2)
+ 
+ allocate(ip(5), ip2, ia(8), ia2)
+ allocate(character(len=2) :: pstr(-2:0))
+ allocate(character(len=4) :: pstr2)
+ allocate(character(len=6) :: astr(3:5))
+ allocate(character(len=8) :: astr2)
+ 
+ allocate(character(len=3,kind=4) :: p4str(2:4))
+ allocate(character(len=5,kind=4) :: p4str2)
+ allocate(character(len=7,kind=4) :: a4str(-2:3))
+ allocate(character(len=9,kind=4) :: a4str2)
+ 
+ 
+ ! integer :: ic(2:5), ic2
+ 
+ !$omp target enter data map(alloc: dt%ic)
+ !$omp target map(alloc: dt%ic)
+   if (size(dt%ic) /= 4) error stop
+   if (lbound(dt%ic, 1) /= 2) error stop
+   if (ubound(dt%ic, 1) /= 5) error stop
+   dt%ic = [22, 33, 44, 55]
+ !$omp end target
+ !$omp target exit data map(from: dt%ic)
+ if (size(dt%ic) /= 4) error stop
+ if (lbound(dt%ic, 1) /= 2) error stop
+ if (ubound(dt%ic, 1) /= 5) error stop
+ if (any (dt%ic /= [22, 33, 44, 55])) error stop
+ 
+ !$omp target enter data map(alloc: dt%ic2)
+ !$omp target map(alloc: dt%ic2)
+   dt%ic2 = 42
+ !$omp end target
+ !$omp target exit data map(from: dt%ic2)
+ if (dt%ic2 /= 42) error stop
+ 
+ 
+ ! character(len=11) :: ccstr(3:4), ccstr2
+ 
+ !$omp target enter data map(alloc: dt%ccstr)
+ !$omp target map(alloc: dt%ccstr)
+   if (len(dt%ccstr) /= 11) error stop
+   if (size(dt%ccstr) /= 2) error stop
+   if (lbound(dt%ccstr, 1) /= 3) error stop
+   if (ubound(dt%ccstr, 1) /= 4) error stop
+   dt%ccstr = ["12345678901", "abcdefghijk"]
+ !$omp end target
+ !$omp target exit data map(from: dt%ccstr)
+ if (len(dt%ccstr) /= 11) error stop
+ if (size(dt%ccstr) /= 2) error stop
+ if (lbound(dt%ccstr, 1) /= 3) error stop
+ if (ubound(dt%ccstr, 1) /= 4) error stop
+ if (any (dt%ccstr /= ["12345678901", "abcdefghijk"])) error stop
+ 
+ !$omp target enter data map(alloc: dt%ccstr2)
+ !$omp target map(alloc: dt%ccstr2)
+   if (len(dt%ccstr2) /= 11) error stop
+   dt%ccstr2 = "ABCDEFGHIJK"
+ !$omp end target
+ !$omp target exit data map(from: dt%ccstr2)
+ if (len(dt%ccstr2) /= 11) error stop
+ if (dt%ccstr2 /= "ABCDEFGHIJK") error stop
+ 
+ 
+ ! character(len=11,kind=4) :: cc4str(3:7), cc4str2
+ 
+ #if 0
+ ! Value check fails
+ !$omp target map(alloc: dt%cc4str)
+   if (len(dt%cc4str) /= 11) error stop
+   if (size(dt%cc4str) /= 5) error stop
+   if (lbound(dt%cc4str, 1) /= 3) error stop
+   if (ubound(dt%cc4str, 1) /= 7) error stop
+   dt%cc4str = [4_"12345678901", 4_"abcdefghijk", &
+                4_"qerftcea6ds", 4_"a1f9g37ga4.", &
+                4_"45ngwj56sj2"]
+ !$omp end target
+ !$omp target exit data map(from: dt%cc4str)
+ if (len(dt%cc4str) /= 11) error stop
+ if (size(dt%cc4str) /= 5) error stop
+ if (lbound(dt%cc4str, 1) /= 3) error stop
+ if (ubound(dt%cc4str, 1) /= 7) error stop
+ if (dt%cc4str(3) /= 4_"12345678901") error stop
+ if (dt%cc4str(4) /= 4_"abcdefghijk") error stop
+ if (dt%cc4str(5) /= 4_"qerftcea6ds") error stop
+ if (dt%cc4str(6) /= 4_"a1f9g37ga4.") error stop
+ if (dt%cc4str(7) /= 4_"45ngwj56sj2") error stop
+ #endif
+ 
+ !$omp target enter data map(alloc: dt%cc4str2)
+ !$omp target map(alloc: dt%cc4str2)
+   if (len(dt%cc4str2) /= 11) error stop
+   dt%cc4str2 = 4_"ABCDEFGHIJK"
+ !$omp end target
+ !$omp target exit data map(from: dt%cc4str2)
+ if (len(dt%cc4str2) /= 11) error stop
+ if (dt%cc4str2 /= 4_"ABCDEFGHIJK") error stop
+ 
+ 
+ ! integer, pointer :: pc(:), pc2
+ ! allocate(dt%pc(5), dt%pc2)
+ 
+ !$omp target enter data map(alloc: dt%pc)
+ !$omp target map(alloc: dt%pc)
+   if (.not. associated(dt%pc)) error stop
+   if (size(dt%pc) /= 5) error stop
+   if (lbound(dt%pc, 1) /= 1) error stop
+   if (ubound(dt%pc, 1) /= 5) error stop
+   dt%pc = [11, 22, 33, 44, 55]
+ !$omp end target
+ !$omp target exit data map(from: dt%pc)
+ if (.not. associated(dt%pc)) error stop
+ if (size(dt%pc) /= 5) error stop
+ if (lbound(dt%pc, 1) /= 1) error stop
+ if (ubound(dt%pc, 1) /= 5) error stop
+ if (any (dt%pc /= [11, 22, 33, 44, 55])) error stop
+ 
+ !$omp target enter data map(alloc: dt%pc2)
+ !$omp target map(alloc: dt%pc2)
+   if (.not. associated(dt%pc2)) error stop
+   dt%pc2 = 99
+ !$omp end target
+ !$omp target exit data map(from: dt%pc2)
+ if (dt%pc2 /= 99) error stop
+ if (.not. associated(dt%pc2)) error stop
+ 
+ 
+ ! character(len=:), pointer :: pcstr(:), pcstr2
+ ! allocate(character(len=2) :: dt%pcstr(2))
+ ! allocate(character(len=4) :: dt%pcstr2)
+ 
+ !$omp target enter data map(alloc: dt%pcstr)
+ !$omp target map(alloc: dt%pcstr)
+   if (.not. associated(dt%pcstr)) error stop
+   if (len(dt%pcstr) /= 2) error stop
+   if (size(dt%pcstr) /= 2) error stop
+   if (lbound(dt%pcstr, 1) /= 1) error stop
+   if (ubound(dt%pcstr, 1) /= 2) error stop
+   dt%pcstr = ["01", "jk"]
+ !$omp end target
+ !$omp target exit data map(from: dt%pcstr)
+ if (.not. associated(dt%pcstr)) error stop
+ if (len(dt%pcstr) /= 2) error stop
+ if (size(dt%pcstr) /= 2) error stop
+ if (lbound(dt%pcstr, 1) /= 1) error stop
+ if (ubound(dt%pcstr, 1) /= 2) error stop
+ if (any (dt%pcstr /= ["01", "jk"])) error stop
+ 
+ 
+ !$omp target enter data map(alloc: dt%pcstr2)
+ !$omp target map(alloc: dt%pcstr2)
+   if (.not. associated(dt%pcstr2)) error stop
+   if (len(dt%pcstr2) /= 4) error stop
+   dt%pcstr2 = "HIJK"
+ !$omp end target
+ !$omp target exit data map(from: dt%pcstr2)
+ if (.not. associated(dt%pcstr2)) error stop
+ if (len(dt%pcstr2) /= 4) error stop
+ if (dt%pcstr2 /= "HIJK") error stop
+ 
+ 
+ ! character(len=:,kind=4), pointer :: pc4str(:), pc4str2
+ ! allocate(character(len=3,kind=4) :: dt%pc4str(2:3))
+ ! allocate(character(len=5,kind=4) :: dt%pc4str2)
+ 
+ !$omp target enter data map(alloc: dt%pc4str)
+ !$omp target map(alloc: dt%pc4str)
+   if (.not. associated(dt%pc4str)) error stop
+   if (len(dt%pc4str) /= 3) error stop
+   if (size(dt%pc4str) /= 2) error stop
+   if (lbound(dt%pc4str, 1) /= 2) error stop
+   if (ubound(dt%pc4str, 1) /= 3) error stop
+   dt%pc4str = [4_"456", 4_"tzu"]
+ !$omp end target
+ !$omp target exit data map(from: dt%pc4str)
+ if (.not. associated(dt%pc4str)) error stop
+ if (len(dt%pc4str) /= 3) error stop
+ if (size(dt%pc4str) /= 2) error stop
+ if (lbound(dt%pc4str, 1) /= 2) error stop
+ if (ubound(dt%pc4str, 1) /= 3) error stop
+ if (dt%pc4str(2) /= 4_"456") error stop
+ if (dt%pc4str(3) /= 4_"tzu") error stop
+ 
+ !$omp target enter data map(alloc: dt%pc4str2)
+ !$omp target map(alloc: dt%pc4str2)
+   if (.not. associated(dt%pc4str2)) error stop
+   if (len(dt%pc4str2) /= 5) error stop
+   dt%pc4str2 = 4_"98765"
+ !$omp end target
+ !$omp target exit data map(from: dt%pc4str2)
+ if (.not. associated(dt%pc4str2)) error stop
+ if (len(dt%pc4str2) /= 5) error stop
+ if (dt%pc4str2 /= 4_"98765") error stop
+ 
+ 
+ ! integer :: ii(5), ii2
+ 
+ !$omp target enter data map(alloc: ii)
+ !$omp target map(alloc: ii)
+   if (size(ii) /= 5) error stop
+   if (lbound(ii, 1) /= 1) error stop
+   if (ubound(ii, 1) /= 5) error stop
+   ii = [-1, -2, -3, -4, -5]
+ !$omp end target
+ !$omp target exit data map(from: ii)
+ if (size(ii) /= 5) error stop
+ if (lbound(ii, 1) /= 1) error stop
+ if (ubound(ii, 1) /= 5) error stop
+ if (any (ii /= [-1, -2, -3, -4, -5])) error stop
+ 
+ !$omp target enter data map(alloc: ii2)
+ !$omp target map(alloc: ii2)
+   ii2 = -410
+ !$omp end target
+ !$omp target exit data map(from: ii2)
+ if (ii2 /= -410) error stop
+ 
+ 
+ ! character(len=11) :: clstr(-1:1), clstr2
+ 
+ !$omp target enter data map(alloc: clstr)
+ !$omp target map(alloc: clstr)
+   if (len(clstr) /= 11) error stop
+   if (size(clstr) /= 3) error stop
+   if (lbound(clstr, 1) /= -1) error stop
+   if (ubound(clstr, 1) /= 1) error stop
+   clstr = ["12345678901", "abcdefghijk", "ABCDEFGHIJK"]
+ !$omp end target
+ !$omp target exit data map(from: clstr)
+ if (len(clstr) /= 11) error stop
+ if (size(clstr) /= 3) error stop
+ if (lbound(clstr, 1) /= -1) error stop
+ if (ubound(clstr, 1) /= 1) error stop
+ if (any (clstr /= ["12345678901", "abcdefghijk", "ABCDEFGHIJK"])) error stop
+ 
+ !$omp target enter data map(alloc: clstr2)
+ !$omp target map(alloc: clstr2)
+   if (len(clstr2) /= 11) error stop
+   clstr2 = "ABCDEFghijk"
+ !$omp end target
+ !$omp target exit data map(from: clstr2)
+ if (len(clstr2) /= 11) error stop
+ if (clstr2 /= "ABCDEFghijk") error stop
+ 
+ 
+ ! character(len=11,kind=4) :: cl4str(0:3), cl4str2
+ 
+ !$omp target enter data map(alloc: cl4str)
+ !$omp target map(alloc: cl4str)
+   if (len(cl4str) /= 11) error stop
+   if (size(cl4str) /= 4) error stop
+   if (lbound(cl4str, 1) /= 0) error stop
+   if (ubound(cl4str, 1) /= 3) error stop
+   cl4str = [4_"12345678901", 4_"abcdefghijk", &
+             4_"qerftcea6ds", 4_"a1f9g37ga4."]
+ !$omp end target
+ !$omp target exit data map(from: cl4str)
+ if (len(cl4str) /= 11) error stop
+ if (size(cl4str) /= 4) error stop
+ if (lbound(cl4str, 1) /= 0) error stop
+ if (ubound(cl4str, 1) /= 3) error stop
+ if (cl4str(0) /= 4_"12345678901") error stop
+ if (cl4str(1) /= 4_"abcdefghijk") error stop
+ if (cl4str(2) /= 4_"qerftcea6ds") error stop
+ if (cl4str(3) /= 4_"a1f9g37ga4.") error stop
+ 
+ !$omp target enter data map(alloc: cl4str2)
+ !$omp target map(alloc: cl4str2)
+   if (len(cl4str2) /= 11) error stop
+   cl4str2 = 4_"ABCDEFGHIJK"
+ !$omp end target
+ !$omp target exit data map(from: cl4str2)
+ if (len(cl4str2) /= 11) error stop
+ if (cl4str2 /= 4_"ABCDEFGHIJK") error stop
+ 
+ 
+ ! allocate(ip(5), ip2, ia(8), ia2)
+ 
+ !$omp target enter data map(alloc: ip)
+ !$omp target map(alloc: ip)
+   if (.not. associated(ip)) error stop
+   if (size(ip) /= 5) error stop
+   if (lbound(ip, 1) /= 1) error stop
+   if (ubound(ip, 1) /= 5) error stop
+   ip = [11, 22, 33, 44, 55]
+ !$omp end target
+ !$omp target exit data map(from: ip)
+ if (.not. associated(ip)) error stop
+ if (size(ip) /= 5) error stop
+ if (lbound(ip, 1) /= 1) error stop
+ if (ubound(ip, 1) /= 5) error stop
+ if (any (ip /= [11, 22, 33, 44, 55])) error stop
+ 
+ !$omp target enter data map(alloc: ip2)
+ !$omp target map(alloc: ip2)
+   if (.not. associated(ip2)) error stop
+   ip2 = 99
+ !$omp end target
+ !$omp target exit data map(from: ip2)
+ if (ip2 /= 99) error stop
+ if (.not. associated(ip2)) error stop
+ 
+ 
+ ! allocate(ip(5), ip2, ia(8), ia2)
+ 
+ !$omp target enter data map(alloc: ia)
+ !$omp target map(alloc: ia)
+   if (.not. allocated(ia)) error stop
+   if (size(ia) /= 8) error stop
+   if (lbound(ia, 1) /= 1) error stop
+   if (ubound(ia, 1) /= 8) error stop
+   ia = [1,2,3,4,5,6,7,8]
+ !$omp end target
+ !$omp target exit data map(from: ia)
+ if (.not. allocated(ia)) error stop
+ if (size(ia) /= 8) error stop
+ if (lbound(ia, 1) /= 1) error stop
+ if (ubound(ia, 1) /= 8) error stop
+ if (any (ia /= [1,2,3,4,5,6,7,8])) error stop
+ 
+ !$omp target enter data map(alloc: ia2)
+ !$omp target map(alloc: ia2)
+   if (.not. allocated(ia2)) error stop
+   ia2 = 102
+ !$omp end target
+ !$omp target exit data map(from: ia2)
+ if (ia2 /= 102) error stop
+ if (.not. allocated(ia2)) error stop
+ 
+ 
+ ! character(len=:), pointer :: pstr(:), pstr2
+ ! allocate(character(len=2) :: pstr(-2:0))
+ ! allocate(character(len=4) :: pstr2)
+ 
+ !$omp target enter data map(alloc: pstr)
+ !$omp target map(alloc: pstr)
+   if (.not. associated(pstr)) error stop
+   if (len(pstr) /= 2) error stop
+   if (size(pstr) /= 3) error stop
+   if (lbound(pstr, 1) /= -2) error stop
+   if (ubound(pstr, 1) /= 0) error stop
+   pstr = ["01", "jk", "aq"]
+ !$omp end target
+ !$omp target exit data map(from: pstr)
+ if (.not. associated(pstr)) error stop
+ if (len(pstr) /= 2) error stop
+ if (size(pstr) /= 3) error stop
+ if (lbound(pstr, 1) /= -2) error stop
+ if (ubound(pstr, 1) /= 0) error stop
+ if (any (pstr /= ["01", "jk", "aq"])) error stop
+ 
+ !$omp target enter data map(alloc: pstr2)
+ !$omp target map(alloc: pstr2)
+   if (.not. associated(pstr2)) error stop
+   if (len(pstr2) /= 4) error stop
+   pstr2 = "HIJK"
+ !$omp end target
+ !$omp target exit data map(from: pstr2)
+ if (.not. associated(pstr2)) error stop
+ if (len(pstr2) /= 4) error stop
+ if (pstr2 /= "HIJK") error stop
+ 
+ 
+ ! character(len=:), allocatable :: astr(:), astr2
+ ! allocate(character(len=6) :: astr(3:5))
+ ! allocate(character(len=8) :: astr2)
+ 
+ 
+ !$omp target enter data map(alloc: astr)
+ !$omp target map(alloc: astr)
+   if (.not. allocated(astr)) error stop
+   if (len(astr) /= 6) error stop
+   if (size(astr) /= 3) error stop
+   if (lbound(astr, 1) /= 3) error stop
+   if (ubound(astr, 1) /= 5) error stop
+   astr = ["01db45", "jk$D%S", "zutg47"]
+ !$omp end target
+ !$omp target exit data map(from: astr)
+ if (.not. allocated(astr)) error stop
+ if (len(astr) /= 6) error stop
+ if (size(astr) /= 3) error stop
+ if (lbound(astr, 1) /= 3) error stop
+ if (ubound(astr, 1) /= 5) error stop
+ if (any (astr /= ["01db45", "jk$D%S", "zutg47"])) error stop
+ 
+ 
+ !$omp target enter data map(alloc: astr2)
+ !$omp target map(alloc: astr2)
+   if (.not. allocated(astr2)) error stop
+   if (len(astr2) /= 8) error stop
+   astr2 = "HIJKhijk"
+ !$omp end target
+ !$omp target exit data map(from: astr2)
+ if (.not. allocated(astr2)) error stop
+ if (len(astr2) /= 8) error stop
+ if (astr2 /= "HIJKhijk") error stop
+ 
+ 
+ ! character(len=:,kind=4), pointer :: p4str(:), p4str2
+ ! allocate(character(len=3,kind=4) :: p4str(2:4))
+ ! allocate(character(len=5,kind=4) :: p4str2)
+ 
+ ! FAILS with value check
+ 
+ !$omp target enter data map(alloc: p4str)
+ !$omp target map(alloc: p4str)
+   if (.not. associated(p4str)) error stop
+   if (len(p4str) /= 3) error stop
+   if (size(p4str) /= 3) error stop
+   if (lbound(p4str, 1) /= 2) error stop
+   if (ubound(p4str, 1) /= 4) error stop
+   p4str(:) = [4_"f85", 4_"8af", 4_"A%F"]
+ !$omp end target
+ !$omp target exit data map(from: p4str)
+ if (.not. associated(p4str)) error stop
+ if (len(p4str) /= 3) error stop
+ if (size(p4str) /= 3) error stop
+ if (lbound(p4str, 1) /= 2) error stop
+ if (ubound(p4str, 1) /= 4) error stop
+ if (p4str(2)  /= 4_"f85") error stop
+ if (p4str(3)  /= 4_"8af") error stop
+ if (p4str(4)  /= 4_"A%F") error stop
+ 
+ !$omp target enter data map(alloc: p4str2)
+ !$omp target map(alloc: p4str2)
+   if (.not. associated(p4str2)) error stop
+   if (len(p4str2) /= 5) error stop
+   p4str2 = 4_"9875a"
+ !$omp end target
+ !$omp target exit data map(from: p4str2)
+ if (.not. associated(p4str2)) error stop
+ if (len(p4str2) /= 5) error stop
+ if (p4str2 /= 4_"9875a") error stop
+ 
+ 
+ ! character(len=:,kind=4), allocatable :: a4str(:), a4str2
+ ! allocate(character(len=7,kind=4) :: a4str(-2:3))
+ ! allocate(character(len=9,kind=4) :: a4str2)
+ 
+ !$omp target enter data map(alloc: a4str)
+ !$omp target map(alloc: a4str)
+   if (.not. allocated(a4str)) error stop
+   if (len(a4str) /= 7) error stop
+   if (size(a4str) /= 6) error stop
+   if (lbound(a4str, 1) /= -2) error stop
+   if (ubound(a4str, 1) /= 3) error stop
+   ! See PR fortran/107508 why '(:)' is required
+   a4str(:) = [4_"sf456aq", 4_"3dtzu24", 4_"_4fh7sm", 4_"=ff85s7", 4_"j=8af4d", 4_".,A%Fsz"]
+ !$omp end target
+ !$omp target exit data map(from: a4str)
+ if (.not. allocated(a4str)) error stop
+ if (len(a4str) /= 7) error stop
+ if (size(a4str) /= 6) error stop
+ if (lbound(a4str, 1) /= -2) error stop
+ if (ubound(a4str, 1) /= 3) error stop
+ if (a4str(-2) /= 4_"sf456aq") error stop
+ if (a4str(-1) /= 4_"3dtzu24") error stop
+ if (a4str(0)  /= 4_"_4fh7sm") error stop
+ if (a4str(1)  /= 4_"=ff85s7") error stop
+ if (a4str(2)  /= 4_"j=8af4d") error stop
+ if (a4str(3)  /= 4_".,A%Fsz") error stop
+ 
+ !$omp target enter data map(alloc: a4str2)
+ !$omp target map(alloc: a4str2)
+   if (.not. allocated(a4str2)) error stop
+   if (len(a4str2) /= 9) error stop
+   a4str2 = 4_"98765a23d"
+ !$omp end target
+ !$omp target exit data map(from: a4str2)
+ if (.not. allocated(a4str2)) error stop
+ if (len(a4str2) /= 9) error stop
+ if (a4str2 /= 4_"98765a23d") error stop
+ 
+ 
+ deallocate(dt%pc, dt%pc2)
+ deallocate(dt%pcstr)
+ deallocate(dt%pcstr2)
+ 
+ deallocate(dt%pc4str)
+ deallocate(dt%pc4str2)
+ 
+ deallocate(ip, ip2, ia, ia2)
+ deallocate(pstr)
+ deallocate(pstr2)
+ deallocate(astr)
+ deallocate(astr2)
+ 
+ deallocate(p4str)
+ deallocate(p4str2)
+ deallocate(a4str)
+ deallocate(a4str2)
+ 
+ end
diff -Nrcpad gcc-15-20250517/libstdc++-v3/ChangeLog gcc-15-20250524/libstdc++-v3/ChangeLog
*** gcc-15-20250517/libstdc++-v3/ChangeLog	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/ChangeLog	Sat May 24 22:32:27 2025
***************
*** 1,3 ****
--- 1,61 ----
+ 2025-05-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-20  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* doc/xml/faq.xml: Update URL for archived SGI STL docs.
+ 	* doc/xml/manual/containers.xml: Likewise.
+ 	* doc/xml/manual/extensions.xml: Likewise.
+ 	* doc/xml/manual/using.xml: Likewise.
+ 	* doc/xml/manual/utilities.xml: Likewise.
+ 	* doc/html/*: Regenerate.
+ 
+ 2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	* include/std/ranges (_ZipTransform::operator()): Remove name of
+ 	unused parameter.
+ 	(chunk_view::_Iterator, stride_view::_Iterator): Likewise.
+ 	(join_with_view): Declare _Iterator and _Sentinel as class
+ 	instead of struct.
+ 	(repeat_view): Declare _Iterator as class instead of struct.
+ 
+ 2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120293
+ 	* include/bits/chrono_io.h (_M_format_to_ostream): Add special
+ 	case for local_time convertible to local_days.
+ 	* testsuite/std/time/clock/local/io.cc: Check formatting of
+ 	chrono::local_days.
+ 
+ 2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-06  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120029
+ 	* src/c++17/fs_path.cc (path::operator+=(const path&)): Handle
+ 	parameters that alias the path or one of its components.
+ 	* testsuite/27_io/filesystem/path/concat/120029.cc: New test.
+ 	* testsuite/experimental/filesystem/path/concat/120029.cc: New
+ 	test.
+ 
+ 2025-05-19  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	Backported from master:
+ 	2025-05-15  Jonathan Wakely  <jwakely@redhat.com>
+ 
+ 	PR libstdc++/120190
+ 	* include/std/format (format_kind): Adjust primary template to
+ 	not depend on itself.
+ 	* testsuite/std/format/ranges/format_kind_neg.cc: Adjust
+ 	expected errors. Check more invalid specializations.
+ 
  2025-05-12  Jonathan Wakely  <jwakely@redhat.com>
  
  	Backported from master:
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/html/faq.html gcc-15-20250524/libstdc++-v3/doc/html/faq.html
*** gcc-15-20250517/libstdc++-v3/doc/html/faq.html	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/html/faq.html	Sat May 24 22:32:27 2025
***************
*** 796,802 ****
      Libstdc++-v3 incorporates a lot of code from
      <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">the SGI STL</a>
      (the final merge was from
!     <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/whats_new.html" target="_top">release 3.3</a>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </p><p>
--- 796,802 ----
      Libstdc++-v3 incorporates a lot of code from
      <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">the SGI STL</a>
      (the final merge was from
!     <a class="link" href="https://web.archive.org/web/20171206110416/http://www.sgi.com/tech/stl/whats_new.html" target="_top">release 3.3</a>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </p><p>
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/html/manual/containers.html gcc-15-20250524/libstdc++-v3/doc/html/manual/containers.html
*** gcc-15-20250517/libstdc++-v3/doc/html/manual/containers.html	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/html/manual/containers.html	Sat May 24 22:32:27 2025
***************
*** 11,17 ****
       Yes it is, at least using the <a class="link" href="using_dual_abi.html" title="Dual ABI">old
       ABI</a>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
     </p><div class="blockquote"><blockquote class="blockquote"><p>
         The size() member function, for list and slist, takes time
         proportional to the number of elements in the list.  This was a
--- 11,17 ----
       Yes it is, at least using the <a class="link" href="using_dual_abi.html" title="Dual ABI">old
       ABI</a>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <a class="link" href="https://web.archive.org/web/20161222192301/http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
     </p><div class="blockquote"><blockquote class="blockquote"><p>
         The size() member function, for list and slist, takes time
         proportional to the number of elements in the list.  This was a
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/html/manual/ext_numerics.html gcc-15-20250524/libstdc++-v3/doc/html/manual/ext_numerics.html
*** gcc-15-20250517/libstdc++-v3/doc/html/manual/ext_numerics.html	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/html/manual/ext_numerics.html	Sat May 24 22:32:27 2025
***************
*** 14,20 ****
     The operation functor must be associative.
  </p><p>The <code class="code">iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/iota.html" target="_top">SGI
     documentation</a>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code class="code">value</code> to <code class="code">*first</code>,
     <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
--- 14,20 ----
     The operation functor must be associative.
  </p><p>The <code class="code">iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <a class="link" href="https://web.archive.org/web/20170201044840/http://www.sgi.com/tech/stl/iota.html" target="_top">SGI
     documentation</a>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code class="code">value</code> to <code class="code">*first</code>,
     <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/html/manual/ext_sgi.html gcc-15-20250524/libstdc++-v3/doc/html/manual/ext_sgi.html
*** gcc-15-20250517/libstdc++-v3/doc/html/manual/ext_sgi.html	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/html/manual/ext_sgi.html	Sat May 24 22:32:27 2025
***************
*** 28,39 ****
        and sets.
     </p><p>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/HashFunction.html" target="_top">hashing
        function</a> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/hash.html" target="_top">hash</a>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </p><p>The hashing classes support all the usual associative container
--- 28,39 ----
        and sets.
     </p><p>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <a class="link" href="https://web.archive.org/web/20171230172024/http://www.sgi.com/tech/stl/HashFunction.html" target="_top">hashing
        function</a> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <a class="link" href="https://web.archive.org/web/20171230172200/http://www.sgi.com/tech/stl/hash.html" target="_top">hash</a>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </p><p>The hashing classes support all the usual associative container
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/html/manual/using_concurrency.html gcc-15-20250524/libstdc++-v3/doc/html/manual/using_concurrency.html
*** gcc-15-20250517/libstdc++-v3/doc/html/manual/using_concurrency.html	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/html/manual/using_concurrency.html	Sat May 24 22:32:27 2025
*************** The standard places requirements on the
*** 40,46 ****
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI STL</a> definition of thread safety, which the library used
  prior to the 2011 standard.
  </p><p>The library strives to be thread-safe when all of the following
  	 conditions are met:
--- 40,46 ----
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <a class="link" href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI STL</a> definition of thread safety, which the library used
  prior to the 2011 standard.
  </p><p>The library strives to be thread-safe when all of the following
  	 conditions are met:
*************** gcc version 4.1.2 20070925 (Red Hat 4.1.
*** 243,252 ****
        threaded and non-threaded code), see Chapter 17.
     </p><p>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html</a> and
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html" target="_top">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html</a>.
     </p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
        container-memory allocator on those pages.  For the sake of this
--- 243,252 ----
        threaded and non-threaded code), see Chapter 17.
     </p><p>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <a class="link" href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html" target="_top">SGI's
!       https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html</a> and
!       <a class="link" href="https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html" target="_top">SGI's
!       https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html</a>.
     </p><p><span class="emphasis"><em>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
        container-memory allocator on those pages.  For the sake of this
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/html/manual/utilities.html gcc-15-20250524/libstdc++-v3/doc/html/manual/utilities.html
*** gcc-15-20250517/libstdc++-v3/doc/html/manual/utilities.html	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/html/manual/utilities.html	Sat May 24 22:32:27 2025
***************
*** 11,16 ****
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html" target="_top">their
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html</a>.
     </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="std_contents.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
\ No newline at end of file
--- 11,16 ----
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <a class="link" href="https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html" target="_top">their
!       https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html</a>.
     </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="concept_checking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="std_contents.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
\ No newline at end of file
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/xml/faq.xml gcc-15-20250524/libstdc++-v3/doc/xml/faq.xml
*** gcc-15-20250517/libstdc++-v3/doc/xml/faq.xml	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/xml/faq.xml	Sat May 24 22:32:27 2025
***************
*** 1130,1136 ****
      Libstdc++-v3 incorporates a lot of code from
      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">the SGI STL</link>
      (the final merge was from
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/whats_new.html">release 3.3</link>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </para>
--- 1130,1136 ----
      Libstdc++-v3 incorporates a lot of code from
      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">the SGI STL</link>
      (the final merge was from
!     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171206110416/http://www.sgi.com/tech/stl/whats_new.html">release 3.3</link>).
      The code in libstdc++ contains many fixes and changes compared to the
      original SGI code.
      </para>
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/xml/manual/containers.xml gcc-15-20250524/libstdc++-v3/doc/xml/manual/containers.xml
*** gcc-15-20250517/libstdc++-v3/doc/xml/manual/containers.xml	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/xml/manual/containers.xml	Sat May 24 22:32:27 2025
***************
*** 28,34 ****
       Yes it is, at least using the <link linkend="manual.intro.using.abi">old
       ABI</link>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/FAQ.html">their FAQ</link>:
     </para>
     <blockquote>
       <para>
--- 28,34 ----
       Yes it is, at least using the <link linkend="manual.intro.using.abi">old
       ABI</link>, and that's okay.  This is a decision that we preserved
       when we imported SGI's STL implementation.  The following is
!      quoted from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20161222192301/http://www.sgi.com/tech/stl/FAQ.html">their FAQ</link>:
     </para>
     <blockquote>
       <para>
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/xml/manual/extensions.xml gcc-15-20250524/libstdc++-v3/doc/xml/manual/extensions.xml
*** gcc-15-20250517/libstdc++-v3/doc/xml/manual/extensions.xml	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/xml/manual/extensions.xml	Sat May 24 22:32:27 2025
*************** extensions, be aware of two things:
*** 227,238 ****
     </para>
     <para>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/HashFunction.html">hashing
        function</link> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/hash.html">hash</link>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </para>
--- 227,238 ----
     </para>
     <para>Each of the associative containers map, multimap, set, and multiset
        have a counterpart which uses a
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171230172024/http://www.sgi.com/tech/stl/HashFunction.html">hashing
        function</link> to do the arranging, instead of a strict weak ordering
        function.  The classes take as one of their template parameters a
        function object that will return the hash value; by default, an
        instantiation of
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171230172200/http://www.sgi.com/tech/stl/hash.html">hash</link>.
        You should specialize this functor for your class, or define your own,
        before trying to use one of the hashing classes.
     </para>
*************** get_temporary_buffer(5, (int*)0);
*** 394,400 ****
  </para>
  <para>The <code>iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/iota.html">SGI
     documentation</link>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code>value</code> to <code>*first</code>,
     <code>value + 1</code> to<code> *(first + 1)</code> and so on."
--- 394,400 ----
  </para>
  <para>The <code>iota</code> function wins the award for Extension With the
     Coolest Name (the name comes from Ken Iverson's APL language.)  As
!    described in the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20170201044840/http://www.sgi.com/tech/stl/iota.html">SGI
     documentation</link>, it "assigns sequentially increasing values to a range.
     That is, it assigns <code>value</code> to <code>*first</code>,
     <code>value + 1</code> to<code> *(first + 1)</code> and so on."
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/xml/manual/using.xml gcc-15-20250524/libstdc++-v3/doc/xml/manual/using.xml
*** gcc-15-20250517/libstdc++-v3/doc/xml/manual/using.xml	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/xml/manual/using.xml	Sat May 24 22:32:27 2025
*************** The standard places requirements on the
*** 1951,1957 ****
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety, which the library used
  prior to the 2011 standard.
  </para>
  
--- 1951,1957 ----
  races are caused by the library itself or by programs which use the
  library correctly (as described below).
  The C++11 memory model and library requirements are a more formal version
! of the <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html">SGI STL</link> definition of thread safety, which the library used
  prior to the 2011 standard.
  </para>
  
*************** gcc version 4.1.2 20070925 (Red Hat 4.1.
*** 2236,2245 ****
     </para>
     <para>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/thread_safety.html</link> and
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html">SGI's
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/Allocators.html</link>.
     </para>
     <para><emphasis>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
--- 2236,2245 ----
     </para>
     <para>Two excellent pages to read when working with the Standard C++
        containers and threads are
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html">SGI's
!       https://web.archive.org/web/20171221154911/http://www.sgi.com/tech/stl/thread_safety.html</link> and
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html">SGI's
!       https://web.archive.org/web/20171108142526/http://www.sgi.com/tech/stl/Allocators.html</link>.
     </para>
     <para><emphasis>However, please ignore all discussions about the user-level
        configuration of the lock implementation inside the STL
diff -Nrcpad gcc-15-20250517/libstdc++-v3/doc/xml/manual/utilities.xml gcc-15-20250524/libstdc++-v3/doc/xml/manual/utilities.xml
*** gcc-15-20250517/libstdc++-v3/doc/xml/manual/utilities.xml	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/doc/xml/manual/utilities.xml	Sat May 24 22:32:27 2025
***************
*** 22,29 ****
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html">their
!       https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/functors.html</link>.
     </para>
  </section>
  
--- 22,29 ----
        get slightly the wrong idea.  In the interest of not reinventing
        the wheel, we will refer you to the introduction to the functor
        concept written by SGI as part of their STL, in
!       <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html">their
!       https://web.archive.org/web/20171209002754/http://www.sgi.com/tech/stl/functors.html</link>.
     </para>
  </section>
  
diff -Nrcpad gcc-15-20250517/libstdc++-v3/include/bits/chrono_io.h gcc-15-20250524/libstdc++-v3/include/bits/chrono_io.h
*** gcc-15-20250517/libstdc++-v3/include/bits/chrono_io.h	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/include/bits/chrono_io.h	Sat May 24 22:32:27 2025
*************** namespace __format
*** 782,787 ****
--- 782,790 ----
  		  // sys_time with period greater or equal to days:
  		  if constexpr (is_convertible_v<_Tp, chrono::sys_days>)
  		    __os << _S_date(__t);
+ 		  // Or a local_time with period greater or equal to days:
+ 		  else if constexpr (is_convertible_v<_Tp, chrono::local_days>)
+ 		    __os << _S_date(__t);
  		  else // Or it's formatted as "{:L%F %T}":
  		    {
  		      auto __days = chrono::floor<chrono::days>(__t);
diff -Nrcpad gcc-15-20250517/libstdc++-v3/include/std/format gcc-15-20250524/libstdc++-v3/include/std/format
*** gcc-15-20250517/libstdc++-v3/include/std/format	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/include/std/format	Sat May 24 22:32:28 2025
*************** namespace __format
*** 5111,5123 ****
      debug_string
    };
  
!   /// @cond undocumented
    template<typename _Rg>
!     constexpr auto format_kind =
!     __primary_template_not_defined(
!       format_kind<_Rg> // you can specialize this for non-const input ranges
!     );
  
    template<typename _Tp>
      consteval range_format
      __fmt_kind()
--- 5111,5132 ----
      debug_string
    };
  
!   /** @brief A constant determining how a range should be formatted.
!    *
!    * The primary template of `std::format_kind` cannot be instantiated.
!    * There is a partial specialization for input ranges and you can
!    * specialize the variable template for your own cv-unqualified types
!    * that satisfy the `ranges::input_range` concept.
!    *
!    * @since C++23
!    */
    template<typename _Rg>
!     constexpr auto format_kind = []{
!       static_assert(false, "cannot use primary template of 'std::format_kind'");
!       return type_identity<_Rg>{};
!     }();
  
+   /// @cond undocumented
    template<typename _Tp>
      consteval range_format
      __fmt_kind()
diff -Nrcpad gcc-15-20250517/libstdc++-v3/include/std/ranges gcc-15-20250524/libstdc++-v3/include/std/ranges
*** gcc-15-20250517/libstdc++-v3/include/std/ranges	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/include/std/ranges	Sat May 24 22:32:28 2025
*************** namespace views::__adaptor
*** 5336,5342 ****
  	requires move_constructible<decay_t<_Fp>> && regular_invocable<decay_t<_Fp>&>
  	  && is_object_v<decay_t<invoke_result_t<decay_t<_Fp>&>>>
  	constexpr auto
! 	operator() [[nodiscard]] (_Fp&& __f) const
  	{
  	  return views::empty<decay_t<invoke_result_t<decay_t<_Fp>&>>>;
  	}
--- 5336,5342 ----
  	requires move_constructible<decay_t<_Fp>> && regular_invocable<decay_t<_Fp>&>
  	  && is_object_v<decay_t<invoke_result_t<decay_t<_Fp>&>>>
  	constexpr auto
! 	operator() [[nodiscard]] (_Fp&&) const
  	{
  	  return views::empty<decay_t<invoke_result_t<decay_t<_Fp>&>>>;
  	}
*************** namespace views::__adaptor
*** 6598,6604 ****
      }
  
      friend constexpr difference_type
!     operator-(default_sentinel_t __y, const _Iterator& __x)
        requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<_Base>>
      { return __detail::__div_ceil(__x._M_end - __x._M_current, __x._M_n); }
  
--- 6598,6604 ----
      }
  
      friend constexpr difference_type
!     operator-(default_sentinel_t, const _Iterator& __x)
        requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<_Base>>
      { return __detail::__div_ceil(__x._M_end - __x._M_current, __x._M_n); }
  
*************** namespace views::__adaptor
*** 7287,7294 ****
  	using iterator_category = decltype(_S_iter_cat());
      };
  
!     template<bool> struct _Iterator;
!     template<bool> struct _Sentinel;
  
    public:
      join_with_view() requires (default_initializable<_Vp>
--- 7287,7294 ----
  	using iterator_category = decltype(_S_iter_cat());
      };
  
!     template<bool> class _Iterator;
!     template<bool> class _Sentinel;
  
    public:
      join_with_view() requires (default_initializable<_Vp>
*************** namespace views::__adaptor
*** 7743,7749 ****
      __detail::__box<_Tp> _M_value;
      [[no_unique_address]] _Bound _M_bound = _Bound();
  
!     struct _Iterator;
  
      template<typename _Range>
      friend constexpr auto
--- 7743,7749 ----
      __detail::__box<_Tp> _M_value;
      [[no_unique_address]] _Bound _M_bound = _Bound();
  
!     class _Iterator;
  
      template<typename _Range>
      friend constexpr auto
*************** namespace views::__adaptor
*** 8303,8309 ****
      }
  
      friend constexpr difference_type
!     operator-(default_sentinel_t __y, const _Iterator& __x)
        requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<_Base>>
      { return __detail::__div_ceil(__x._M_end - __x._M_current, __x._M_stride); }
  
--- 8303,8309 ----
      }
  
      friend constexpr difference_type
!     operator-(default_sentinel_t, const _Iterator& __x)
        requires sized_sentinel_for<sentinel_t<_Base>, iterator_t<_Base>>
      { return __detail::__div_ceil(__x._M_end - __x._M_current, __x._M_stride); }
  
diff -Nrcpad gcc-15-20250517/libstdc++-v3/src/c++17/fs_path.cc gcc-15-20250524/libstdc++-v3/src/c++17/fs_path.cc
*** gcc-15-20250517/libstdc++-v3/src/c++17/fs_path.cc	Sat May 17 22:32:38 2025
--- gcc-15-20250524/libstdc++-v3/src/c++17/fs_path.cc	Sat May 24 22:32:28 2025
*************** path::operator+=(const path& p)
*** 880,885 ****
--- 880,895 ----
        return *this;
      }
  
+   // Handle p += p which would otherwise access dangling pointers after
+   // reallocating _M_cmpts and _M_pathname.
+   if (&p == this) [[unlikely]]
+     return *this += p.native();
+   // Handle p += *i where i is in [p.begin(),p.end()), for the same reason.
+   if (_M_type() == _Type::_Multi && p._M_type() != _Type::_Multi)
+     for (const path& cmpt : *this)
+       if (&cmpt == &p) [[unlikely]]
+ 	return *this += p.native();
+ 
  #if _GLIBCXX_FILESYSTEM_IS_WINDOWS
    if (_M_type() == _Type::_Root_name
        || (_M_type() == _Type::_Filename && _M_pathname.size() == 1))
diff -Nrcpad gcc-15-20250517/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc gcc-15-20250524/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc
*** gcc-15-20250517/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libstdc++-v3/testsuite/27_io/filesystem/path/concat/120029.cc	Sat May 24 22:32:30 2025
***************
*** 0 ****
--- 1,72 ----
+ // { dg-do run { target c++17 } }
+ 
+ // Bug libstdc++/120029
+ // Dangling iterator usage in path::operator+=(const path& p) when this == p
+ 
+ #include <filesystem>
+ #include <testsuite_hooks.h>
+ 
+ namespace fs = std::filesystem;
+ 
+ void
+ test_root_dir()
+ {
+   fs::path p = "/";
+   p += p;
+   p += p;
+   VERIFY( p == "////" );
+   p += p.filename();
+   VERIFY( p == "////" );
+   p += *std::prev(p.end());
+   VERIFY( p == "////" );
+ }
+ 
+ void
+ test_root_name()
+ {
+   fs::path p = "C:/";
+   p += p;
+   p += p;
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += p.filename();
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += *std::prev(p.end());
+   VERIFY( p == "C:/C:/C:/C:/" );
+ }
+ 
+ void
+ test_filename()
+ {
+   fs::path p = "file";
+   p += p;
+   p += p;
+   VERIFY( p == "filefilefilefile" );
+   p += p.filename();
+   VERIFY( p == "filefilefilefilefilefilefilefile" );
+   p += *std::prev(p.end());
+   VERIFY( p == "filefilefilefilefilefilefilefilefilefilefilefilefilefilefilefile" );
+ }
+ 
+ void
+ test_multi()
+ {
+   fs::path p = "/home/username/Documents/mu";
+   p += p;
+   p += p;
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu" );
+   p += p.filename();
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumu" );
+   p += *std::prev(p.end());
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumumumu" );
+   auto n = std::distance(p.begin(), p.end());
+   for (int i = 0; i < n; ++i)
+     p += *std::next(p.begin(), i);
+ }
+ 
+ int main()
+ {
+   test_root_dir();
+   test_root_name();
+   test_filename();
+   test_multi();
+ }
diff -Nrcpad gcc-15-20250517/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc gcc-15-20250524/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc
*** gcc-15-20250517/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc	Thu Jan  1 00:00:00 1970
--- gcc-15-20250524/libstdc++-v3/testsuite/experimental/filesystem/path/concat/120029.cc	Sat May 24 22:32:30 2025
***************
*** 0 ****
--- 1,74 ----
+ // { dg-options "-DUSE_FILESYSTEM_TS -lstdc++fs" }
+ // { dg-do run { target c++11 } }
+ // { dg-require-filesystem-ts "" }
+ 
+ // Bug libstdc++/120029
+ // Dangling iterator usage in path::operator+=(const path& p) when this == p
+ 
+ #include <experimental/filesystem>
+ #include <testsuite_hooks.h>
+ 
+ namespace fs = std::experimental::filesystem;
+ 
+ void
+ test_root_dir()
+ {
+   fs::path p = "/";
+   p += p;
+   p += p;
+   VERIFY( p == "////" );
+   p += p.filename();
+   VERIFY( p == "////////" );
+   p += *std::prev(p.end());
+   VERIFY( p == "////////////////" );
+ }
+ 
+ void
+ test_root_name()
+ {
+   fs::path p = "C:/";
+   p += p;
+   p += p;
+   VERIFY( p == "C:/C:/C:/C:/" );
+   p += p.filename(); // For Filesystem TS the filename is "."
+   VERIFY( p == "C:/C:/C:/C:/." );
+   p += *std::prev(p.end());
+   VERIFY( p == "C:/C:/C:/C:/.." );
+ }
+ 
+ void
+ test_filename()
+ {
+   fs::path p = "file";
+   p += p;
+   p += p;
+   VERIFY( p == "filefilefilefile" );
+   p += p.filename();
+   VERIFY( p == "filefilefilefilefilefilefilefile" );
+   p += *std::prev(p.end());
+   VERIFY( p == "filefilefilefilefilefilefilefilefilefilefilefilefilefilefilefile" );
+ }
+ 
+ void
+ test_multi()
+ {
+   fs::path p = "/home/username/Documents/mu";
+   p += p;
+   p += p;
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu" );
+   p += p.filename();
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumu" );
+   p += *std::prev(p.end());
+   VERIFY( p == "/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mu/home/username/Documents/mumumumu" );
+   auto n = std::distance(p.begin(), p.end());
+   for (int i = 0; i < n; ++i)
+     p += *std::next(p.begin(), i);
+ }
+ 
+ int main()
+ {
+   test_root_dir();
+   test_root_name();
+   test_filename();
+   test_multi();
+ }
diff -Nrcpad gcc-15-20250517/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc gcc-15-20250524/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc
*** gcc-15-20250517/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc	Sat May 17 22:32:39 2025
--- gcc-15-20250524/libstdc++-v3/testsuite/std/format/ranges/format_kind_neg.cc	Sat May 24 22:32:31 2025
***************
*** 5,13 ****
  
  #include <format>
  
! template<auto> struct Tester { };
! 
! Tester<std::format_kind<const int(&)[1]>> t; // { dg-error "here" }
  
! // { dg-error "use of 'std::format_kind" "" { target *-*-* } 0 }
! // { dg-error "primary_template_not_defined" "" { target *-*-* } 0 }
--- 5,18 ----
  
  #include <format>
  
! void test()
! {
!   (void) std::format_kind<void>; // { dg-error "here" }
!   (void) std::format_kind<const void>; // { dg-error "here" }
!   (void) std::format_kind<int>; // { dg-error "here" }
!   (void) std::format_kind<int&>; // { dg-error "here" }
!   (void) std::format_kind<const int(&)[10]>; // { dg-error "here" }
!   (void) std::format_kind<void()>; // { dg-error "here" }
! }
  
! // { dg-error "cannot use primary template of 'std::format_kind'" "" { target *-*-* } 0 }
diff -Nrcpad gcc-15-20250517/libstdc++-v3/testsuite/std/time/clock/local/io.cc gcc-15-20250524/libstdc++-v3/testsuite/std/time/clock/local/io.cc
*** gcc-15-20250517/libstdc++-v3/testsuite/std/time/clock/local/io.cc	Sat May 17 22:32:39 2025
--- gcc-15-20250524/libstdc++-v3/testsuite/std/time/clock/local/io.cc	Sat May 24 22:32:31 2025
*************** test_format()
*** 89,94 ****
--- 89,97 ----
  
    s = std::format("{}", local_seconds{});
    VERIFY( s == "1970-01-01 00:00:00" );
+ 
+   s = std::format("{}", local_days{}); // PR libstdc++/120293
+   VERIFY( s == "1970-01-01" );
  }
  
  void
