blob: 3ec4f62bcbd74716cc7f37f2f2421a6c98872679 [file] [log] [blame]
Sebastian Redl58a2cd82011-04-24 16:28:06 +00001// no PCH
2// RUN: %clang_cc1 -emit-llvm -o /dev/null -include %s -include %s %s
3// with PCH
4// RUN: %clang_cc1 -emit-llvm -o /dev/null -chain-include %s -chain-include %s %s
5#if !defined(PASS1)
6#define PASS1
7
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 PASS2
21
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#else
30
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#endif