1// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
2// Regtest for https://github.com/google/sanitizers/issues/447
3// This is a correct program and tsan should not report a race.
4#include "test.h"
5
6int g;
7__attribute__((noinline))
8int foo(int cond) {
9 if (cond)
10 return g;
11 return 0;
12}
13
14void *Thread1(void *p) {
15 barrier_wait(&barrier);
16 long res = foo((long)p);
17 return (void*) res;
18}
19
20int main() {
21 barrier_init(&barrier, 2);
22 pthread_t t;
23 pthread_create(&t, 0, Thread1, 0);
24 g = 1;
25 barrier_wait(&barrier);
26 pthread_join(t, 0);
27 fprintf(stderr, "PASS\n");
28 // CHECK-NOT: ThreadSanitizer: data race
29 // CHECK: PASS
30}
31