https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66761
Bug ID: 66761 Summary: libgomp: ThreadSanitizer: data race in libgomp Product: gcc Version: 5.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgomp Assignee: unassigned at gcc dot gnu.org Reporter: Joost.VandeVondele at mat dot ethz.ch CC: jakub at gcc dot gnu.org Target Milestone: --- After compiling libgomp with -fsanitize=thread, the following testcase triggers a warning, which might indicate a problem in libgomp/config/linux/wait.h:52 : > cat test.f90 SUBROUTINE copy(a,b,n) INTEGER :: a(*),b(*),n !$OMP PARALLEL DO SHARED(a,b,n) PRIVATE(i) DO i=1,n a(i)=b(i) ENDDO END SUBROUTINE SUBROUTINE test() INTEGER, PARAMETER :: N=1024 INTEGER :: a(N),b(N),i !$OMP PARALLEL SHARED(a,b) PRIVATE(i) !$OMP DO DO i=1,N b(i)=i ENDDO !$OMP BARRIER !$OMP MASTER CALL copy(a,b,n) !$OMP END MASTER !$OMP END PARALLEL END SUBROUTINE PROGRAM tester CALL test() END > gfortran -fopenmp -fsanitize=thread -g test.f90 > ./a.out ================== WARNING: ThreadSanitizer: data race (pid=66889) Atomic write of size 8 at 0x7f30d27667c0 by main thread: #0 __tsan_atomic64_fetch_add /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libsanitizer/tsan/tsan_interface_atomic.cc:616 (libtsan.so.0+0x000000058880) #1 gomp_team_end /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/team.c:875 (libgomp.so.1+0x000000019752) #2 GOMP_parallel_end /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/parallel.c:159 (libgomp.so.1+0x000000010b7b) #3 GOMP_parallel /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/parallel.c:169 (libgomp.so.1+0x000000010c71) #4 copy_ /data/vjoost/gnu/bugs/test.f90:5 (a.out+0x000000400c4e) #5 test_._omp_fn.0 /data/vjoost/gnu/bugs/test.f90:22 (a.out+0x000000400dd0) #6 GOMP_parallel /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/parallel.c:168 (libgomp.so.1+0x000000010c6c) #7 test_ /data/vjoost/gnu/bugs/test.f90:13 (a.out+0x000000400bb9) #8 tester /data/vjoost/gnu/bugs/test.f90:30 (a.out+0x000000400c80) #9 main /data/vjoost/gnu/bugs/test.f90:31 (a.out+0x000000400cc9) Previous read of size 8 at 0x7f30d27667c0 by thread T29: #0 do_spin /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/config/linux/wait.h:52 (libgomp.so.1+0x00000001bcee) #1 do_wait /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/config/linux/wait.h:64 (libgomp.so.1+0x00000001bcee) #2 gomp_team_barrier_wait_end /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/config/linux/bar.c:112 (libgomp.so.1+0x00000001bcee) #3 gomp_team_barrier_wait_final /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/config/linux/bar.c:136 (libgomp.so.1+0x00000001c039) #4 gomp_thread_start /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/team.c:119 (libgomp.so.1+0x0000000177b4) Location is global 'gomp_managed_threads' of size 8 at 0x7f30d27667c0 (libgomp.so.1+0x0000002317c0) Thread T29 (tid=66919, running) created by main thread at: #0 pthread_create /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libsanitizer/tsan/tsan_interceptors.cc:895 (libtsan.so.0+0x000000026c94) #1 gomp_team_start /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/team.c:796 (libgomp.so.1+0x000000017fee) #2 GOMP_parallel /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/parallel.c:167 (libgomp.so.1+0x000000010c67) #3 test_ /data/vjoost/gnu/bugs/test.f90:13 (a.out+0x000000400bb9) #4 tester /data/vjoost/gnu/bugs/test.f90:30 (a.out+0x000000400c80) #5 main /data/vjoost/gnu/bugs/test.f90:31 (a.out+0x000000400cc9) SUMMARY: ThreadSanitizer: data race /data/vjoost/toolchain-sanitize/build/gcc-5.1.0/libgomp/team.c:875 gomp_team_end ================== ThreadSanitizer: reported 1 warnings