// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm-only -fdump-vtable-layouts > %t 2>&1 
// RUN: FileCheck --check-prefix=CHECK-1 %s < %t
// RUN: FileCheck --check-prefix=CHECK-2 %s < %t
// RUN: FileCheck --check-prefix=CHECK-3 %s < %t
// RUN: FileCheck --check-prefix=CHECK-4 %s < %t
// RUN: FileCheck --check-prefix=CHECK-5 %s < %t
// RUN: FileCheck --check-prefix=CHECK-6 %s < %t
// RUN: FileCheck --check-prefix=CHECK-7 %s < %t
// RUN: FileCheck --check-prefix=CHECK-8 %s < %t
// RUN: FileCheck --check-prefix=CHECK-9 %s < %t
// RUN: FileCheck --check-prefix=CHECK-10 %s < %t
// RUN: FileCheck --check-prefix=CHECK-11 %s < %t
// RUN: FileCheck --check-prefix=CHECK-12 %s < %t
// RUN: FileCheck --check-prefix=CHECK-13 %s < %t
// RUN: FileCheck --check-prefix=CHECK-14 %s < %t
// RUN: FileCheck --check-prefix=CHECK-15 %s < %t
// RUN: FileCheck --check-prefix=CHECK-16 %s < %t
// RUN: FileCheck --check-prefix=CHECK-17 %s < %t
// RUN: FileCheck --check-prefix=CHECK-18 %s < %t
// RUN: FileCheck --check-prefix=CHECK-19 %s < %t
// RUN: FileCheck --check-prefix=CHECK-20 %s < %t
// RUN: FileCheck --check-prefix=CHECK-21 %s < %t
// RUN: FileCheck --check-prefix=CHECK-22 %s < %t
// RUN: FileCheck --check-prefix=CHECK-23 %s < %t
// RUN: FileCheck --check-prefix=CHECK-24 %s < %t
// RUN: FileCheck --check-prefix=CHECK-25 %s < %t
// RUN: FileCheck --check-prefix=CHECK-26 %s < %t
// RUN: FileCheck --check-prefix=CHECK-27 %s < %t
// RUN: FileCheck --check-prefix=CHECK-28 %s < %t
// RUN: FileCheck --check-prefix=CHECK-29 %s < %t
// RUN: FileCheck --check-prefix=CHECK-30 %s < %t
// RUN: FileCheck --check-prefix=CHECK-31 %s < %t
// RUN: FileCheck --check-prefix=CHECK-32 %s < %t
// RUN: FileCheck --check-prefix=CHECK-33 %s < %t
// RUN: FileCheck --check-prefix=CHECK-34 %s < %t
// RUN: FileCheck --check-prefix=CHECK-35 %s < %t
// RUN: FileCheck --check-prefix=CHECK-36 %s < %t
// RUN: FileCheck --check-prefix=CHECK-37 %s < %t
// RUN: FileCheck --check-prefix=CHECK-38 %s < %t
// RUN: FileCheck --check-prefix=CHECK-39 %s < %t
// RUN: FileCheck --check-prefix=CHECK-40 %s < %t
// RUN: FileCheck --check-prefix=CHECK-41 %s < %t
// RUN: FileCheck --check-prefix=CHECK-42 %s < %t
// RUN: FileCheck --check-prefix=CHECK-43 %s < %t
// RUN: FileCheck --check-prefix=CHECK-44 %s < %t

// For now, just verify this doesn't crash.
namespace test0 {
  struct Obj {};

  struct Base {           virtual const Obj *foo() = 0; };
  struct Derived : Base { virtual       Obj *foo() { return new Obj(); } };

  void test(Derived *D) { D->foo(); }
}

namespace Test1 {
// CHECK-1:      Vtable for 'Test1::A' (3 entries).
// CHECK-1-NEXT:   0 | offset_to_top (0)
// CHECK-1-NEXT:   1 | Test1::A RTTI
// CHECK-1-NEXT:       -- (Test1::A, 0) vtable address --
// CHECK-1-NEXT:   2 | void Test1::A::f()
struct A {
  virtual void f();
};
void A::f() { }

}

namespace Test2 {

// This is a smoke test of the vtable dumper.
// CHECK-2:      Vtable for 'Test2::A' (9 entries).
// CHECK-2-NEXT:   0 | offset_to_top (0)
// CHECK-2-NEXT:   1 | Test2::A RTTI
// CHECK-2-NEXT:       -- (Test2::A, 0) vtable address --
// CHECK-2-NEXT:   2 | void Test2::A::f()
// CHECK-2-NEXT:   3 | void Test2::A::f() const
// CHECK-2-NEXT:   4 | Test2::A *Test2::A::g(int)
// CHECK-2-NEXT:   5 | Test2::A::~A() [complete]
// CHECK-2-NEXT:   6 | Test2::A::~A() [deleting]
// CHECK-2-NEXT:   7 | void Test2::A::h()
// CHECK-2-NEXT:   8 | Test2::A &Test2::A::operator=(const Test2::A &)
struct A {
  virtual void f();
  virtual void f() const;
  
  virtual A* g(int a);
  virtual ~A();
  virtual void h();
  virtual A& operator=(const A&);
};
void A::f() { }

// Another simple vtable dumper test.

// CHECK-3:     Vtable for 'Test2::B' (6 entries).
// CHECK-3-NEXT:  0 | offset_to_top (0)
// CHECK-3-NEXT:  1 | Test2::B RTTI
// CHECK-3-NEXT:    -- (Test2::B, 0) vtable address --
// CHECK-3-NEXT:  2 | void Test2::B::f()
// CHECK-3-NEXT:  3 | void Test2::B::g() [pure]
// CHECK-3-NEXT:  4 | Test2::B::~B() [complete] [pure]
// CHECK-3-NEXT:  5 | Test2::B::~B() [deleting] [pure]
struct B {
  virtual void f();
  virtual void g() = 0;
  virtual ~B() = 0;
};
void B::f() { }

}

namespace Test3 {

// If a function in a derived class overrides a function in a primary base,
// then the function should not have an entry in the derived class (unless the return
// value requires adjusting).

// CHECK-4:      Vtable for 'Test3::A' (3 entries).
// CHECK-4-NEXT:   0 | offset_to_top (0)
// CHECK-4-NEXT:   1 | Test3::A RTTI
// CHECK-4-NEXT:       -- (Test3::A, 0) vtable address --
// CHECK-4-NEXT:   2 | void Test3::A::f()
struct A {
  virtual void f();
};
void A::f() { } 

// CHECK-5:     Vtable for 'Test3::B' (4 entries).
// CHECK-5-NEXT:  0 | offset_to_top (0)
// CHECK-5-NEXT:  1 | Test3::B RTTI
// CHECK-5-NEXT:      -- (Test3::A, 0) vtable address --
// CHECK-5-NEXT:      -- (Test3::B, 0) vtable address --
// CHECK-5-NEXT:  2 | void Test3::B::f()
// CHECK-5-NEXT:  3 | void Test3::B::g()
struct B : A {
  virtual void f();
  virtual void g();
};
void B::f() { }

// CHECK-6:     Vtable for 'Test3::C' (5 entries).
// CHECK-6-NEXT:  0 | offset_to_top (0)
// CHECK-6-NEXT:  1 | Test3::C RTTI
// CHECK-6-NEXT:     -- (Test3::A, 0) vtable address --
// CHECK-6-NEXT:     -- (Test3::C, 0) vtable address --
// CHECK-6-NEXT:  2 | void Test3::A::f()
// CHECK-6-NEXT:  3 | void Test3::C::g()
// CHECK-6-NEXT:  4 | void Test3::C::h()
struct C : A {
  virtual void g();
  virtual void h();
};
void C::g() { }

// CHECK-7:     Vtable for 'Test3::D' (5 entries).
// CHECK-7-NEXT:  0 | offset_to_top (0)
// CHECK-7-NEXT:  1 | Test3::D RTTI
// CHECK-7-NEXT:     -- (Test3::A, 0) vtable address --
// CHECK-7-NEXT:     -- (Test3::B, 0) vtable address --
// CHECK-7-NEXT:     -- (Test3::D, 0) vtable address --
// CHECK-7-NEXT:  2 | void Test3::D::f()
// CHECK-7-NEXT:  3 | void Test3::D::g()
// CHECK-7-NEXT:  4 | void Test3::D::h()
struct D : B {
  virtual void f();
  virtual void g();
  virtual void h();
};

void D::f() { } 
}

