• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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().
~A()10   ~A() {
11     if (this)
12       exit(0);
13   }
14 };
15 
16 A a;
17 
18 __attribute__((noinline))
f(long x)19 void f(long x) {
20 }
21 
main(void)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