1 | // RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s |
2 | #include "test.h" |
3 | |
4 | int Global; |
5 | int WTFGlobal; |
6 | |
7 | extern "C" { |
8 | void AnnotateBenignRaceSized(const char *f, int l, |
9 | void *mem, unsigned int size, const char *desc); |
10 | void WTFAnnotateBenignRaceSized(const char *f, int l, |
11 | void *mem, unsigned int size, |
12 | const char *desc); |
13 | } |
14 | |
15 | |
16 | void *Thread(void *x) { |
17 | Global = 42; |
18 | WTFGlobal = 142; |
19 | barrier_wait(&barrier); |
20 | return 0; |
21 | } |
22 | |
23 | int main() { |
24 | barrier_init(&barrier, 2); |
25 | AnnotateBenignRaceSized(__FILE__, __LINE__, |
26 | &Global, sizeof(Global), "Race on Global" ); |
27 | WTFAnnotateBenignRaceSized(__FILE__, __LINE__, |
28 | &WTFGlobal, sizeof(WTFGlobal), |
29 | "Race on WTFGlobal" ); |
30 | pthread_t t; |
31 | pthread_create(&t, 0, Thread, 0); |
32 | barrier_wait(&barrier); |
33 | Global = 43; |
34 | WTFGlobal = 143; |
35 | pthread_join(t, 0); |
36 | fprintf(stderr, "OK\n" ); |
37 | } |
38 | |
39 | // CHECK-NOT: WARNING: ThreadSanitizer: data race |
40 | |