namespace Test4 {

// Test non-virtual result adjustments.

struct R1 { int r1; };
struct R2 { int r2; };
struct R3 : R1, R2 { int r3; };

struct A {
  virtual R2 *f();
};

// CHECK-8:     Vtable for 'Test4::B' (4 entries).
// CHECK-8-NEXT:  0 | offset_to_top (0)
// CHECK-8-NEXT:  1 | Test4::B RTTI
// CHECK-8-NEXT:      -- (Test4::A, 0) vtable address --
// CHECK-8-NEXT:      -- (Test4::B, 0) vtable address --
// CHECK-8-NEXT:  2 | Test4::R3 *Test4::B::f()
// CHECK-8-NEXT:      [return adjustment: 4 non-virtual]
// CHECK-8-NEXT:  3 | Test4::R3 *Test4::B::f()

struct B : A {
  virtual R3 *f();
};
R3 *B::f() { return 0; }

// Test virtual result adjustments.
struct V1 { int v1; };
struct V2 : virtual V1 { int v1; };

struct C {
  virtual V1 *f(); 
};

// CHECK-9:     Vtable for 'Test4::D' (4 entries).
// CHECK-9-NEXT:   0 | offset_to_top (0)
// CHECK-9-NEXT:   1 | Test4::D RTTI
// CHECK-9-NEXT:       -- (Test4::C, 0) vtable address --
// CHECK-9-NEXT:       -- (Test4::D, 0) vtable address --
// CHECK-9-NEXT:   2 | Test4::V2 *Test4::D::f()
// CHECK-9-NEXT:       [return adjustment: 0 non-virtual, -24 vbase offset offset]
// CHECK-9-NEXT:   3 | Test4::V2 *Test4::D::f()
struct D : C {
  virtual V2 *f();
};
V2 *D::f() { return 0; };

// Virtual result adjustments with an additional non-virtual adjustment.
struct V3 : virtual R3 { int r3; };

// CHECK-10:     Vtable for 'Test4::E' (4 entries).
// CHECK-10-NEXT:   0 | offset_to_top (0)
// CHECK-10-NEXT:   1 | Test4::E RTTI
// CHECK-10-NEXT:       -- (Test4::A, 0) vtable address --
// CHECK-10-NEXT:       -- (Test4::E, 0) vtable address --
// CHECK-10-NEXT:   2 | Test4::V3 *Test4::E::f()
// CHECK-10-NEXT:       [return adjustment: 4 non-virtual, -24 vbase offset offset]
// CHECK-10-NEXT:   3 | Test4::V3 *Test4::E::f()

struct E : A {
  virtual V3 *f();
};
V3 *E::f() { return 0;}

// Test that a pure virtual member doesn't get a thunk.

// CHECK-11:     Vtable for 'Test4::F' (5 entries).
// CHECK-11-NEXT:   0 | offset_to_top (0)
// CHECK-11-NEXT:   1 | Test4::F RTTI
// CHECK-11-NEXT:       -- (Test4::A, 0) vtable address --
// CHECK-11-NEXT:       -- (Test4::F, 0) vtable address --
// CHECK-11-NEXT:   2 | Test4::R3 *Test4::F::f() [pure]
// CHECK-11-NEXT:   3 | void Test4::F::g()
// CHECK-11-NEXT:   4 | Test4::R3 *Test4::F::f() [pure]
struct F : A {
  virtual void g();
  virtual R3 *f() = 0;
};
void F::g() { }

}

namespace Test5 {

// Simple secondary vtables without 'this' pointer adjustments.
struct A {
  virtual void f();
  virtual void g();
  int a;
};

struct B1 : A {
  virtual void f();
  int b1;
};

struct B2 : A {
  virtual void g();
  int b2;
};

// CHECK-12:     Vtable for 'Test5::C' (9 entries).
// CHECK-12-NEXT:   0 | offset_to_top (0)
// CHECK-12-NEXT:   1 | Test5::C RTTI
// CHECK-12-NEXT:       -- (Test5::A, 0) vtable address --
// CHECK-12-NEXT:       -- (Test5::B1, 0) vtable address --
// CHECK-12-NEXT:       -- (Test5::C, 0) vtable address --
// CHECK-12-NEXT:   2 | void Test5::B1::f()
// CHECK-12-NEXT:   3 | void Test5::A::g()
// CHECK-12-NEXT:   4 | void Test5::C::h()
// CHECK-12-NEXT:   5 | offset_to_top (-16)
// CHECK-12-NEXT:   6 | Test5::C RTTI
// CHECK-12-NEXT:       -- (Test5::A, 16) vtable address --
// CHECK-12-NEXT:       -- (Test5::B2, 16) vtable address --
// CHECK-12-NEXT:   7 | void Test5::A::f()
// CHECK-12-NEXT:   8 | void Test5::B2::g()
struct C : B1, B2 {
  virtual void h();
};
void C::h() { }  
}

namespace Test6 {

// Simple non-virtual 'this' pointer adjustments.
struct A1 {
  virtual void f();
  int a;
};

struct A2 {
  virtual void f();
  int a;
};

// CHECK-13:     Vtable for 'Test6::C' (6 entries).
// CHECK-13-NEXT:   0 | offset_to_top (0)
// CHECK-13-NEXT:   1 | Test6::C RTTI
// CHECK-13-NEXT:       -- (Test6::A1, 0) vtable address --
// CHECK-13-NEXT:       -- (Test6::C, 0) vtable address --
// CHECK-13-NEXT:   2 | void Test6::C::f()
// CHECK-13-NEXT:   3 | offset_to_top (-16)
// CHECK-13-NEXT:   4 | Test6::C RTTI
// CHECK-13-NEXT:       -- (Test6::A2, 16) vtable address --
// CHECK-13-NEXT:   5 | void Test6::C::f()
// CHECK-13-NEXT:       [this adjustment: -16 non-virtual]
struct C : A1, A2 {
  virtual void f();
};
void C::f() { }

}

namespace Test7 {

// Test that the D::f overrider for A::f have different 'this' pointer
// adjustments in the two A base subobjects.

struct A {
  virtual void f();
  int a;
};

struct B1 : A { };
struct B2 : A { };

struct C { virtual void c(); };

// CHECK-14:     Vtable for 'Test7::D' (10 entries).
// CHECK-14-NEXT:   0 | offset_to_top (0)
// CHECK-14-NEXT:   1 | Test7::D RTTI
// CHECK-14-NEXT:       -- (Test7::C, 0) vtable address --
// CHECK-14-NEXT:       -- (Test7::D, 0) vtable address --
// CHECK-14-NEXT:   2 | void Test7::C::c()
// CHECK-14-NEXT:   3 | void Test7::D::f()
// CHECK-14-NEXT:   4 | offset_to_top (-8)
// CHECK-14-NEXT:   5 | Test7::D RTTI
// CHECK-14-NEXT:       -- (Test7::A, 8) vtable address --
// CHECK-14-NEXT:       -- (Test7::B1, 8) vtable address --
// CHECK-14-NEXT:   6 | void Test7::D::f()
// CHECK-14-NEXT:       [this adjustment: -8 non-virtual]
// CHECK-14-NEXT:   7 | offset_to_top (-24)
// CHECK-14-NEXT:   8 | Test7::D RTTI
// CHECK-14-NEXT:       -- (Test7::A, 24) vtable address --
// CHECK-14-NEXT:       -- (Test7::B2, 24) vtable address --
// CHECK-14-NEXT:   9 | void Test7::D::f()
// CHECK-14-NEXT:       [this adjustment: -24 non-virtual]
struct D : C, B1, B2 {
  virtual void f();
};
void D::f() { }

}

namespace Test8 {

// Test that we don't try to layout vtables for classes that don't have
// virtual bases or virtual member functions.

struct A { };

// CHECK-15:     Vtable for 'Test8::B' (3 entries).
// CHECK-15-NEXT:   0 | offset_to_top (0)
// CHECK-15-NEXT:   1 | Test8::B RTTI
// CHECK-15-NEXT:       -- (Test8::B, 0) vtable address --
// CHECK-15-NEXT:   2 | void Test8::B::f()
struct B : A { 
  virtual void f();
};
void B::f() { }

}

namespace Test9 {

// Simple test of vbase offsets.

struct A1 { int a1; };
struct A2 { int a2; };

// CHECK-16:     Vtable for 'Test9::B' (5 entries).
// CHECK-16-NEXT:   0 | vbase_offset (16)
// CHECK-16-NEXT:   1 | vbase_offset (12)
// CHECK-16-NEXT:   2 | offset_to_top (0)
// CHECK-16-NEXT:   3 | Test9::B RTTI
// CHECK-16-NEXT:       -- (Test9::B, 0) vtable address --
// CHECK-16-NEXT:   4 | void Test9::B::f()
struct B : virtual A1, virtual A2 {
  int b;

  virtual void f();
};


void B::f() { }

}

namespace Test10 {

// Test for a bug where we would not emit secondary vtables for bases
// of a primary base.
struct A1 { virtual void a1(); };
struct A2 { virtual void a2(); };

// CHECK-17:     Vtable for 'Test10::C' (7 entries).
// CHECK-17-NEXT:   0 | offset_to_top (0)
// CHECK-17-NEXT:   1 | Test10::C RTTI
// CHECK-17-NEXT:       -- (Test10::A1, 0) vtable address --
// CHECK-17-NEXT:       -- (Test10::B, 0) vtable address --
// CHECK-17-NEXT:       -- (Test10::C, 0) vtable address --
// CHECK-17-NEXT:   2 | void Test10::A1::a1()
// CHECK-17-NEXT:   3 | void Test10::C::f()
// CHECK-17-NEXT:   4 | offset_to_top (-8)
// CHECK-17-NEXT:   5 | Test10::C RTTI
// CHECK-17-NEXT:       -- (Test10::A2, 8) vtable address --
// CHECK-17-NEXT:   6 | void Test10::A2::a2()
struct B : A1, A2 {
  int b;
};

struct C : B {
  virtual void f();
};
void C::f() { }

}

