<div dir="auto"><div><br><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sat, 28 Mar 2026, 13:50 Tomasz Kamiński, <<a href="mailto:tkaminsk@redhat.com">tkaminsk@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This implements with P3936R1 Safer atomic_ref::address with<br>
the bump to __cpp_lib_atomic_ref feture test macro.<br>
<br>
libstdc++-v3/ChangeLog:<br>
<br>
        * include/bits/atomic_base.h (__atomic_ref_base::_Address_return_t):<br>
        Define.<br>
        (__atomic_ref_base::address): Change return type to _Address_return_t.<br>
        * include/bits/version.def (atomic_ref): Bump to 202503.<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">The new value should be 202603.</div><div dir="auto"><br></div><div dir="auto">OK with that change.</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote gmail_quote_container"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
        * include/bits/version.h: Regenerate.<br>
        * testsuite/29_atomics/atomic_ref/address.cc: Update check for<br>
        return type.<br>
---<br>
Tested *atomic_ref* on x86_64-linux.<br>
OK for trunk when full testsuite passes?<br>
<br>
 libstdc++-v3/include/bits/atomic_base.h              | 10 ++++++++--<br>
 libstdc++-v3/include/bits/version.def                |  2 +-<br>
 libstdc++-v3/include/bits/version.h                  |  4 ++--<br>
 .../testsuite/29_atomics/atomic_ref/address.cc       | 12 ++++++------<br>
 4 files changed, 17 insertions(+), 11 deletions(-)<br>
<br>
diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h<br>
index 6c5b83a0818..62970108ea6 100644<br>
--- a/libstdc++-v3/include/bits/atomic_base.h<br>
+++ b/libstdc++-v3/include/bits/atomic_base.h<br>
@@ -1649,6 +1649,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
     {<br>
     private:<br>
       using _Vt = remove_cv_t<_Tp>;<br>
+      using _Address_return_t = __conditional_t<is_volatile_v<_Tp>,<br>
+                                               const volatile void*, const void*>;<br>
<br>
       static consteval bool<br>
       _S_is_always_lock_free()<br>
@@ -1714,7 +1716,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
 #endif // __glibcxx_atomic_wait<br>
<br>
 #if __glibcxx_atomic_ref >= 202411L<br>
-      _GLIBCXX_ALWAYS_INLINE constexpr const _Tp*<br>
+      _GLIBCXX_ALWAYS_INLINE constexpr const _Address_return_t<br>
       address() const noexcept<br>
       { return _M_ptr; }<br>
 #endif // __glibcxx_atomic_ref >= 202411L<br>
@@ -1727,6 +1729,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
     struct __atomic_ref_base<br>
       : __atomic_ref_base<const _Tp><br>
     {<br>
+      using _Address_return_t = __conditional_t<is_volatile_v<_Tp>,<br>
+                                               volatile void*, void*>;<br>
+<br>
+    public:<br>
       using value_type = typename __atomic_ref_base<const _Tp>::value_type;<br>
<br>
       explicit<br>
@@ -1807,7 +1813,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION<br>
 #endif // __glibcxx_atomic_wait<br>
<br>
 #if __glibcxx_atomic_ref >= 202411L<br>
-      _GLIBCXX_ALWAYS_INLINE constexpr _Tp*<br>
+      _GLIBCXX_ALWAYS_INLINE constexpr _Address_return_t<br>
       address() const noexcept<br>
       { return this->_M_ptr; }<br>
 #endif // __glibcxx_atomic_ref >= 202411L<br>
diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def<br>
index dd77524b5a9..5aaf1550829 100644<br>
--- a/libstdc++-v3/include/bits/version.def<br>
+++ b/libstdc++-v3/include/bits/version.def<br>
@@ -817,7 +817,7 @@ ftms = {<br>
 ftms = {<br>
   name = atomic_ref;<br>
   values = {<br>
-    v = 202411;<br>
+    v = 202503;<br>
     cxxmin = 26;<br>
   };<br>
   values = {<br>
diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h<br>
index bef61baeba8..ed1f0028691 100644<br>
--- a/libstdc++-v3/include/bits/version.h<br>
+++ b/libstdc++-v3/include/bits/version.h<br>
@@ -910,9 +910,9 @@<br>
<br>
 #if !defined(__cpp_lib_atomic_ref)<br>
 # if (__cplusplus >  202302L)<br>
-#  define __glibcxx_atomic_ref 202411L<br>
+#  define __glibcxx_atomic_ref 202503L<br>
 #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_atomic_ref)<br>
-#   define __cpp_lib_atomic_ref 202411L<br>
+#   define __cpp_lib_atomic_ref 202503L<br>
 #  endif<br>
 # elif (__cplusplus >= 202002L)<br>
 #  define __glibcxx_atomic_ref 201806L<br>
diff --git a/libstdc++-v3/testsuite/29_atomics/atomic_ref/address.cc b/libstdc++-v3/testsuite/29_atomics/atomic_ref/address.cc<br>
index e2eda506efa..d4bb500185e 100644<br>
--- a/libstdc++-v3/testsuite/29_atomics/atomic_ref/address.cc<br>
+++ b/libstdc++-v3/testsuite/29_atomics/atomic_ref/address.cc<br>
@@ -8,26 +8,26 @@<br>
<br>
 #include <testsuite_hooks.h><br>
<br>
-template <typename T><br>
+template <typename T, typename CVV><br>
 void testAtomicRefAddress()<br>
 {<br>
   T x(T(42));<br>
   const std::atomic_ref<T> a(x);<br>
<br>
   static_assert( noexcept(a.address()) );<br>
-  static_assert( std::is_same_v<decltype(a.address()), T*> );<br>
+  static_assert( std::is_same_v<decltype(a.address()), CVV*> );<br>
   VERIFY( std::addressof(x) == a.address() );<br>
 }<br>
<br>
 template <typename T><br>
 void testAtomicRefAddressForCV()<br>
 {<br>
-  testAtomicRefAddress<T>();<br>
-  testAtomicRefAddress<const T>();<br>
+  testAtomicRefAddress<T, void>();<br>
+  testAtomicRefAddress<const T, const void>();<br>
   if constexpr (std::atomic_ref<T>::is_always_lock_free)<br>
   {<br>
-    testAtomicRefAddress<volatile T>();<br>
-    testAtomicRefAddress<const volatile T>();<br>
+    testAtomicRefAddress<volatile T, volatile void>();<br>
+    testAtomicRefAddress<const volatile T, const volatile void>();<br>
   }<br>
 }<br>
<br>
-- <br>
2.53.0<br>
<br>
</blockquote></div></div></div>