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

Reply via email to