namespace Test11 {

// Very simple test of vtables for virtual bases.
struct A1 { int a; };
struct A2 { int b; };

struct B : A1, virtual A2 {
  int b;
};

// CHECK-18:     Vtable for 'Test11::C' (8 entries).
// CHECK-18-NEXT:   0 | vbase_offset (24)
// CHECK-18-NEXT:   1 | vbase_offset (8)
// CHECK-18-NEXT:   2 | offset_to_top (0)
// CHECK-18-NEXT:   3 | Test11::C RTTI
// CHECK-18-NEXT:       -- (Test11::C, 0) vtable address --
// CHECK-18-NEXT:   4 | void Test11::C::f()
// CHECK-18-NEXT:   5 | vbase_offset (16)
// CHECK-18-NEXT:   6 | offset_to_top (-8)
// CHECK-18-NEXT:   7 | Test11::C RTTI
struct C : virtual B {
  virtual void f();
};
void C::f() { }

}

namespace Test12 {

// Test that the right vcall offsets are generated in the right order.

// CHECK-19:      Vtable for 'Test12::B' (19 entries).
// CHECK-19-NEXT:    0 | vbase_offset (8)
// CHECK-19-NEXT:    1 | offset_to_top (0)
// CHECK-19-NEXT:    2 | Test12::B RTTI
// CHECK-19-NEXT:        -- (Test12::B, 0) vtable address --
// CHECK-19-NEXT:    3 | void Test12::B::f()
// CHECK-19-NEXT:    4 | void Test12::B::a()
// CHECK-19-NEXT:    5 | vcall_offset (32)
// CHECK-19-NEXT:    6 | vcall_offset (16)
// CHECK-19-NEXT:    7 | vcall_offset (-8)
// CHECK-19-NEXT:    8 | vcall_offset (0)
// CHECK-19-NEXT:    9 | offset_to_top (-8)
// CHECK-19-NEXT:   10 | Test12::B RTTI
// CHECK-19-NEXT:        -- (Test12::A, 8) vtable address --
// CHECK-19-NEXT:        -- (Test12::A1, 8) vtable address --
// CHECK-19-NEXT:   11 | void Test12::A1::a1()
// CHECK-19-NEXT:   12 | void Test12::B::a()
// CHECK-19-NEXT:        [this adjustment: 0 non-virtual, -32 vcall offset offset]
// CHECK-19-NEXT:   13 | offset_to_top (-24)
// CHECK-19-NEXT:   14 | Test12::B RTTI
// CHECK-19-NEXT:        -- (Test12::A2, 24) vtable address --
// CHECK-19-NEXT:   15 | void Test12::A2::a2()
// CHECK-19-NEXT:   16 | offset_to_top (-40)
// CHECK-19-NEXT:   17 | Test12::B RTTI
// CHECK-19-NEXT:        -- (Test12::A3, 40) vtable address --
// CHECK-19-NEXT:   18 | void Test12::A3::a3()
struct A1 {
  virtual void a1();
  int a;
};

struct A2 {
  virtual void a2();
  int a;
};

struct A3 {
  virtual void a3();
  int a;
};

struct A : A1, A2, A3 {
  virtual void a();
  int i;
};

struct B : virtual A {
  virtual void f();

  virtual void a();
};
void B::f() { } 

}

namespace Test13 {

// Test that we don't try to emit a vtable for 'A' twice.
struct A {
  virtual void f();
};

struct B : virtual A {
  virtual void f();
};

// CHECK-20:      Vtable for 'Test13::C' (6 entries).
// CHECK-20-NEXT:    0 | vbase_offset (0)
// CHECK-20-NEXT:    1 | vbase_offset (0)
// CHECK-20-NEXT:    2 | vcall_offset (0)
// CHECK-20-NEXT:    3 | offset_to_top (0)
// CHECK-20-NEXT:    4 | Test13::C RTTI
// CHECK-20-NEXT:        -- (Test13::A, 0) vtable address --
// CHECK-20-NEXT:        -- (Test13::B, 0) vtable address --
// CHECK-20-NEXT:        -- (Test13::C, 0) vtable address --
// CHECK-20-NEXT:    5 | void Test13::C::f()
struct C : virtual B, virtual A {
  virtual void f();
};
void C::f() { }

}

namespace Test14 {

// Verify that we handle A being a non-virtual base of B, which is a virtual base.

struct A { 
  virtual void f(); 
};

struct B : A { };

struct C : virtual B { };

// CHECK-21:      Vtable for 'Test14::D' (5 entries).
// CHECK-21-NEXT:    0 | vbase_offset (0)
// CHECK-21-NEXT:    1 | vcall_offset (0)
// CHECK-21-NEXT:    2 | offset_to_top (0)
// CHECK-21-NEXT:    3 | Test14::D RTTI
// CHECK-21-NEXT:        -- (Test14::A, 0) vtable address --
// CHECK-21-NEXT:        -- (Test14::B, 0) vtable address --
// CHECK-21-NEXT:        -- (Test14::C, 0) vtable address --
// CHECK-21-NEXT:        -- (Test14::D, 0) vtable address --
// CHECK-21-NEXT:    4 | void Test14::D::f()
struct D : C, virtual B {
 virtual void f();
};
void D::f() { }

}

namespace Test15 {

// Test that we don't emit an extra vtable for B since it's a primary base of C.
struct A { virtual void a(); };
struct B { virtual void b(); };

struct C : virtual B { };

// CHECK-22:      Vtable for 'Test15::D' (11 entries).
// CHECK-22-NEXT:    0 | vbase_offset (8)
// CHECK-22-NEXT:    1 | vbase_offset (8)
// CHECK-22-NEXT:    2 | offset_to_top (0)
// CHECK-22-NEXT:    3 | Test15::D RTTI
// CHECK-22-NEXT:        -- (Test15::A, 0) vtable address --
// CHECK-22-NEXT:        -- (Test15::D, 0) vtable address --
// CHECK-22-NEXT:    4 | void Test15::A::a()
// CHECK-22-NEXT:    5 | void Test15::D::f()
// CHECK-22-NEXT:    6 | vbase_offset (0)
// CHECK-22-NEXT:    7 | vcall_offset (0)
// CHECK-22-NEXT:    8 | offset_to_top (-8)
// CHECK-22-NEXT:    9 | Test15::D RTTI
// CHECK-22-NEXT:        -- (Test15::B, 8) vtable address --
// CHECK-22-NEXT:        -- (Test15::C, 8) vtable address --
// CHECK-22-NEXT:   10 | void Test15::B::b()
struct D : A, virtual B, virtual C { 
  virtual void f();
};
void D::f() { } 

}

namespace Test16 {

// Test that destructors share vcall offsets.

struct A { virtual ~A(); };
struct B { virtual ~B(); };

struct C : A, B { virtual ~C(); };

// CHECK-23:      Vtable for 'Test16::D' (15 entries).
// CHECK-23-NEXT:    0 | vbase_offset (8)
// CHECK-23-NEXT:    1 | offset_to_top (0)
// CHECK-23-NEXT:    2 | Test16::D RTTI
// CHECK-23-NEXT:        -- (Test16::D, 0) vtable address --
// CHECK-23-NEXT:    3 | void Test16::D::f()
// CHECK-23-NEXT:    4 | Test16::D::~D() [complete]
// CHECK-23-NEXT:    5 | Test16::D::~D() [deleting]
// CHECK-23-NEXT:    6 | vcall_offset (-8)
// CHECK-23-NEXT:    7 | offset_to_top (-8)
// CHECK-23-NEXT:    8 | Test16::D RTTI
// CHECK-23-NEXT:        -- (Test16::A, 8) vtable address --
// CHECK-23-NEXT:        -- (Test16::C, 8) vtable address --
// CHECK-23-NEXT:    9 | Test16::D::~D() [complete]
// CHECK-23-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
// CHECK-23-NEXT:   10 | Test16::D::~D() [deleting]
// CHECK-23-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
// CHECK-23-NEXT:   11 | offset_to_top (-16)
// CHECK-23-NEXT:   12 | Test16::D RTTI
// CHECK-23-NEXT:        -- (Test16::B, 16) vtable address --
// CHECK-23-NEXT:   13 | Test16::D::~D() [complete]
// CHECK-23-NEXT:        [this adjustment: -8 non-virtual, -24 vcall offset offset]
// CHECK-23-NEXT:   14 | Test16::D::~D() [deleting]
// CHECK-23-NEXT:        [this adjustment: -8 non-virtual, -24 vcall offset offset]
struct D : virtual C {
  virtual void f();
};
void D::f() { } 

}

