12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s 2ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov#include <pthread.h> 3ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov#include <stdio.h> 4ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov#include <unistd.h> 5ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov 6ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovint Global; 7ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov 8ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovextern "C" void AnnotateIgnoreWritesBegin(const char *f, int l); 9ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovextern "C" void AnnotateIgnoreWritesEnd(const char *f, int l); 10ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovextern "C" void AnnotateIgnoreReadsBegin(const char *f, int l); 11ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovextern "C" void AnnotateIgnoreReadsEnd(const char *f, int l); 12ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov 13ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovvoid *Thread(void *x) { 14ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov AnnotateIgnoreWritesBegin(__FILE__, __LINE__); 15ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov AnnotateIgnoreReadsBegin(__FILE__, __LINE__); 16ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov Global = 42; 17ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov AnnotateIgnoreReadsEnd(__FILE__, __LINE__); 18ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov AnnotateIgnoreWritesEnd(__FILE__, __LINE__); 19ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov return 0; 20ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov} 21ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov 22ad9da372f962495b3487685232d09390be841b1cDmitry Vyukovint main() { 23ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov pthread_t t; 24ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov pthread_create(&t, 0, Thread, 0); 2563a22f073dcdfbabc492ca4c9eb06d0571915570Dmitry Vyukov sleep(1); 26ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov Global = 43; 27ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov pthread_join(t, 0); 28bd88c187a9eaed794b9098aaf147f9dada8c5131Dmitry Vyukov printf("OK\n"); 29ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov} 30ad9da372f962495b3487685232d09390be841b1cDmitry Vyukov 313617ad70f3ade71b944b35fa3faaadfb97700deaDmitry Vyukov// CHECK-NOT: WARNING: ThreadSanitizer: data race 32