1*d21b3d34SFangrui Song // RUN: %clangxx_msan -O0 %s -o %t && %run %t 2*d21b3d34SFangrui Song 3*d21b3d34SFangrui Song // Check that when TLS block is reused between threads, its shadow is cleaned. 4*d21b3d34SFangrui Song 5*d21b3d34SFangrui Song #include <pthread.h> 6*d21b3d34SFangrui Song #include <stdio.h> 7*d21b3d34SFangrui Song 8*d21b3d34SFangrui Song int __thread x; 9*d21b3d34SFangrui Song ThreadFn(void *)10*d21b3d34SFangrui Songvoid *ThreadFn(void *) { 11*d21b3d34SFangrui Song if (!x) 12*d21b3d34SFangrui Song printf("zzz\n"); 13*d21b3d34SFangrui Song int y; 14*d21b3d34SFangrui Song int * volatile p = &y; 15*d21b3d34SFangrui Song x = *p; 16*d21b3d34SFangrui Song return 0; 17*d21b3d34SFangrui Song } 18*d21b3d34SFangrui Song main(void)19*d21b3d34SFangrui Songint main(void) { 20*d21b3d34SFangrui Song pthread_t t; 21*d21b3d34SFangrui Song for (int i = 0; i < 100; ++i) { 22*d21b3d34SFangrui Song pthread_create(&t, 0, ThreadFn, 0); 23*d21b3d34SFangrui Song pthread_join(t, 0); 24*d21b3d34SFangrui Song } 25*d21b3d34SFangrui Song return 0; 26*d21b3d34SFangrui Song } 27