namespace Test17 {

// Test that we don't mark E::f in the C-in-E vtable as unused.
struct A { virtual void f(); };
struct B : virtual A { virtual void f(); };
struct C : virtual A { virtual void f(); };
struct D : virtual B, virtual C { virtual void f(); };

// CHECK-24:      Vtable for 'Test17::E' (13 entries).
// CHECK-24-NEXT:    0 | vbase_offset (0)
// CHECK-24-NEXT:    1 | vbase_offset (8)
// CHECK-24-NEXT:    2 | vbase_offset (0)
// CHECK-24-NEXT:    3 | vbase_offset (0)
// CHECK-24-NEXT:    4 | vcall_offset (0)
// CHECK-24-NEXT:    5 | offset_to_top (0)
// CHECK-24-NEXT:    6 | Test17::E RTTI
// CHECK-24-NEXT:        -- (Test17::A, 0) vtable address --
// CHECK-24-NEXT:        -- (Test17::B, 0) vtable address --
// CHECK-24-NEXT:        -- (Test17::D, 0) vtable address --
// CHECK-24-NEXT:        -- (Test17::E, 0) vtable address --
// CHECK-24-NEXT:    7 | void Test17::E::f()
// CHECK-24-NEXT:    8 | vbase_offset (-8)
// CHECK-24-NEXT:    9 | vcall_offset (-8)
// CHECK-24-NEXT:   10 | offset_to_top (-8)
// CHECK-24-NEXT:   11 | Test17::E RTTI
// CHECK-24-NEXT:        -- (Test17::C, 8) vtable address --
// CHECK-24-NEXT:   12 | void Test17::E::f()
// CHECK-24-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
class E : virtual D {
  virtual void f();  
};
void E::f() {}

}

namespace Test18 {

// Test that we compute the right 'this' adjustment offsets.

struct A {
  virtual void f();
  virtual void g();
};

struct B : virtual A {
  virtual void f();
};

struct C : A, B {
  virtual void g();
};

// CHECK-25:      Vtable for 'Test18::D' (24 entries).
// CHECK-25-NEXT:    0 | vbase_offset (8)
// CHECK-25-NEXT:    1 | vbase_offset (0)
// CHECK-25-NEXT:    2 | vbase_offset (0)
// CHECK-25-NEXT:    3 | vcall_offset (8)
// CHECK-25-NEXT:    4 | vcall_offset (0)
// CHECK-25-NEXT:    5 | offset_to_top (0)
// CHECK-25-NEXT:    6 | Test18::D RTTI
// CHECK-25-NEXT:        -- (Test18::A, 0) vtable address --
// CHECK-25-NEXT:        -- (Test18::B, 0) vtable address --
// CHECK-25-NEXT:        -- (Test18::D, 0) vtable address --
// CHECK-25-NEXT:    7 | void Test18::D::f()
// CHECK-25-NEXT:    8 | void Test18::C::g()
// CHECK-25-NEXT:        [this adjustment: 0 non-virtual, -32 vcall offset offset]
// CHECK-25-NEXT:    9 | void Test18::D::h()
// CHECK-25-NEXT:   10 | vcall_offset (0)
// CHECK-25-NEXT:   11 | vcall_offset (-8)
// CHECK-25-NEXT:   12 | vbase_offset (-8)
// CHECK-25-NEXT:   13 | offset_to_top (-8)
// CHECK-25-NEXT:   14 | Test18::D RTTI
// CHECK-25-NEXT:        -- (Test18::A, 8) vtable address --
// CHECK-25-NEXT:        -- (Test18::C, 8) vtable address --
// CHECK-25-NEXT:   15 | void Test18::D::f()
// CHECK-25-NEXT:        [this adjustment: 0 non-virtual, -32 vcall offset offset]
// CHECK-25-NEXT:   16 | void Test18::C::g()
// CHECK-25-NEXT:   17 | vbase_offset (-16)
// CHECK-25-NEXT:   18 | vcall_offset (-8)
// CHECK-25-NEXT:   19 | vcall_offset (-16)
// CHECK-25-NEXT:   20 | offset_to_top (-16)
// CHECK-25-NEXT:   21 | Test18::D RTTI
// CHECK-25-NEXT:        -- (Test18::B, 16) vtable address --
// CHECK-25-NEXT:   22 | void Test18::D::f()
// CHECK-25-NEXT:        [this adjustment: -8 non-virtual, -32 vcall offset offset]
// CHECK-25-NEXT:   23 | [unused] void Test18::C::g()

// CHECK-25:      Construction vtable for ('Test18::B', 0) in 'Test18::D' (7 entries).
// CHECK-25-NEXT:    0 | vbase_offset (0)
// CHECK-25-NEXT:    1 | vcall_offset (0)
// CHECK-25-NEXT:    2 | vcall_offset (0)
// CHECK-25-NEXT:    3 | offset_to_top (0)
// CHECK-25-NEXT:    4 | Test18::B RTTI
// CHECK-25-NEXT:        -- (Test18::A, 0) vtable address --
// CHECK-25-NEXT:        -- (Test18::B, 0) vtable address --
// CHECK-25-NEXT:    5 | void Test18::B::f()
// CHECK-25-NEXT:    6 | void Test18::A::g()

// CHECK-25:      Construction vtable for ('Test18::C', 8) in 'Test18::D' (20 entries).
// CHECK-25-NEXT:    0 | vcall_offset (0)
// CHECK-25-NEXT:    1 | vcall_offset (0)
// CHECK-25-NEXT:    2 | vbase_offset (-8)
// CHECK-25-NEXT:    3 | offset_to_top (0)
// CHECK-25-NEXT:    4 | Test18::C RTTI
// CHECK-25-NEXT:        -- (Test18::A, 8) vtable address --
// CHECK-25-NEXT:        -- (Test18::C, 8) vtable address --
// CHECK-25-NEXT:    5 | void Test18::A::f()
// CHECK-25-NEXT:    6 | void Test18::C::g()
// CHECK-25-NEXT:    7 | vbase_offset (-16)
// CHECK-25-NEXT:    8 | vcall_offset (-8)
// CHECK-25-NEXT:    9 | vcall_offset (0)
// CHECK-25-NEXT:   10 | offset_to_top (-8)
// CHECK-25-NEXT:   11 | Test18::C RTTI
// CHECK-25-NEXT:        -- (Test18::B, 16) vtable address --
// CHECK-25-NEXT:   12 | void Test18::B::f()
// CHECK-25-NEXT:   13 | [unused] void Test18::C::g()
// CHECK-25-NEXT:   14 | vcall_offset (8)
// CHECK-25-NEXT:   15 | vcall_offset (16)
// CHECK-25-NEXT:   16 | offset_to_top (8)
// CHECK-25-NEXT:   17 | Test18::C RTTI
// CHECK-25-NEXT:        -- (Test18::A, 0) vtable address --
// CHECK-25-NEXT:   18 | void Test18::B::f()
// CHECK-25-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
// CHECK-25-NEXT:   19 | void Test18::C::g()
// CHECK-25-NEXT:        [this adjustment: 0 non-virtual, -32 vcall offset offset]

// CHECK-25:      Construction vtable for ('Test18::B', 16) in 'Test18::D' (13 entries).
// CHECK-25-NEXT:    0 | vbase_offset (-16)
// CHECK-25-NEXT:    1 | vcall_offset (-16)
// CHECK-25-NEXT:    2 | vcall_offset (0)
// CHECK-25-NEXT:    3 | offset_to_top (0)
// CHECK-25-NEXT:    4 | Test18::B RTTI
// CHECK-25-NEXT:        -- (Test18::B, 16) vtable address --
// CHECK-25-NEXT:    5 | void Test18::B::f()
// CHECK-25-NEXT:    6 | [unused] void Test18::A::g()
// CHECK-25-NEXT:    7 | vcall_offset (0)
// CHECK-25-NEXT:    8 | vcall_offset (16)
// CHECK-25-NEXT:    9 | offset_to_top (16)
// CHECK-25-NEXT:   10 | Test18::B RTTI
// CHECK-25-NEXT:        -- (Test18::A, 0) vtable address --
// CHECK-25-NEXT:   11 | void Test18::B::f()
// CHECK-25-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
// CHECK-25-NEXT:   12 | void Test18::A::g()
struct D : virtual B, virtual C, virtual A 
{
  virtual void f();
  virtual void h();
};
void D::f() {}

}

namespace Test19 {

// Another 'this' adjustment test.

struct A {
  int a;

  virtual void f();
};

struct B : A {
  int b;

  virtual void g();
};

struct C {
  virtual void c();
};

// CHECK-26:      Vtable for 'Test19::D' (13 entries).
// CHECK-26-NEXT:    0 | vbase_offset (24)
// CHECK-26-NEXT:    1 | offset_to_top (0)
// CHECK-26-NEXT:    2 | Test19::D RTTI
// CHECK-26-NEXT:        -- (Test19::C, 0) vtable address --
// CHECK-26-NEXT:        -- (Test19::D, 0) vtable address --
// CHECK-26-NEXT:    3 | void Test19::C::c()
// CHECK-26-NEXT:    4 | void Test19::D::f()
// CHECK-26-NEXT:    5 | offset_to_top (-8)
// CHECK-26-NEXT:    6 | Test19::D RTTI
// CHECK-26-NEXT:        -- (Test19::A, 8) vtable address --
// CHECK-26-NEXT:        -- (Test19::B, 8) vtable address --
// CHECK-26-NEXT:    7 | void Test19::D::f()
// CHECK-26-NEXT:        [this adjustment: -8 non-virtual]
// CHECK-26-NEXT:    8 | void Test19::B::g()
// CHECK-26-NEXT:    9 | vcall_offset (-24)
// CHECK-26-NEXT:   10 | offset_to_top (-24)
// CHECK-26-NEXT:   11 | Test19::D RTTI
// CHECK-26-NEXT:        -- (Test19::A, 24) vtable address --
// CHECK-26-NEXT:   12 | void Test19::D::f()
// CHECK-26-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
struct D : C, B, virtual A {
  virtual void f();
};
void D::f() { }

}

