brintos

brintos / llvm-project-archived public Read only

0
0
Text · 780 B · 245e8f9 Raw
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