https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82378
Bug ID: 82378 Summary: Data race in libgfortran with OpenMP Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: libfortran Assignee: unassigned at gcc dot gnu.org Reporter: tkoenig at gcc dot gnu.org Target Milestone: --- Building an instrumented gfortran with make -j4 CFLAGS="-std=gnu99 -g -O2 -fsanitize=thread " FCFLAGS="-g -O2 -fsanitize=thread" CXXFLAGS="-std=gnu99 -g -O2 -fsanitize=thread " LDFLAGS="-B`pwd`/../libsanitizer/tsan/.libs/ -Wl,-rpath,`pwd`/../libsanitizer/tsan/.libs/ -fsanitize=thread" && make install and then compiling the test case program main use omp_lib !$OMP PARALLEL NUM_THREADS(100) call file_open(OMP_get_thread_num()) !$OMP END PARALLEL contains recursive subroutine file_open(i) integer :: i integer :: nunit nunit = i + 20 write (nunit,*) 'asdf',i end subroutine file_open end program main with gfortran -fopenmp -fsanitize=thread open.f90 yields quite a few data races like ================== WARNING: ThreadSanitizer: data race (pid=1719) Read of size 4 at 0x3fff48527330 by main thread (mutexes: write M19): #0 close_unit_1 ../../../trunk/libgfortran/io/unit.c:703 (libgfortran.so.5+0x00000019b8e8) #1 _gfortrani_close_units ../../../trunk/libgfortran/io/unit.c:771 (libgfortran.so.5+0x00000019bd64) #2 cleanup ../../../trunk/libgfortran/runtime/main.c:113 (libgfortran.so.5+0x000000036948) #3 <null> <null> (ld64.so.1+0x000000018a9c) Previous write of size 4 at 0x3fff48527330 by thread T67 (mutexes: write M99): #0 finalize_transfer ../../../trunk/libgfortran/io/transfer.c:3934 (libgfortran.so.5+0x000000198e34) #1 _gfortran_st_write_done ../../../trunk/libgfortran/io/transfer.c:4125 (libgfortran.so.5+0x000000199280) #2 <null> <null> (a.out+0x000010000e58) #3 <null> <null> (a.out+0x00001000103c) #4 gomp_thread_start ../../../trunk/libgomp/team.c:120 (libgomp.so.1+0x00000001fd84) Location is heap block of size 744 at 0x3fff48527300 allocated by thread T67: #0 calloc ../../../../trunk/libsanitizer/tsan/tsan_interceptors.cc:606 (libtsan.so.0+0x0000000479d8) #1 _gfortrani_xcalloc ../../../trunk/libgfortran/runtime/memory.c:83 (libgfortran.so.5+0x00000003f76c) #2 insert_unit ../../../trunk/libgfortran/io/unit.c:230 (libgfortran.so.5+0x00000019a1a8) #3 get_gfc_unit ../../../trunk/libgfortran/io/unit.c:350 (libgfortran.so.5+0x00000019a644) #4 _gfortrani_get_unit ../../../trunk/libgfortran/io/unit.c:568 (libgfortran.so.5+0x00000019c238) #5 data_transfer_init ../../../trunk/libgfortran/io/transfer.c:2680 (libgfortran.so.5+0x0000001972b0) #6 _gfortran_st_write ../../../trunk/libgfortran/io/transfer.c:4116 (libgfortran.so.5+0x000000198984) #7 <null> <null> (a.out+0x000010000e14) #8 <null> <null> (a.out+0x00001000103c) #9 gomp_thread_start ../../../trunk/libgomp/team.c:120 (libgomp.so.1+0x00000001fd84) Mutex M19 (0x3fff7fb5fc40) created at: #0 pthread_mutex_lock ../../../../trunk/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:3608 (libtsan.so.0+0x00000006329c) #1 __gthread_mutex_lock ../libgcc/gthr-default.h:748 (libgfortran.so.5+0x00000019a390) #2 get_gfc_unit ../../../trunk/libgfortran/io/unit.c:327 (libgfortran.so.5+0x00000019a390) #3 _gfortrani_get_unit ../../../trunk/libgfortran/io/unit.c:568 (libgfortran.so.5+0x00000019c238) #4 data_transfer_init ../../../trunk/libgfortran/io/transfer.c:2680 (libgfortran.so.5+0x0000001972b0) #5 _gfortran_st_write ../../../trunk/libgfortran/io/transfer.c:4116 (libgfortran.so.5+0x000000198984) #6 <null> <null> (a.out+0x000010000e14) #7 <null> <null> (a.out+0x00001000103c) #8 GOMP_parallel ../../../trunk/libgomp/parallel.c:168 (libgomp.so.1+0x000000016c10) #9 <null> <null> (a.out+0x000010000f8c) #10 <null> <null> (libc.so.6+0x000000046be8) Mutex M99 (0x3fff485273d8) created at: #0 pthread_mutex_lock ../../../../trunk/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:3608 (libtsan.so.0+0x00000006329c) #1 __gthread_mutex_lock ../libgcc/gthr-default.h:748 (libgfortran.so.5+0x00000019a228) #2 insert_unit ../../../trunk/libgfortran/io/unit.c:240 (libgfortran.so.5+0x00000019a228) #3 get_gfc_unit ../../../trunk/libgfortran/io/unit.c:350 (libgfortran.so.5+0x00000019a644) #4 _gfortrani_get_unit ../../../trunk/libgfortran/io/unit.c:568 (libgfortran.so.5+0x00000019c238) #5 data_transfer_init ../../../trunk/libgfortran/io/transfer.c:2680 (libgfortran.so.5+0x0000001972b0) #6 _gfortran_st_write ../../../trunk/libgfortran/io/transfer.c:4116 (libgfortran.so.5+0x000000198984) #7 <null> <null> (a.out+0x000010000e14) #8 <null> <null> (a.out+0x00001000103c) #9 gomp_thread_start ../../../trunk/libgomp/team.c:120 (libgomp.so.1+0x00000001fd84) Thread T67 (tid=1789, running) created by main thread at: #0 pthread_create ../../../../trunk/libsanitizer/tsan/tsan_interceptors.cc:900 (libtsan.so.0+0x000000048e14) #1 gomp_team_start ../../../trunk/libgomp/team.c:817 (libgomp.so.1+0x000000020308) #2 <null> <null> (a.out+0x000010000f8c) #3 <null> <null> (libc.so.6+0x000000046be8)