https://gcc.gnu.org/g:28d64f7024ba9cdd7886597ee94e8697a98fca23
commit r13-10049-g28d64f7024ba9cdd7886597ee94e8697a98fca23 Author: Jonathan Wakely <[email protected]> Date: Thu Dec 4 21:07:19 2025 +0000 libstdc++: std::atomic should use std::addressof libstdc++-v3/ChangeLog: * include/bits/atomic_wait.h (__detail::__atomic_compare): Use std::addressof instead of &. * include/std/atomic (atomic::wait, atomic::notify_one) (atomic::notify_all): Likewise. Reviewed-by: Patrick Palka <[email protected]> (cherry picked from commit 7a2d14187611ac5a7e9af24397455b3f0503fdcb) Diff: --- libstdc++-v3/include/bits/atomic_wait.h | 3 ++- libstdc++-v3/include/std/atomic | 27 +++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/libstdc++-v3/include/bits/atomic_wait.h b/libstdc++-v3/include/bits/atomic_wait.h index fc840578c221..a1c6ebbca83a 100644 --- a/libstdc++-v3/include/bits/atomic_wait.h +++ b/libstdc++-v3/include/bits/atomic_wait.h @@ -187,7 +187,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool __atomic_compare(const _Tp& __a, const _Tp& __b) { // TODO make this do the correct padding bit ignoring comparison - return __builtin_memcmp(&__a, &__b, sizeof(_Tp)) == 0; + return __builtin_memcmp(std::addressof(__a), std::addressof(__b), + sizeof(_Tp)) == 0; } struct __waiter_pool_base diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic index 96e87ded8646..396e29f3b80c 100644 --- a/libstdc++-v3/include/std/atomic +++ b/libstdc++-v3/include/std/atomic @@ -387,24 +387,23 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __cmpexch_failure_order(__m)); } #if __cpp_lib_atomic_wait - void - wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept - { - std::__atomic_wait_address_v(&_M_i, __old, - [__m, this] { return this->load(__m); }); - } + void + wait(_Tp __old, memory_order __m = memory_order_seq_cst) const noexcept + { + std::__atomic_wait_address_v(std::addressof(_M_i), __old, + [__m, this] { return this->load(__m); }); + } - // TODO add const volatile overload + // TODO add const volatile overload - void - notify_one() noexcept - { std::__atomic_notify_address(&_M_i, false); } + void + notify_one() noexcept + { std::__atomic_notify_address(std::addressof(_M_i), false); } - void - notify_all() noexcept - { std::__atomic_notify_address(&_M_i, true); } + void + notify_all() noexcept + { std::__atomic_notify_address(std::addressof(_M_i), true); } #endif // __cpp_lib_atomic_wait - }; #undef _GLIBCXX20_INIT
