15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
2ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany#include <pthread.h>
3fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov#include <unistd.h>
4fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov
5ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryanyint Global;
6fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov
7ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryanyvoid *Thread1(void *x) {
8fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov  sleep(1);
9ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany  Global = 42;
10ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany  return x;
11ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany}
12fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov
13ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryanyint main() {
14ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany  pthread_t t;
15fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov  pthread_create(&t, 0, Thread1, 0);
16ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany  Global = 43;
17fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov  pthread_join(t, 0);
18ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany  return Global;
19ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany}
20fb53992c309ed7b9cb2bf15343bf347fead90c02Dmitry Vyukov
21ec1e196dabccd57c69dbcc0d4931bd1c5d36876cKostya Serebryany// CHECK: WARNING: ThreadSanitizer: data race
22