// PR sanitizer/64265 // { dg-shouldfail "tsan" } // { dg-additional-options "-fno-omit-frame-pointer -ldl" } #include #include "tsan_barrier.h" static pthread_barrier_t barrier; int v; __attribute__((noinline, noclone)) int foo (int x) { if (x < 99) throw x; barrier_wait (&barrier); v++; return x; } __attribute__((noinline, noclone)) void bar (void) { for (int i = 0; i < 100; i++) try { foo (i); } catch (int) { } } __attribute__((noinline, noclone)) void * tf (void *) { bar (); return NULL; } int main () { pthread_t th; barrier_init (&barrier, 2); if (pthread_create (&th, NULL, tf, NULL)) return 0; v++; barrier_wait (&barrier); pthread_join (th, NULL); return 0; } // { dg-output "WARNING: ThreadSanitizer: data race.*#2 _?(tf|_Z2tfPv)" }