// RUN: %clangxx_msan -O0 %s -o %t && %run %t %p | |
// PR17377: C++ module destructors get stale argument shadow. | |
#include <stdio.h> | |
#include <stdlib.h> | |
class A { | |
public: | |
// This destructor get stale argument shadow left from the call to f(). | |
~A() { | |
if (this) | |
exit(0); | |
} | |
}; | |
A a; | |
__attribute__((noinline)) | |
void f(long x) { | |
} | |
int main(void) { | |
long x; | |
long * volatile p = &x; | |
// This call poisons TLS shadow for the first function argument. | |
f(*p); | |
return 0; | |
} |