[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