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