1// RUN: %clangxx_msan -m64 -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> 7class A { 8public: 9 // This destructor get stale argument shadow left from the call to f(). 10 ~A() { 11 if (this) 12 exit(0); 13 } 14}; 15 16A a; 17 18__attribute__((noinline)) 19void f(long x) { 20} 21 22int 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