namespace Test20 {

// pure virtual member functions should never have 'this' adjustments.

struct A {
  virtual void f() = 0;
  virtual void g();
};

struct B : A { };

// CHECK-27:      Vtable for 'Test20::C' (9 entries).
// CHECK-27-NEXT:    0 | offset_to_top (0)
// CHECK-27-NEXT:    1 | Test20::C RTTI
// CHECK-27-NEXT:        -- (Test20::A, 0) vtable address --
// CHECK-27-NEXT:        -- (Test20::C, 0) vtable address --
// CHECK-27-NEXT:    2 | void Test20::C::f() [pure]
// CHECK-27-NEXT:    3 | void Test20::A::g()
// CHECK-27-NEXT:    4 | void Test20::C::h()
// CHECK-27-NEXT:    5 | offset_to_top (-8)
// CHECK-27-NEXT:    6 | Test20::C RTTI
// CHECK-27-NEXT:        -- (Test20::A, 8) vtable address --
// CHECK-27-NEXT:        -- (Test20::B, 8) vtable address --
// CHECK-27-NEXT:    7 | void Test20::C::f() [pure]
// CHECK-27-NEXT:    8 | void Test20::A::g()
struct C : A, B { 
  virtual void f() = 0;
  virtual void h();
};
void C::h() { }

}

namespace Test21 {

// Test that we get vbase offsets right in secondary vtables.
struct A { 
  virtual void f();
};

struct B : virtual A { };
class C : virtual B { };
class D : virtual C { };

class E : virtual C { };

// CHECK-28:      Vtable for 'Test21::F' (16 entries).
// CHECK-28-NEXT:    0 | vbase_offset (8)
// CHECK-28-NEXT:    1 | vbase_offset (0)
// CHECK-28-NEXT:    2 | vbase_offset (0)
// CHECK-28-NEXT:    3 | vbase_offset (0)
// CHECK-28-NEXT:    4 | vbase_offset (0)
// CHECK-28-NEXT:    5 | vcall_offset (0)
// CHECK-28-NEXT:    6 | offset_to_top (0)
// CHECK-28-NEXT:    7 | Test21::F RTTI
// CHECK-28-NEXT:        -- (Test21::A, 0) vtable address --
// CHECK-28-NEXT:        -- (Test21::B, 0) vtable address --
// CHECK-28-NEXT:        -- (Test21::C, 0) vtable address --
// CHECK-28-NEXT:        -- (Test21::D, 0) vtable address --
// CHECK-28-NEXT:        -- (Test21::F, 0) vtable address --
// CHECK-28-NEXT:    8 | void Test21::F::f()
// CHECK-28-NEXT:    9 | vbase_offset (-8)
// CHECK-28-NEXT:   10 | vbase_offset (-8)
// CHECK-28-NEXT:   11 | vbase_offset (-8)
// CHECK-28-NEXT:   12 | vcall_offset (-8)
// CHECK-28-NEXT:   13 | offset_to_top (-8)
// CHECK-28-NEXT:   14 | Test21::F RTTI
// CHECK-28-NEXT:        -- (Test21::E, 8) vtable address --
// CHECK-28-NEXT:   15 | [unused] void Test21::F::f()
//
// CHECK-28:      Virtual base offset offsets for 'Test21::F' (5 entries).
// CHECK-28-NEXT:    Test21::A | -32
// CHECK-28-NEXT:    Test21::B | -40
// CHECK-28-NEXT:    Test21::C | -48
// CHECK-28-NEXT:    Test21::D | -56
// CHECK-28-NEXT:    Test21::E | -64
class F : virtual D, virtual E {
  virtual void f();
};
void F::f() { }

}

namespace Test22 {

// Very simple construction vtable test.
struct V1 {
  int v1;
}; 

struct V2 : virtual V1 {
  int v2; 
};

// CHECK-29:      Vtable for 'Test22::C' (8 entries).
// CHECK-29-NEXT:    0 | vbase_offset (16)
// CHECK-29-NEXT:    1 | vbase_offset (12)
// CHECK-29-NEXT:    2 | offset_to_top (0)
// CHECK-29-NEXT:    3 | Test22::C RTTI
// CHECK-29-NEXT:        -- (Test22::C, 0) vtable address --
// CHECK-29-NEXT:    4 | void Test22::C::f()
// CHECK-29-NEXT:    5 | vbase_offset (-4)
// CHECK-29-NEXT:    6 | offset_to_top (-16)
// CHECK-29-NEXT:    7 | Test22::C RTTI
// CHECK-29-NEXT:        -- (Test22::V2, 16) vtable address --

// CHECK-29:      Construction vtable for ('Test22::V2', 16) in 'Test22::C' (3 entries).
// CHECK-29-NEXT:    0 | vbase_offset (-4)
// CHECK-29-NEXT:    1 | offset_to_top (0)
// CHECK-29-NEXT:    2 | Test22::V2 RTTI

struct C : virtual V1, virtual V2 {
  int c; 
  virtual void f(); 
};
void C::f() { } 

}

namespace Test23 {

struct A {
  int a;
};

struct B : virtual A {
  int b;
};

struct C : A, virtual B {
  int c;
};

// CHECK-30:      Vtable for 'Test23::D' (7 entries).
// CHECK-30-NEXT:    0 | vbase_offset (20)
// CHECK-30-NEXT:    1 | vbase_offset (24)
// CHECK-30-NEXT:    2 | offset_to_top (0)
// CHECK-30-NEXT:    3 | Test23::D RTTI
// CHECK-30-NEXT:        -- (Test23::C, 0) vtable address --
// CHECK-30-NEXT:        -- (Test23::D, 0) vtable address --
// CHECK-30-NEXT:    4 | vbase_offset (-4)
// CHECK-30-NEXT:    5 | offset_to_top (-24)
// CHECK-30-NEXT:    6 | Test23::D RTTI
// CHECK-30-NEXT:        -- (Test23::B, 24) vtable address --

// CHECK-30:      Construction vtable for ('Test23::C', 0) in 'Test23::D' (7 entries).
// CHECK-30-NEXT:    0 | vbase_offset (20)
// CHECK-30-NEXT:    1 | vbase_offset (24)
// CHECK-30-NEXT:    2 | offset_to_top (0)
// CHECK-30-NEXT:    3 | Test23::C RTTI
// CHECK-30-NEXT:        -- (Test23::C, 0) vtable address --
// CHECK-30-NEXT:    4 | vbase_offset (-4)
// CHECK-30-NEXT:    5 | offset_to_top (-24)
// CHECK-30-NEXT:    6 | Test23::C RTTI
// CHECK-30-NEXT:        -- (Test23::B, 24) vtable address --

// CHECK-30:      Construction vtable for ('Test23::B', 24) in 'Test23::D' (3 entries).
// CHECK-30-NEXT:    0 | vbase_offset (-4)
// CHECK-30-NEXT:    1 | offset_to_top (0)
// CHECK-30-NEXT:    2 | Test23::B RTTI
// CHECK-30-NEXT:        -- (Test23::B, 24) vtable address --

struct D : virtual A, virtual B, C {
  int d;

  void f();
};
void D::f() { } 
  D d;
}

namespace Test24 {

// Another construction vtable test.

struct A {
  virtual void f();
};

struct B : virtual A { };
struct C : virtual A { };

// CHECK-31:      Vtable for 'Test24::D' (10 entries).
// CHECK-31-NEXT:    0 | vbase_offset (0)
// CHECK-31-NEXT:    1 | vcall_offset (0)
// CHECK-31-NEXT:    2 | offset_to_top (0)
// CHECK-31-NEXT:    3 | Test24::D RTTI
// CHECK-31-NEXT:        -- (Test24::A, 0) vtable address --
// CHECK-31-NEXT:        -- (Test24::B, 0) vtable address --
// CHECK-31-NEXT:        -- (Test24::D, 0) vtable address --
// CHECK-31-NEXT:    4 | void Test24::D::f()
// CHECK-31-NEXT:    5 | vbase_offset (-8)
// CHECK-31-NEXT:    6 | vcall_offset (-8)
// CHECK-31-NEXT:    7 | offset_to_top (-8)
// CHECK-31-NEXT:    8 | Test24::D RTTI
// CHECK-31-NEXT:        -- (Test24::C, 8) vtable address --
// CHECK-31-NEXT:    9 | [unused] void Test24::D::f()

// CHECK-31:      Construction vtable for ('Test24::B', 0) in 'Test24::D' (5 entries).
// CHECK-31-NEXT:    0 | vbase_offset (0)
// CHECK-31-NEXT:    1 | vcall_offset (0)
// CHECK-31-NEXT:    2 | offset_to_top (0)
// CHECK-31-NEXT:    3 | Test24::B RTTI
// CHECK-31-NEXT:        -- (Test24::A, 0) vtable address --
// CHECK-31-NEXT:        -- (Test24::B, 0) vtable address --
// CHECK-31-NEXT:    4 | void Test24::A::f()

// CHECK-31:      Construction vtable for ('Test24::C', 8) in 'Test24::D' (9 entries).
// CHECK-31-NEXT:    0 | vbase_offset (-8)
// CHECK-31-NEXT:    1 | vcall_offset (-8)
// CHECK-31-NEXT:    2 | offset_to_top (0)
// CHECK-31-NEXT:    3 | Test24::C RTTI
// CHECK-31-NEXT:        -- (Test24::C, 8) vtable address --
// CHECK-31-NEXT:    4 | [unused] void Test24::A::f()
// CHECK-31-NEXT:    5 | vcall_offset (0)
// CHECK-31-NEXT:    6 | offset_to_top (8)
// CHECK-31-NEXT:    7 | Test24::C RTTI
// CHECK-31-NEXT:        -- (Test24::A, 0) vtable address --
// CHECK-31-NEXT:    8 | void Test24::A::f()
struct D : B, C {
  virtual void f();
};
void D::f() { }

}

