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; ~Vector()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 main()31int 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