[Bug libstdc++/91910] Debug mode: there is a racing condition between destructors of iterator and the associated container.
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Nov 9 08:09:36 GMT 2023
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91910
--- Comment #11 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The releases/gcc-13 branch has been updated by Jonathan Wakely
<redi@gcc.gnu.org>:
https://gcc.gnu.org/g:0fc5cc6e5a2dfd7dbdd20bc27f975eed155ffb91
commit r13-8020-g0fc5cc6e5a2dfd7dbdd20bc27f975eed155ffb91
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Mon Sep 11 16:42:54 2023 +0100
libstdc++: Remove unconditional use of atomics in Debug Mode
The fix for PR 91910 (r10-3426-gf7a3a382279585) introduced unconditional
uses of atomics into src/c++11/debug.cc, which causes linker errors for
arm4t where GCC emits an unresolved reference to __sync_synchronize.
By making the uses of atomics depend on _GLIBCXX_HAS_GTHREADS we can
avoid those unconditional references to __sync_synchronize for targets
where the atomics are unnecessary. As a minor performance optimization
we can also check the __gnu_cxx::__is_single_threaded function to avoid
atomics for single-threaded programs even where they don't cause linker
errors.
libstdc++-v3/ChangeLog:
* src/c++11/debug.cc (acquire_sequence_ptr_for_lock): New
function.
(reset_sequence_ptr): New function.
(_Safe_iterator_base::_M_detach)
(_Safe_local_iterator_base::_M_detach): Replace bare atomic_load
with acquire_sequence_ptr_for_lock.
(_Safe_iterator_base::_M_reset): Replace bare atomic_store with
reset_sequence_ptr.
(cherry picked from commit 4a2766ed00a47904dc8b85bf0538aa116d8e658b)
More information about the Gcc-bugs
mailing list