1*bcaeed49SFangrui Song // RUN: %clangxx_tsan -O1 %s %link_libcxx_tsan -o %t && %run %t 2>&1 | FileCheck %s 2*bcaeed49SFangrui Song #include <stdio.h> 3*bcaeed49SFangrui Song #include <memory> 4*bcaeed49SFangrui Song #include <thread> 5*bcaeed49SFangrui Song main()6*bcaeed49SFangrui Songint main() { 7*bcaeed49SFangrui Song int v1 = 0; 8*bcaeed49SFangrui Song int v2 = 0; 9*bcaeed49SFangrui Song std::thread t1; 10*bcaeed49SFangrui Song std::thread t2; 11*bcaeed49SFangrui Song 12*bcaeed49SFangrui Song { 13*bcaeed49SFangrui Song auto thingy = std::make_shared<int>(42); 14*bcaeed49SFangrui Song t1 = std::thread([thingy, &v1] { v1 = *thingy; }); 15*bcaeed49SFangrui Song t2 = std::thread([thingy, &v2] { v2 = *thingy; }); 16*bcaeed49SFangrui Song } 17*bcaeed49SFangrui Song 18*bcaeed49SFangrui Song t1.join(); 19*bcaeed49SFangrui Song t2.join(); 20*bcaeed49SFangrui Song printf("%d %d\n", v1, v2); 21*bcaeed49SFangrui Song // CHECK-NOT: ThreadSanitizer: data race 22*bcaeed49SFangrui Song // CHECK: 42 42 23*bcaeed49SFangrui Song return 0; 24*bcaeed49SFangrui Song } 25