10172c8cd8ec72ae11e7b2a2b65b54466ea75de9cAlexey Samsonov// RUN: %clangxx_tsan -O1 %s -o %t && not %t 2>&1 | FileCheck %s 245269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov#include <pthread.h> 345269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov#include <stdio.h> 445269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov 545269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukovconst long kOffset = 64*1024; 645269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov 745269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukovvoid *Thread(void *p) { 845269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov ((char*)p)[-kOffset] = 43; 945269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov return 0; 1045269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov} 1145269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov 1245269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukovint main() { 1345269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov char *volatile p0 = new char[16]; 1445269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov delete[] p0; 1545269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov char *p = new char[32]; 1645269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov pthread_t th; 1745269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov pthread_create(&th, 0, Thread, p); 1845269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov p[-kOffset] = 42; 1945269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov pthread_join(th, 0); 2045269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov} 2145269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov 2245269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov// Used to crash with CHECK failed. 2345269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov// CHECK: WARNING: ThreadSanitizer: data race 2445269092b22468fd1f9c74de04f8560c05d5b862Dmitry Vyukov 25