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