15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
25a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov#include <pthread.h>
35a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov#include <stdio.h>
45a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov#include <stddef.h>
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <unistd.h>
65a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov
75a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukovint GlobalData[10];
85a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov
95a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukovvoid *Thread(void *a) {
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  sleep(1);
115a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  GlobalData[2] = 42;
125a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  return 0;
135a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov}
145a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov
155a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukovint main() {
165a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  fprintf(stderr, "addr=%p\n", GlobalData);
175a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  pthread_t t;
185a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  pthread_create(&t, 0, Thread, 0);
195a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  GlobalData[2] = 43;
205a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov  pthread_join(t, 0);
215a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov}
225a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov
235a1f23310cc4a1debae8741653defe620518e612Dmitry Vyukov// CHECK: addr=[[ADDR:0x[0-9,a-f]+]]
24c842dabb53cc2101cc5449f24921a972d812d7c6Alexey Samsonov// CHECK: WARNING: ThreadSanitizer: data race
25c842dabb53cc2101cc5449f24921a972d812d7c6Alexey Samsonov// CHECK: Location is global 'GlobalData' of size 40 at [[ADDR]] ({{.*}}+0x{{[0-9,a-f]+}})
265d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines
27