test/msan/dtor-trivial.cpp. Runtime testing for poisoning vtable pointer in dtor. Summary: Runtime testing for vtable ptr poisoning in dtor. Reviewers: eugenis, kcc Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D12713 Clean test case & comments. Update tests for vptr poisoning order. Simplify test to rely upon globals. Assertions verify that vtable still accessible from dtors. Testing linear inheritance and multiple inheritance for vtable poisoning. Macros for testing expected failing functions. Rename macros. Removed xfail, modified FileCheck commands, to expect test to crash. llvm-svn: 247763
42 lines
989 B
C++
42 lines
989 B
C++
// 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;
|
|
}
|