1// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
2#include <pthread.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include <unistd.h>
6
7extern "C" {
8void AnnotateIgnoreReadsBegin(const char *f, int l);
9void AnnotateIgnoreReadsEnd(const char *f, int l);
10void AnnotateIgnoreWritesBegin(const char *f, int l);
11void AnnotateIgnoreWritesEnd(const char *f, int l);
12}
13
14void *Thread(void *p) {
15  *(int*)p = 42;
16  return 0;
17}
18
19int main() {
20  int *p = new int(0);
21  pthread_t t;
22  pthread_create(&t, 0, Thread, p);
23  sleep(1);
24  AnnotateIgnoreReadsBegin(__FILE__, __LINE__);
25  AnnotateIgnoreWritesBegin(__FILE__, __LINE__);
26  free(p);
27  AnnotateIgnoreReadsEnd(__FILE__, __LINE__);
28  AnnotateIgnoreWritesEnd(__FILE__, __LINE__);
29  pthread_join(t, 0);
30  fprintf(stderr, "OK\n");
31  return 0;
32}
33
34// CHECK-NOT: WARNING: ThreadSanitizer: data race
35// CHECK: OK
36