namespace Test25 {
  
// This mainly tests that we don't assert on this class hierarchy.

struct V {
  virtual void f();
};

struct A : virtual V { };
struct B : virtual V { };

// CHECK-32:      Vtable for 'Test25::C' (11 entries).
// CHECK-32-NEXT:    0 | vbase_offset (0)
// CHECK-32-NEXT:    1 | vcall_offset (0)
// CHECK-32-NEXT:    2 | offset_to_top (0)
// CHECK-32-NEXT:    3 | Test25::C RTTI
// CHECK-32-NEXT:        -- (Test25::A, 0) vtable address --
// CHECK-32-NEXT:        -- (Test25::C, 0) vtable address --
// CHECK-32-NEXT:        -- (Test25::V, 0) vtable address --
// CHECK-32-NEXT:    4 | void Test25::V::f()
// CHECK-32-NEXT:    5 | void Test25::C::g()
// CHECK-32-NEXT:    6 | vbase_offset (-8)
// CHECK-32-NEXT:    7 | vcall_offset (-8)
// CHECK-32-NEXT:    8 | offset_to_top (-8)
// CHECK-32-NEXT:    9 | Test25::C RTTI
// CHECK-32-NEXT:        -- (Test25::B, 8) vtable address --
// CHECK-32-NEXT:   10 | [unused] void Test25::V::f()

// CHECK-32:      Construction vtable for ('Test25::A', 0) in 'Test25::C' (5 entries).
// CHECK-32-NEXT:    0 | vbase_offset (0)
// CHECK-32-NEXT:    1 | vcall_offset (0)
// CHECK-32-NEXT:    2 | offset_to_top (0)
// CHECK-32-NEXT:    3 | Test25::A RTTI
// CHECK-32-NEXT:        -- (Test25::A, 0) vtable address --
// CHECK-32-NEXT:        -- (Test25::V, 0) vtable address --
// CHECK-32-NEXT:    4 | void Test25::V::f()

// CHECK-32:      Construction vtable for ('Test25::B', 8) in 'Test25::C' (9 entries).
// CHECK-32-NEXT:    0 | vbase_offset (-8)
// CHECK-32-NEXT:    1 | vcall_offset (-8)
// CHECK-32-NEXT:    2 | offset_to_top (0)
// CHECK-32-NEXT:    3 | Test25::B RTTI
// CHECK-32-NEXT:        -- (Test25::B, 8) vtable address --
// CHECK-32-NEXT:    4 | [unused] void Test25::V::f()
// CHECK-32-NEXT:    5 | vcall_offset (0)
// CHECK-32-NEXT:    6 | offset_to_top (8)
// CHECK-32-NEXT:    7 | Test25::B RTTI
// CHECK-32-NEXT:        -- (Test25::V, 0) vtable address --
// CHECK-32-NEXT:    8 | void Test25::V::f()
struct C : A, virtual V, B {
  virtual void g();
};
void C::g() { }

}

namespace Test26 {

// Test that we generate the right number of entries in the C-in-D construction vtable, and that
// we don't mark A::a as unused.

struct A {
  virtual void a();
};

struct B {
  virtual void c();
};

struct C : virtual A {
  virtual void b();
};

// CHECK-33:      Vtable for 'Test26::D' (15 entries).
// CHECK-33-NEXT:    0 | vbase_offset (8)
// CHECK-33-NEXT:    1 | vbase_offset (8)
// CHECK-33-NEXT:    2 | vbase_offset (0)
// CHECK-33-NEXT:    3 | vcall_offset (0)
// CHECK-33-NEXT:    4 | offset_to_top (0)
// CHECK-33-NEXT:    5 | Test26::D RTTI
// CHECK-33-NEXT:        -- (Test26::B, 0) vtable address --
// CHECK-33-NEXT:        -- (Test26::D, 0) vtable address --
// CHECK-33-NEXT:    6 | void Test26::B::c()
// CHECK-33-NEXT:    7 | void Test26::D::d()
// CHECK-33-NEXT:    8 | vcall_offset (0)
// CHECK-33-NEXT:    9 | vbase_offset (0)
// CHECK-33-NEXT:   10 | vcall_offset (0)
// CHECK-33-NEXT:   11 | offset_to_top (-8)
// CHECK-33-NEXT:   12 | Test26::D RTTI
// CHECK-33-NEXT:        -- (Test26::A, 8) vtable address --
// CHECK-33-NEXT:        -- (Test26::C, 8) vtable address --
// CHECK-33-NEXT:   13 | void Test26::A::a()
// CHECK-33-NEXT:   14 | void Test26::C::b()

// CHECK-33:      Construction vtable for ('Test26::C', 8) in 'Test26::D' (7 entries).
// CHECK-33-NEXT:    0 | vcall_offset (0)
// CHECK-33-NEXT:    1 | vbase_offset (0)
// CHECK-33-NEXT:    2 | vcall_offset (0)
// CHECK-33-NEXT:    3 | offset_to_top (0)
// CHECK-33-NEXT:    4 | Test26::C RTTI
// CHECK-33-NEXT:        -- (Test26::A, 8) vtable address --
// CHECK-33-NEXT:        -- (Test26::C, 8) vtable address --
// CHECK-33-NEXT:    5 | void Test26::A::a()
// CHECK-33-NEXT:    6 | void Test26::C::b()
class D : virtual B, virtual C {
  virtual void d();
};
void D::d() { } 

}

namespace Test27 {

// Test that we don't generate a secondary vtable for C in the D-in-E vtable, since
// C doesn't have any virtual bases.

struct A {
  virtual void a();
};

struct B {
  virtual void b();
};

struct C {
  virtual void c();
};

struct D : A, virtual B, C {
  virtual void d();
};

// CHECK-34:      Vtable for 'Test27::E' (13 entries).
// CHECK-34-NEXT:    0 | vbase_offset (16)
// CHECK-34-NEXT:    1 | offset_to_top (0)
// CHECK-34-NEXT:    2 | Test27::E RTTI
// CHECK-34-NEXT:        -- (Test27::A, 0) vtable address --
// CHECK-34-NEXT:        -- (Test27::D, 0) vtable address --
// CHECK-34-NEXT:        -- (Test27::E, 0) vtable address --
// CHECK-34-NEXT:    3 | void Test27::A::a()
// CHECK-34-NEXT:    4 | void Test27::D::d()
// CHECK-34-NEXT:    5 | void Test27::E::e()
// CHECK-34-NEXT:    6 | offset_to_top (-8)
// CHECK-34-NEXT:    7 | Test27::E RTTI
// CHECK-34-NEXT:        -- (Test27::C, 8) vtable address --
// CHECK-34-NEXT:    8 | void Test27::C::c()
// CHECK-34-NEXT:    9 | vcall_offset (0)
// CHECK-34-NEXT:   10 | offset_to_top (-16)
// CHECK-34-NEXT:   11 | Test27::E RTTI
// CHECK-34-NEXT:        -- (Test27::B, 16) vtable address --
// CHECK-34-NEXT:   12 | void Test27::B::b()

// CHECK-34:      Construction vtable for ('Test27::D', 0) in 'Test27::E' (9 entries).
// CHECK-34-NEXT:    0 | vbase_offset (16)
// CHECK-34-NEXT:    1 | offset_to_top (0)
// CHECK-34-NEXT:    2 | Test27::D RTTI
// CHECK-34-NEXT:        -- (Test27::A, 0) vtable address --
// CHECK-34-NEXT:        -- (Test27::D, 0) vtable address --
// CHECK-34-NEXT:    3 | void Test27::A::a()
// CHECK-34-NEXT:    4 | void Test27::D::d()
// CHECK-34-NEXT:    5 | vcall_offset (0)
// CHECK-34-NEXT:    6 | offset_to_top (-16)
// CHECK-34-NEXT:    7 | Test27::D RTTI
// CHECK-34-NEXT:        -- (Test27::B, 16) vtable address --
// CHECK-34-NEXT:    8 | void Test27::B::b()
struct E : D {
  virtual void e();
};
void E::e() { }

}

