| 123456789101112131415161718192021222324252627282930313233343536373839 |
- // no PCH
- // RUN: %clang_cc1 -emit-llvm-only -include %s -include %s %s
- // with PCH
- // RUN: %clang_cc1 -emit-llvm-only -chain-include %s -chain-include %s %s
- #if !defined(PASS1)
- #define PASS1
- // A base with a virtual dtor.
- struct A {
- virtual ~A();
- };
- // A derived class with an implicit virtual dtor.
- struct B : A {
- // Key function to suppress vtable definition.
- virtual void virt();
- };
- #elif !defined(PASS2)
- #define PASS2
- // Further derived class that requires ~B().
- // Causes definition of ~B(), but it was lost when saving PCH.
- struct C : B {
- C();
- ~C() {}
- };
- #else
- void foo() {
- // Variable that requires ~C().
- C c;
- }
- // VTable placement would again cause definition of ~B(), hiding the bug,
- // if not for B::virt(), which suppresses the placement.
- #endif
|