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