10172c8cd8ec72ae11e7b2a2b65b54466ea75de9cAlexey Samsonov// RUN: %clangxx_tsan -O1 %s -o %t && not %t 2>&1 | FileCheck %s
2fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov#include <pthread.h>
3fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov#include <stddef.h>
4fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov
5fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukovvoid *Thread(void *a) {
6fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  *(int*)a = 43;
7fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  return 0;
8fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov}
9fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov
10fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukovint main() {
11fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  int Var = 42;
12fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  pthread_t t;
13fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  pthread_create(&t, 0, Thread, &Var);
14fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  Var = 43;
15fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov  pthread_join(t, 0);
16fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov}
17fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov
18fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov// CHECK: WARNING: ThreadSanitizer: data race
19fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov// CHECK:   Location is stack of main thread.
20fb917e9069ea44f7103f50c658be84a8f66de56cDmitry Vyukov
21