Mercurial > hg > CbC > CbC_llvm
view compiler-rt/test/msan/dtor-vtable-multiple-inheritance.cpp @ 222:81f6424ef0e3 llvm-original
LLVM original branch
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 18 Jul 2021 22:10:01 +0900 |
parents | 1d019706d866 |
children | c4bab56944e8 |
line wrap: on
line source
// RUN: %clangxx_msan %s -O0 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 %run %t // RUN: %clangxx_msan %s -O1 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 %run %t // RUN: %clangxx_msan %s -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 %run %t // RUN: %clangxx_msan %s -DCVPTR=1 -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 not %run %t // RUN: %clangxx_msan %s -DEAVPTR=1 -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 not %run %t // RUN: %clangxx_msan %s -DEDVPTR=1 -O2 -fsanitize=memory -fsanitize-memory-use-after-dtor -o %t && MSAN_OPTIONS=poison_in_dtor=1 not %run %t // Expected to quit due to invalid access when invoking // function using vtable. class A { public: int x; virtual ~A() { // Should succeed this->A_Foo(); } virtual void A_Foo() {} }; class B : public virtual A { public: int y; virtual ~B() {} virtual void A_Foo() {} }; class C : public B { public: int z; ~C() {} }; class D { public: int w; ~D() {} virtual void D_Foo() {} }; class E : public virtual A, public virtual D { public: int u; ~E() {} void A_Foo() {} }; int main() { // Simple linear inheritance C *c = new C(); c->~C(); // This fails #ifdef CVPTR c->A_Foo(); #endif // Multiple inheritance, so has multiple vtables E *e = new E(); e->~E(); // Both of these fail #ifdef EAVPTR e->A_Foo(); #endif #ifdef EDVPTR e->D_Foo(); #endif }