Home | History | Annotate | Download | only in msan
      1 // RUN: %clangxx_msan %s -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 %run %t >%t.out 2>&1
      2 
      3 // RUN: %clangxx_msan %s -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 %run %t >%t.out 2>&1
      4 
      5 // RUN: %clangxx_msan %s -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 %run %t >%t.out 2>&1
      6 
      7 // TODO Success pending on resolution of
      8 // https://github.com/google/sanitizers/issues/596
      9 
     10 // XFAIL: *
     11 
     12 #include <assert.h>
     13 #include <sanitizer/msan_interface.h>
     14 
     15 template <class T> class Vector {
     16  public:
     17   int size;
     18   ~Vector() {}
     19 };
     20 
     21 struct NonTrivial {
     22   int a;
     23   Vector<int> v;
     24 };
     25 
     26 struct Trivial {
     27   int a;
     28   int b;
     29 };
     30 
     31 int main() {
     32   NonTrivial *nt = new NonTrivial();
     33   nt->~NonTrivial();
     34   assert(__msan_test_shadow(nt, sizeof(*nt)) != -1);
     35 
     36   Trivial *t = new Trivial();
     37   t->~Trivial();
     38   assert(__msan_test_shadow(t, sizeof(*t)) != -1);
     39 
     40   return 0;
     41 }
     42