1 // RUN: %clangxx_msan -O0 %s -o %t && %run %t %p 2 3 // PR17377: C++ module destructors get stale argument shadow. 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 class A { 8 public: 9 // This destructor get stale argument shadow left from the call to f(). 10 ~A() { 11 if (this) 12 exit(0); 13 } 14 }; 15 16 A a; 17 18 __attribute__((noinline)) 19 void f(long x) { 20 } 21 22 int main(void) { 23 long x; 24 long * volatile p = &x; 25 // This call poisons TLS shadow for the first function argument. 26 f(*p); 27 return 0; 28 } 29