[Bug sanitizer/55561] TSAN: Fortran/OMP yields false positives

dvyukov at google dot com gcc-bugzilla@gcc.gnu.org
Sun Dec 30 17:07:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55561

--- Comment #26 from Dmitry Vyukov <dvyukov at google dot com> 2012-12-30 17:07:01 UTC ---
(In reply to comment #25)
> (In reply to comment #24)
> > For testing you can comment out first 2 lines of gomp_ptrlock_get(). That
> > should fix the race in libgomp. It's not a good fix form performance pov, but
> > should be OK for testing.
> 
> Thanks.. it turns out that gomp_ptrlock_get is actually used from
> 
> gcc/libgomp/config/linux/ptrlock.h:74
> 
> on linux...  is it still sufficient to comment the first if condition only and
> keep the atomic_compare_exchange, or should one directly have the 'return
> gomp_ptrlock_get_slow' ?

Ah, I was looking at config/posix/ptrlock.

For config/linux/ptrlock the changes are:

  if ((uintptr_t) *ptrlock > 2)
    return *ptrlock;
\/\/\/\/\/\/\/\/\/\/\/\/
  uintptr_t v = (uintptr_t)__atomic_load(ptrlock, MEMMODEL_ACQUIRE);
  if (v > 2)
    return v;


  return *ptrlock;
\/\/\/\/\/\/\/\/\/\/\/\/
  return __atomic_load(ptrlock, MEMMODEL_ACQUIRE);


Also loads of intptr needs to be done with __atomic_load(MEMMODEL_RELAXED).
and do_spin() needs to load *addr with __atomic_load(MEMMODEL_RELAXED) as well.



More information about the Gcc-bugs mailing list