namespace Test28 {

// Check that we do include the vtable for B in the D-in-E construction vtable, since
// B is a base class of a virtual base (C).

struct A {
  virtual void a();
};

struct B {
  virtual void b();
};

struct C : A, B {
  virtual void c();
};

struct D : virtual C {
};

// CHECK-35:      Vtable for 'Test28::E' (14 entries).
// CHECK-35-NEXT:    0 | vbase_offset (8)
// CHECK-35-NEXT:    1 | offset_to_top (0)
// CHECK-35-NEXT:    2 | Test28::E RTTI
// CHECK-35-NEXT:        -- (Test28::D, 0) vtable address --
// CHECK-35-NEXT:        -- (Test28::E, 0) vtable address --
// CHECK-35-NEXT:    3 | void Test28::E::e()
// CHECK-35-NEXT:    4 | vcall_offset (8)
// CHECK-35-NEXT:    5 | vcall_offset (0)
// CHECK-35-NEXT:    6 | vcall_offset (0)
// CHECK-35-NEXT:    7 | offset_to_top (-8)
// CHECK-35-NEXT:    8 | Test28::E RTTI
// CHECK-35-NEXT:        -- (Test28::A, 8) vtable address --
// CHECK-35-NEXT:        -- (Test28::C, 8) vtable address --
// CHECK-35-NEXT:    9 | void Test28::A::a()
// CHECK-35-NEXT:   10 | void Test28::C::c()
// CHECK-35-NEXT:   11 | offset_to_top (-16)
// CHECK-35-NEXT:   12 | Test28::E RTTI
// CHECK-35-NEXT:        -- (Test28::B, 16) vtable address --
// CHECK-35-NEXT:   13 | void Test28::B::b()

// CHECK-35:      Construction vtable for ('Test28::D', 0) in 'Test28::E' (13 entries).
// CHECK-35-NEXT:    0 | vbase_offset (8)
// CHECK-35-NEXT:    1 | offset_to_top (0)
// CHECK-35-NEXT:    2 | Test28::D RTTI
// CHECK-35-NEXT:        -- (Test28::D, 0) vtable address --
// CHECK-35-NEXT:    3 | vcall_offset (8)
// CHECK-35-NEXT:    4 | vcall_offset (0)
// CHECK-35-NEXT:    5 | vcall_offset (0)
// CHECK-35-NEXT:    6 | offset_to_top (-8)
// CHECK-35-NEXT:    7 | Test28::D RTTI
// CHECK-35-NEXT:        -- (Test28::A, 8) vtable address --
// CHECK-35-NEXT:        -- (Test28::C, 8) vtable address --
// CHECK-35-NEXT:    8 | void Test28::A::a()
// CHECK-35-NEXT:    9 | void Test28::C::c()
// CHECK-35-NEXT:   10 | offset_to_top (-16)
// CHECK-35-NEXT:   11 | Test28::D RTTI
// CHECK-35-NEXT:        -- (Test28::B, 16) vtable address --
// CHECK-35-NEXT:   12 | void Test28::B::b()
struct E : D {
  virtual void e();
};
void E::e() { }

}

namespace Test29 {

// Test that the covariant return thunk for B::f will have a virtual 'this' adjustment,
// matching gcc.

struct V1 { };
struct V2 : virtual V1 { };

struct A {
  virtual V1 *f();
};

// CHECK-36:      Vtable for 'Test29::B' (6 entries).
// CHECK-36-NEXT:    0 | vbase_offset (0)
// CHECK-36-NEXT:    1 | vcall_offset (0)
// CHECK-36-NEXT:    2 | offset_to_top (0)
// CHECK-36-NEXT:    3 | Test29::B RTTI
// CHECK-36-NEXT:        -- (Test29::A, 0) vtable address --
// CHECK-36-NEXT:        -- (Test29::B, 0) vtable address --
// CHECK-36-NEXT:    4 | Test29::V2 *Test29::B::f()
// CHECK-36-NEXT:        [return adjustment: 0 non-virtual, -24 vbase offset offset]
// CHECK-36-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
// CHECK-36-NEXT:    5 | Test29::V2 *Test29::B::f()
struct B : virtual A {
  virtual V2 *f();
};
V2 *B::f() { return 0; }

}

namespace Test30 {

// Test that we don't assert when generating a vtable for F.
struct A { };

struct B : virtual A {
 int i;
};

struct C {
 virtual void f();
};

struct D : virtual C, B { };
struct E : virtual D { };

struct F : E {
 virtual void f();
};
void F::f() { }

}

namespace Test31 {

// Test that we don't add D::f twice to the primary vtable.
struct A {
  int a;
};

struct B {
  virtual void f();
};

struct C : A, virtual B {
  virtual void f();
};

// CHECK-37:      Vtable for 'Test31::D' (11 entries).
// CHECK-37-NEXT:    0 | vbase_offset (0)
// CHECK-37-NEXT:    1 | vbase_offset (8)
// CHECK-37-NEXT:    2 | vcall_offset (0)
// CHECK-37-NEXT:    3 | offset_to_top (0)
// CHECK-37-NEXT:    4 | Test31::D RTTI
// CHECK-37-NEXT:        -- (Test31::B, 0) vtable address --
// CHECK-37-NEXT:        -- (Test31::D, 0) vtable address --
// CHECK-37-NEXT:    5 | void Test31::D::f()
// CHECK-37-NEXT:    6 | vbase_offset (-8)
// CHECK-37-NEXT:    7 | vcall_offset (-8)
// CHECK-37-NEXT:    8 | offset_to_top (-8)
// CHECK-37-NEXT:    9 | Test31::D RTTI
// CHECK-37-NEXT:        -- (Test31::C, 8) vtable address --
// CHECK-37-NEXT:   10 | void Test31::D::f()
// CHECK-37-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
struct D : virtual C {
  virtual void f();
};
void D::f() { }

}

namespace Test32 {

// Check that we correctly lay out the virtual bases of 'Test32::D'.

struct A {
  virtual void f();
};

struct B : virtual A { };
struct C : A, virtual B { };
struct D : virtual B { };

// CHECK-38:      Virtual base offset offsets for 'Test32::E' (3 entries).
// CHECK-38-NEXT:    Test32::A | -32
// CHECK-38-NEXT:    Test32::B | -24
// CHECK-38-NEXT:    Test32::D | -40
struct E : C, virtual D {
  virtual void f();
};
void E::f() { }

}

namespace Test33 {

// Test that we don't emit too many vcall offsets in 'Test32::F'.

struct A {
  virtual void a();
};

struct B {
  virtual void b();
};

struct C : virtual A, virtual B {
  virtual void c();
};

struct D : virtual C { };

struct E : A, D { 
  virtual void e();
};

// CHECK-39:      Vtable for 'Test33::F' (30 entries).
// CHECK-39-NEXT:    0 | vbase_offset (24)
// CHECK-39-NEXT:    1 | vbase_offset (16)
// CHECK-39-NEXT:    2 | vbase_offset (16)
// CHECK-39-NEXT:    3 | vbase_offset (8)
// CHECK-39-NEXT:    4 | offset_to_top (0)
// CHECK-39-NEXT:    5 | Test33::F RTTI
// CHECK-39-NEXT:        -- (Test33::A, 0) vtable address --
// CHECK-39-NEXT:        -- (Test33::F, 0) vtable address --
// CHECK-39-NEXT:    6 | void Test33::A::a()
// CHECK-39-NEXT:    7 | void Test33::F::f()
// CHECK-39-NEXT:    8 | vcall_offset (0)
// CHECK-39-NEXT:    9 | vcall_offset (0)
// CHECK-39-NEXT:   10 | vbase_offset (16)
// CHECK-39-NEXT:   11 | vbase_offset (8)
// CHECK-39-NEXT:   12 | vbase_offset (8)
// CHECK-39-NEXT:   13 | offset_to_top (-8)
// CHECK-39-NEXT:   14 | Test33::F RTTI
// CHECK-39-NEXT:        -- (Test33::A, 8) vtable address --
// CHECK-39-NEXT:        -- (Test33::E, 8) vtable address --
// CHECK-39-NEXT:   15 | void Test33::A::a()
// CHECK-39-NEXT:   16 | void Test33::E::e()
// CHECK-39-NEXT:   17 | vbase_offset (0)
// CHECK-39-NEXT:   18 | vcall_offset (0)
// CHECK-39-NEXT:   19 | vbase_offset (8)
// CHECK-39-NEXT:   20 | vbase_offset (0)
// CHECK-39-NEXT:   21 | vcall_offset (0)
// CHECK-39-NEXT:   22 | offset_to_top (-16)
// CHECK-39-NEXT:   23 | Test33::F RTTI
// CHECK-39-NEXT:        -- (Test33::A, 16) vtable address --
// CHECK-39-NEXT:        -- (Test33::C, 16) vtable address --
// CHECK-39-NEXT:        -- (Test33::D, 16) vtable address --
// CHECK-39-NEXT:   24 | void Test33::A::a()
// CHECK-39-NEXT:   25 | void Test33::C::c()
// CHECK-39-NEXT:   26 | vcall_offset (0)
// CHECK-39-NEXT:   27 | offset_to_top (-24)
// CHECK-39-NEXT:   28 | Test33::F RTTI
// CHECK-39-NEXT:        -- (Test33::B, 24) vtable address --
// CHECK-39-NEXT:   29 | void Test33::B::b()
struct F : virtual E, A {
  virtual void f();
};
void F::f() { }

}

