1 // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
2 #include "test.h"
3 
ThreadFunc(void * m)4 void *ThreadFunc(void *m) {
5   AnnotateRWLockAcquired(__FILE__, __LINE__, m, 1);
6   return 0;
7 }
8 
main()9 int main() {
10   int m = 0;
11   AnnotateRWLockAcquired(__FILE__, __LINE__, &m, 1);
12   pthread_t th;
13   pthread_create(&th, 0, ThreadFunc, &m);
14   pthread_join(th, 0);
15   return 0;
16 }
17 
18 // CHECK: WARNING: ThreadSanitizer: double lock of a mutex
19 // CHECK:     #0 AnnotateRWLockAcquired
20 // CHECK:     #1 ThreadFunc
21 // CHECK: Location is stack of main thread.
22 // CHECK:   Mutex {{.*}} created at:
23 // CHECK:     #0 AnnotateRWLockAcquired
24 // CHECK:     #1 main
25 // CHECK: SUMMARY: ThreadSanitizer: double lock of a mutex {{.*}}mutex_double_lock.cpp{{.*}}ThreadFunc
26 
27