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