Mercurial > hg > CbC > CbC_llvm
comparison compiler-rt/test/tsan/static_init5.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
147:c2174574ed3a | 150:1d019706d866 |
---|---|
1 // RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s | |
2 #include <pthread.h> | |
3 #include <stdlib.h> | |
4 #include <stdio.h> | |
5 #include <sched.h> | |
6 | |
7 struct Cache { | |
8 int x; | |
9 explicit Cache(int x) | |
10 : x(x) { | |
11 } | |
12 }; | |
13 | |
14 void *AsyncInit(void *p) { | |
15 return new Cache((int)(long)p); | |
16 } | |
17 | |
18 Cache *CreateCache() { | |
19 pthread_t t; | |
20 pthread_create(&t, 0, AsyncInit, (void*)(long)rand()); | |
21 void *res; | |
22 pthread_join(t, &res); | |
23 return (Cache*)res; | |
24 } | |
25 | |
26 void *Thread1(void *x) { | |
27 static Cache *c = CreateCache(); | |
28 if (c->x >= RAND_MAX) | |
29 exit(1); | |
30 return 0; | |
31 } | |
32 | |
33 int main() { | |
34 pthread_t t[2]; | |
35 pthread_create(&t[0], 0, Thread1, 0); | |
36 pthread_create(&t[1], 0, Thread1, 0); | |
37 pthread_join(t[0], 0); | |
38 pthread_join(t[1], 0); | |
39 fprintf(stderr, "PASS\n"); | |
40 } | |
41 | |
42 // CHECK-NOT: WARNING: ThreadSanitizer: data race |