https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97868
pavlick <ispavlick at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |ispavlick at gmail dot com --- Comment #5 from pavlick <ispavlick at gmail dot com> --- Why is there false positive and no warning about the unsupported feature (atomic_thread_fence)? [code] #include <thread> #include <atomic> #include <vector> #include <chrono> using namespace std; class Test { atomic_flag m_spin_lock; vector<int> m_data; public: void add() { while (m_spin_lock.test_and_set(memory_order_relaxed)) this_thread::yield(); atomic_thread_fence(memory_order_acquire); while (true) { this_thread::sleep_for(300ms); m_data.push_back(4); } m_spin_lock.clear(memory_order_release); } void read() { size_t sz; if (! m_spin_lock.test_and_set(std::memory_order_acquire)) { sz = m_data.size(); m_spin_lock.clear(std::memory_order_release); } (void)sz; } }test; int main() { jthread rt(&Test::read, &test); this_thread::sleep_for(10ms); test.add(); } [/code] $ g++ 3.cc -std=c++20 -Wtsan -Wall -fsanitize=thread