15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s 2e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov#include <pthread.h> 3e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov#include <stdio.h> 4e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov 5e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukovextern "C" void AnnotateIgnoreSyncBegin(const char*, int); 6e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukovextern "C" void AnnotateIgnoreSyncEnd(const char*, int); 7e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov 8e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukovint Global; 9e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukovpthread_mutex_t Mutex = PTHREAD_MUTEX_INITIALIZER; 10e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov 11e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukovvoid *Thread(void *x) { 12e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov AnnotateIgnoreSyncBegin(0, 0); 13e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_mutex_lock(&Mutex); 14e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov Global++; 15e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_mutex_unlock(&Mutex); 16e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov AnnotateIgnoreSyncEnd(0, 0); 17e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov return 0; 18e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov} 19e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov 20e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukovint main() { 21e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_t t; 22e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_create(&t, 0, Thread, 0); 23e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_mutex_lock(&Mutex); 24e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov Global++; 25e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_mutex_unlock(&Mutex); 26e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov pthread_join(t, 0); 27e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov} 28e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov 29e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov// CHECK: WARNING: ThreadSanitizer: data race 30e1ddbf9a458e81125a03fea721997565124294aeDmitry Vyukov 31