15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesextern "C" void AnnotateRWLockAcquired(const char *f, int l, void *m, long rw); 32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main() { 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int m = 0; 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines AnnotateRWLockAcquired(__FILE__, __LINE__, &m, 1); 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines AnnotateRWLockAcquired(__FILE__, __LINE__, &m, 0); 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: WARNING: ThreadSanitizer: read lock of a write locked mutex 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #0 AnnotateRWLockAcquired 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #1 main 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: Location is stack of main thread. 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: Mutex {{.*}}) created at: 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #0 AnnotateRWLockAcquired 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #1 main 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: SUMMARY: ThreadSanitizer: read lock of a write locked mutex 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 20