40 lines · cpp
1// no PCH2// RUN: %clang_cc1 -emit-llvm-only -include %s -include %s %s3// with PCH4// RUN: %clang_cc1 -emit-llvm-only -chain-include %s -chain-include %s %s5#if !defined(PASS1)6#define PASS17 8// A base with a virtual dtor.9struct A {10 virtual ~A();11};12 13// A derived class with an implicit virtual dtor.14struct B : A {15 // Key function to suppress vtable definition.16 virtual void virt();17};18 19#elif !defined(PASS2)20#define PASS221 22// Further derived class that requires ~B().23// Causes definition of ~B(), but it was lost when saving PCH.24struct C : B {25 C();26 ~C() {}27};28 29#else30 31void foo() {32 // Variable that requires ~C().33 C c;34}35 36// VTable placement would again cause definition of ~B(), hiding the bug,37// if not for B::virt(), which suppresses the placement.38 39#endif40