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 Hinesextern "C" void AnnotateRWLockReleased(const char *f, int l, void *m, long rw); 42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main() { 62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines int m = 0; 72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines AnnotateRWLockAcquired(__FILE__, __LINE__, &m, 1); 82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines AnnotateRWLockReleased(__FILE__, __LINE__, &m, 0); 92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines return 0; 102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} 112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: WARNING: ThreadSanitizer: read unlock of a write locked mutex 132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #0 AnnotateRWLockReleased 142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #1 main 152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: Location is stack of main thread. 162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: Mutex {{.*}}) created at: 172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #0 AnnotateRWLockAcquired 182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: #1 main 192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// CHECK: SUMMARY: ThreadSanitizer: read unlock of a write locked mutex 202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines 21