https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68519
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |trippels at gcc dot gnu.org Resolution|--- |INVALID --- Comment #2 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Build with -fsanitize=thread: ================== WARNING: ThreadSanitizer: data race (pid=15270) Write of size 1 at 0x000000403540 by main thread: #0 main /var/tmp/t.cc:32 (a.out+0x0000004016d4) Previous read of size 1 at 0x000000403540 by thread T1 (mutexes: write M10): Do something... #0 void thread_loop<std::chrono::duration<float, std::ratio<1l, 1l> > >(std::chrono::duration<float, std::ratio<1l, 1l> >) /var/tmp/t.cc:17 (a.out+0x000000401ad3) Do something... #1 void std::_Bind_simple<void (*(std::chrono::duration<float, std::ratio<1l, 1l> >))(std::chrono::duration<float, std::ratio<1l, 1l> >)>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/functional:1430 (a.out+0x00000040193e) #2 std::_Bind_simple<void (*(std::chrono::duration<float, std::ratio<1l, 1l> >))(std::chrono::duration<float, std::ratio<1l, 1l> >)>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/functional:1419 (a.out+0x00000040193e) Do something... #3 std::thread::_State_impl<std::_Bind_simple<void (*(std::chrono::duration<float, std::ratio<1l, 1l> >))(std::chrono::duration<float, std::ratio<1l, 1l> >)> >::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/thread:186 (a.out+0x00000040193e) #4 execute_native_thread_routine <null> (libstdc++.so.6+0x0000000d082e) Location is global 'finish' of size 1 at 0x000000403540 (a.out+0x000000403540) Mutex M10 (0x0000004035a0) created at: #0 pthread_mutex_lock <null> (libtsan.so.0+0x000000042be0) Do something... #1 __gthread_mutex_lock /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/x86_64-pc-linux-gnu/bits/gthr-default.h:748 (a.out+0x0000004019ee) #2 std::mutex::lock() /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/mutex.h:103 (a.out+0x0000004019ee) #3 std::unique_lock<std::mutex>::lock() /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/mutex.h:254 (a.out+0x0000004019ee) #4 std::unique_lock<std::mutex>::unique_lock(std::mutex&) /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/bits/mutex.h:184 (a.out+0x0000004019ee) Do something... #5 void thread_loop<std::chrono::duration<float, std::ratio<1l, 1l> > >(std::chrono::duration<float, std::ratio<1l, 1l> >) /var/tmp/t.cc:16 (a.out+0x0000004019ee) #6 void std::_Bind_simple<void (*(std::chrono::duration<float, std::ratio<1l, 1l> >))(std::chrono::duration<float, std::ratio<1l, 1l> >)>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/functional:1430 (a.out+0x00000040193e) #7 std::_Bind_simple<void (*(std::chrono::duration<float, std::ratio<1l, 1l> >))(std::chrono::duration<float, std::ratio<1l, 1l> >)>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/functional:1419 (a.out+0x00000040193e) #8 std::thread::_State_impl<std::_Bind_simple<void (*(std::chrono::duration<float, std::ratio<1l, 1l> >))(std::chrono::duration<float, std::ratio<1l, 1l> >)> >::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/6.0.0/include/g++-v6/thread:186 (a.out+0x00000040193e) Do something... #9 execute_native_thread_routine <null> (libstdc++.so.6+0x0000000d082e) Thread T1 (tid=15272, running) created by main thread at: #0 pthread_create <null> (libtsan.so.0+0x00000002bdd8) #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0x0000000d0b34) Do something... #2 __libc_start_main ../csu/libc-start.c:289 (libc.so.6+0x00000002062f) SUMMARY: ThreadSanitizer: data race /var/tmp/t.cc:32 in main ==================