Mercurial > hg > CbC > CbC_llvm
comparison compiler-rt/test/tsan/mutexset6.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 && %deflake %run %t | FileCheck %s | |
2 #include "test.h" | |
3 | |
4 int Global; | |
5 pthread_mutex_t mtx1; | |
6 pthread_mutex_t mtx2; | |
7 pthread_rwlock_t mtx3; | |
8 | |
9 void *Thread1(void *x) { | |
10 barrier_wait(&barrier); | |
11 pthread_mutex_lock(&mtx1); | |
12 Global++; | |
13 pthread_mutex_unlock(&mtx1); | |
14 return NULL; | |
15 } | |
16 | |
17 void *Thread2(void *x) { | |
18 pthread_mutex_lock(&mtx1); | |
19 pthread_mutex_unlock(&mtx1); | |
20 pthread_mutex_lock(&mtx2); | |
21 pthread_rwlock_rdlock(&mtx3); | |
22 Global--; | |
23 pthread_mutex_unlock(&mtx2); | |
24 pthread_rwlock_unlock(&mtx3); | |
25 barrier_wait(&barrier); | |
26 return NULL; | |
27 } | |
28 | |
29 int main() { | |
30 barrier_init(&barrier, 2); | |
31 // CHECK: WARNING: ThreadSanitizer: data race | |
32 // CHECK: Write of size 4 at {{.*}} by thread T1 | |
33 // CHECK: (mutexes: write [[M1:M[0-9]+]]): | |
34 // CHECK: Previous write of size 4 at {{.*}} by thread T2 | |
35 // CHECK: (mutexes: write [[M2:M[0-9]+]], read [[M3:M[0-9]+]]): | |
36 // CHECK: Mutex [[M1]] (0x{{.*}}) created at: | |
37 // CHECK: #1 main {{.*}}mutexset6.cpp:[[@LINE+5]] | |
38 // CHECK: Mutex [[M2]] (0x{{.*}}) created at: | |
39 // CHECK: #1 main {{.*}}mutexset6.cpp:[[@LINE+4]] | |
40 // CHECK: Mutex [[M3]] (0x{{.*}}) created at: | |
41 // CHECK: #1 main {{.*}}mutexset6.cpp:[[@LINE+3]] | |
42 pthread_mutex_init(&mtx1, 0); | |
43 pthread_mutex_init(&mtx2, 0); | |
44 pthread_rwlock_init(&mtx3, 0); | |
45 pthread_t t[2]; | |
46 pthread_create(&t[0], NULL, Thread1, NULL); | |
47 pthread_create(&t[1], NULL, Thread2, NULL); | |
48 pthread_join(t[0], NULL); | |
49 pthread_join(t[1], NULL); | |
50 pthread_mutex_destroy(&mtx1); | |
51 pthread_mutex_destroy(&mtx2); | |
52 pthread_rwlock_destroy(&mtx3); | |
53 } |