1*863b1174SJulian Lettner // RUN: %clangxx_tsan -O1 -fno-inline-functions %s -o %t && %deflake %run %t | FileCheck %s 29ea3bd5aSDmitry Vyukov #include "test.h" 39ea3bd5aSDmitry Vyukov #include <memory> 49ea3bd5aSDmitry Vyukov 59ea3bd5aSDmitry Vyukov std::unique_ptr<long> global(new long(42)); 69ea3bd5aSDmitry Vyukov thread(void * x)79ea3bd5aSDmitry Vyukovvoid *thread(void *x) { 89ea3bd5aSDmitry Vyukov *global = 43; 99ea3bd5aSDmitry Vyukov barrier_wait(&barrier); 109ea3bd5aSDmitry Vyukov return nullptr; 119ea3bd5aSDmitry Vyukov } 129ea3bd5aSDmitry Vyukov main()139ea3bd5aSDmitry Vyukovint main() { 149ea3bd5aSDmitry Vyukov barrier_init(&barrier, 2); 159ea3bd5aSDmitry Vyukov pthread_t th; 169ea3bd5aSDmitry Vyukov pthread_create(&th, nullptr, thread, nullptr); 179ea3bd5aSDmitry Vyukov pthread_detach(th); 189ea3bd5aSDmitry Vyukov barrier_wait(&barrier); 199ea3bd5aSDmitry Vyukov return 0; 209ea3bd5aSDmitry Vyukov } 219ea3bd5aSDmitry Vyukov 229ea3bd5aSDmitry Vyukov // CHECK: WARNING: ThreadSanitizer: data race 239ea3bd5aSDmitry Vyukov // CHECK: Write of size 8 249ea3bd5aSDmitry Vyukov // The exact spelling and number of std frames is hard to guess. 259ea3bd5aSDmitry Vyukov // CHECK: unique_ptr 260e099a64SBenjamin Kramer // CHECK: #{{[1-9]}} cxa_at_exit_callback_installed_at 270e099a64SBenjamin Kramer // CHECK: #{{[2-9]}} __cxx_global_var_init 28