brintos

brintos / llvm-project-archived public Read only

0
0
Text · 721 B · 1675686 Raw
43 lines · cpp
1// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s2#include "test.h"3 4volatile long X;5volatile long Y;6volatile int N1 = 2 << 10;7volatile int N2 = 32 << 10;8void (*volatile F)();9void (*volatile G)();10 11static void foo() {12  if (--N1)13    return F();14  while (--N2)15    G();16}17 18static void bar() { Y++; }19 20void *Thread(void *p) {21  F();22  X = 43;23  barrier_wait(&barrier);24  return 0;25}26 27int main() {28  barrier_init(&barrier, 2);29  F = foo;30  G = bar;31  pthread_t t;32  pthread_create(&t, 0, Thread, 0);33  barrier_wait(&barrier);34  X = 43;35  pthread_join(t, 0);36}37 38// CHECK: WARNING: ThreadSanitizer: data race39// CHECK:   Write40// CHECK:     #0 main41// CHECK:   Previous write42// CHECK:     #0 Thread43