namespace Test34 {

// Test that we lay out the construction vtable for 'Test34::E' in 'Test34::F' correctly.

struct A {
  virtual void a();
};
struct B : virtual A { };

struct C : B, A {
  virtual void c();
};

struct D : A, C { };

struct E : virtual D {
  virtual void e();
};

// CHECK-40:      Construction vtable for ('Test34::E', 0) in 'Test34::F' (22 entries).
// CHECK-40-NEXT:    0 | vbase_offset (0)
// CHECK-40-NEXT:    1 | vbase_offset (8)
// CHECK-40-NEXT:    2 | vcall_offset (0)
// CHECK-40-NEXT:    3 | offset_to_top (0)
// CHECK-40-NEXT:    4 | Test34::E RTTI
// CHECK-40-NEXT:        -- (Test34::A, 0) vtable address --
// CHECK-40-NEXT:        -- (Test34::E, 0) vtable address --
// CHECK-40-NEXT:    5 | void Test34::A::a()
// CHECK-40-NEXT:    6 | void Test34::E::e()
// CHECK-40-NEXT:    7 | vcall_offset (8)
// CHECK-40-NEXT:    8 | vcall_offset (0)
// CHECK-40-NEXT:    9 | vbase_offset (-8)
// CHECK-40-NEXT:   10 | offset_to_top (-8)
// CHECK-40-NEXT:   11 | Test34::E RTTI
// CHECK-40-NEXT:        -- (Test34::A, 8) vtable address --
// CHECK-40-NEXT:        -- (Test34::D, 8) vtable address --
// CHECK-40-NEXT:   12 | void Test34::A::a()
// CHECK-40-NEXT:   13 | vbase_offset (-16)
// CHECK-40-NEXT:   14 | vcall_offset (-16)
// CHECK-40-NEXT:   15 | offset_to_top (-16)
// CHECK-40-NEXT:   16 | Test34::E RTTI
// CHECK-40-NEXT:        -- (Test34::B, 16) vtable address --
// CHECK-40-NEXT:        -- (Test34::C, 16) vtable address --
// CHECK-40-NEXT:   17 | [unused] void Test34::A::a()
// CHECK-40-NEXT:   18 | void Test34::C::c()
// CHECK-40-NEXT:   19 | offset_to_top (-24)
// CHECK-40-NEXT:   20 | Test34::E RTTI
// CHECK-40-NEXT:        -- (Test34::A, 24) vtable address --
// CHECK-40-NEXT:   21 | void Test34::A::a()
struct F : E {
  virtual void f();
};
void F::f() { }

}

namespace Test35 {

// Test that we lay out the virtual bases of 'Test35::H' in the correct order.

struct A {
 virtual void a();

 int i;
};

struct B : virtual A {
 virtual void b();
};

struct C {
 virtual void c();
};

struct D : C, virtual B {
 virtual void d();
};

struct E : D {
 virtual void e();

 bool b;
};

struct F : virtual D { };
struct G : virtual E { };

// CHECK-41:      Vtable for 'Test35::H' (32 entries).
// CHECK-41-NEXT:    0 | vbase_offset (32)
// CHECK-41-NEXT:    1 | vbase_offset (0)
// CHECK-41-NEXT:    2 | vcall_offset (0)
// CHECK-41-NEXT:    3 | vcall_offset (0)
// CHECK-41-NEXT:    4 | vbase_offset (16)
// CHECK-41-NEXT:    5 | vbase_offset (8)
// CHECK-41-NEXT:    6 | offset_to_top (0)
// CHECK-41-NEXT:    7 | Test35::H RTTI
// CHECK-41-NEXT:        -- (Test35::C, 0) vtable address --
// CHECK-41-NEXT:        -- (Test35::D, 0) vtable address --
// CHECK-41-NEXT:        -- (Test35::F, 0) vtable address --
// CHECK-41-NEXT:        -- (Test35::H, 0) vtable address --
// CHECK-41-NEXT:    8 | void Test35::C::c()
// CHECK-41-NEXT:    9 | void Test35::D::d()
// CHECK-41-NEXT:   10 | void Test35::H::h()
// CHECK-41-NEXT:   11 | vbase_offset (0)
// CHECK-41-NEXT:   12 | vbase_offset (24)
// CHECK-41-NEXT:   13 | vcall_offset (0)
// CHECK-41-NEXT:   14 | vbase_offset (8)
// CHECK-41-NEXT:   15 | offset_to_top (-8)
// CHECK-41-NEXT:   16 | Test35::H RTTI
// CHECK-41-NEXT:        -- (Test35::B, 8) vtable address --
// CHECK-41-NEXT:        -- (Test35::G, 8) vtable address --
// CHECK-41-NEXT:   17 | void Test35::B::b()
// CHECK-41-NEXT:   18 | vcall_offset (0)
// CHECK-41-NEXT:   19 | offset_to_top (-16)
// CHECK-41-NEXT:   20 | Test35::H RTTI
// CHECK-41-NEXT:        -- (Test35::A, 16) vtable address --
// CHECK-41-NEXT:   21 | void Test35::A::a()
// CHECK-41-NEXT:   22 | vcall_offset (0)
// CHECK-41-NEXT:   23 | vcall_offset (0)
// CHECK-41-NEXT:   24 | vcall_offset (0)
// CHECK-41-NEXT:   25 | vbase_offset (-16)
// CHECK-41-NEXT:   26 | vbase_offset (-24)
// CHECK-41-NEXT:   27 | offset_to_top (-32)
// CHECK-41-NEXT:   28 | Test35::H RTTI
// CHECK-41-NEXT:        -- (Test35::C, 32) vtable address --
// CHECK-41-NEXT:        -- (Test35::D, 32) vtable address --
// CHECK-41-NEXT:        -- (Test35::E, 32) vtable address --
// CHECK-41-NEXT:   29 | void Test35::C::c()
// CHECK-41-NEXT:   30 | void Test35::D::d()
// CHECK-41-NEXT:   31 | void Test35::E::e()

// CHECK-41:      Virtual base offset offsets for 'Test35::H' (4 entries).
// CHECK-41-NEXT:    Test35::A | -32
// CHECK-41-NEXT:    Test35::B | -24
// CHECK-41-NEXT:    Test35::D | -56
// CHECK-41-NEXT:    Test35::E | -64
struct H : F, G {
 virtual void h();
};
void H::h() { }

}

namespace Test36 {

// Test that we don't mark B::f as unused in the vtable for D.

struct A {
 virtual void f();
};

struct B : virtual A { };

struct C : virtual A {
 virtual void f();
};

// CHECK-42:      Vtable for 'Test36::D' (12 entries).
// CHECK-42-NEXT:    0 | vbase_offset (8)
// CHECK-42-NEXT:    1 | vbase_offset (8)
// CHECK-42-NEXT:    2 | vcall_offset (0)
// CHECK-42-NEXT:    3 | offset_to_top (0)
// CHECK-42-NEXT:    4 | Test36::D RTTI
// CHECK-42-NEXT:        -- (Test36::C, 0) vtable address --
// CHECK-42-NEXT:        -- (Test36::D, 0) vtable address --
// CHECK-42-NEXT:    5 | void Test36::C::f()
// CHECK-42-NEXT:    6 | void Test36::D::g()
// CHECK-42-NEXT:    7 | vbase_offset (0)
// CHECK-42-NEXT:    8 | vcall_offset (-8)
// CHECK-42-NEXT:    9 | offset_to_top (-8)
// CHECK-42-NEXT:   10 | Test36::D RTTI
// CHECK-42-NEXT:        -- (Test36::A, 8) vtable address --
// CHECK-42-NEXT:        -- (Test36::B, 8) vtable address --
// CHECK-42-NEXT:   11 | void Test36::C::f()
// CHECK-42-NEXT:        [this adjustment: 0 non-virtual, -24 vcall offset offset]
struct D : virtual B, C {
 virtual void g();
};
void D::g() { }

}

namespace Test37 {

// Test that we give C::f the right vtable index. (PR9660).
struct A {
	virtual A* f() = 0; 
};

struct B : virtual A {
  virtual B* f();
};

// CHECK-43:      VTable indices for 'Test37::C' (1 entries).
// CHECK-43-NEXT:    1 | Test37::C *Test37::C::f()
struct C : B {
  virtual C* f();
};

C* C::f() { return 0; }

}

// rdar://problem/10959710
namespace Test38 {
  struct A {
    virtual void *foo();
    virtual const void *foo() const;
  };

  // CHECK-44:      Vtable for 'Test38::B' (7 entries).
  // CHECK-44-NEXT:    0 | vbase_offset (0)
  // CHECK-44-NEXT:    1 | vcall_offset (0)
  // CHECK-44-NEXT:    2 | vcall_offset (0)
  // CHECK-44-NEXT:    3 | offset_to_top (0)
  // CHECK-44-NEXT:    4 | Test38::B RTTI
  // CHECK-44-NEXT:        -- (Test38::A, 0) vtable address --
  // CHECK-44-NEXT:        -- (Test38::B, 0) vtable address --
  // CHECK-44-NEXT:    5 | void *Test38::B::foo()
  // CHECK-44-NEXT:    6 | const void *Test38::B::foo() const
  class B : virtual public A {
    void *foo();
    const void *foo() const;
  };

  void *B::foo() { return 0; }
}
