]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Fix bootstrap failure in atomicity.cc
authorJonathan Wakely <jwakely@redhat.com>
Fri, 12 Sep 2025 10:33:20 +0000 (11:33 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Fri, 12 Sep 2025 10:35:41 +0000 (11:35 +0100)
My r16-3810-g6456da6bab8a2c changes broke bootstrap for targets that use
the mutex-based atomic helpers. This fixes it by casting away the
unnecessary volatile-qualification on the _Atomic_word* before passing
it to __exchange_and_add_single.

libstdc++-v3/ChangeLog:

* config/cpu/generic/atomicity_mutex/atomicity.h
(__exchange_and_add): Use const_cast to remove volatile.

libstdc++-v3/config/cpu/generic/atomicity_mutex/atomicity.h

index 7d5772d54840ec9fb7c9fed0e0849b3edba9d210..d088f69fe9a42a9c2e6f4e77568f195051772b28 100644 (file)
@@ -44,7 +44,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   __exchange_and_add(volatile _Atomic_word* __mem, int __val) throw ()
   {
     __gnu_cxx::__scoped_lock sentry(get_atomic_mutex());
-    return __gnu_cxx::__exchange_and_add_single(__mem, __val);
+    // The volatile qualification is meaningless. All changes to the memory
+    // location happen while this mutex is locked so it's not volatile at all.
+    auto __mem2 = const_cast<_Atomic_word*>(__mem);
+    return __gnu_cxx::__exchange_and_add_single(__mem2, __val);
   }
 
   void