Home | History | Annotate | Download | only in msan
      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