• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()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