libstdc++: Fix bootstrap failure in atomicity.cc

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.
This commit is contained in:
Jonathan Wakely 2025-09-12 11:33:20 +01:00 committed by Jonathan Wakely
parent 1d866f3b1c
commit 4fe3b8b8db
No known key found for this signature in database
1 changed files with 4 additions and 1 deletions

View 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