[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-bugs
Subject: [Bug libfortran/82378] New: Data race in libgfortran with OpenMP
From: "tkoenig at gcc dot gnu.org" <gcc-bugzilla () gcc ! gnu ! org>
Date: 2017-09-30 17:08:26
Message-ID: bug-82378-4 () http ! gcc ! gnu ! org/bugzilla/
[Download RAW message or body]
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)=
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic