// 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 // 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 // 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 // TODO Success pending on resolution of // https://github.com/google/sanitizers/issues/596 // XFAIL: * #include <assert.h> #include <sanitizer/msan_interface.h> template <class T> class Vector { public: int size; ~Vector() {} }; struct NonTrivial { int a; Vector<int> v; }; struct Trivial { int a; int b; }; int main() { NonTrivial *nt = new NonTrivial(); nt->~NonTrivial(); assert(__msan_test_shadow(nt, sizeof(*nt)) != -1); Trivial *t = new Trivial(); t->~Trivial(); assert(__msan_test_shadow(t, sizeof(*t)) != -1); return 0; }