12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
21a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov#include <pthread.h>
31a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov#include <stdio.h>
41a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov
51a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukovextern "C" const char *__tsan_default_options() {
61a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  return "report_bugs=0";
71a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov}
81a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov
91a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukovint Global;
101a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov
111a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukovvoid *Thread1(void *x) {
121a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  Global = 42;
131a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  return NULL;
141a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov}
151a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov
161a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukovvoid *Thread2(void *x) {
171a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  Global = 43;
181a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  return NULL;
191a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov}
201a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov
211a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukovint main() {
221a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  pthread_t t[2];
231a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  pthread_create(&t[0], NULL, Thread1, NULL);
241a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  pthread_create(&t[1], NULL, Thread2, NULL);
251a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  pthread_join(t[0], NULL);
261a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  pthread_join(t[1], NULL);
271a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  fprintf(stderr, "DONE\n");
281a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov  return 0;
291a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov}
301a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov
311a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov// CHECK-NOT: WARNING: ThreadSanitizer: data race
321a3f1ea833b151fc6554a7f910f8e0185f513a35Dmitry Vyukov// CHECK: DONE
33