| // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s | 
 | #include "test.h" | 
 |  | 
 | pthread_rwlock_t rwlock; | 
 | int GLOB; | 
 |  | 
 | void *Thread1(void *p) { | 
 |   (void)p; | 
 |   pthread_rwlock_rdlock(&rwlock); | 
 |   barrier_wait(&barrier); | 
 |   // Write under reader lock. | 
 |   GLOB++; | 
 |   pthread_rwlock_unlock(&rwlock); | 
 |   return 0; | 
 | } | 
 |  | 
 | int main(int argc, char *argv[]) { | 
 |   barrier_init(&barrier, 2); | 
 |   pthread_rwlock_init(&rwlock, NULL); | 
 |   pthread_rwlock_rdlock(&rwlock); | 
 |   pthread_t t; | 
 |   pthread_create(&t, 0, Thread1, 0); | 
 |   volatile int x = GLOB; | 
 |   (void)x; | 
 |   pthread_rwlock_unlock(&rwlock); | 
 |   barrier_wait(&barrier); | 
 |   pthread_join(t, 0); | 
 |   pthread_rwlock_destroy(&rwlock); | 
 |   return 0; | 
 | } | 
 |  | 
 | // CHECK: WARNING: ThreadSanitizer: data race | 
 | // CHECK:   Write of size 4 at {{.*}} by thread T1{{.*}}: | 
 | // CHECK:     #0 Thread1(void*) {{.*}}write_in_reader_lock.cc:12 | 
 | // CHECK:   Previous read of size 4 at {{.*}} by main thread{{.*}}: | 
 | // CHECK:     #0 main {{.*}}write_in_reader_lock.cc:23 |