vtable-layout-abi-examples.cpp revision eb577d0df44df4df974e9b3a538575d92358a3b3
1// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm-only -fdump-vtable-layouts 2>&1 | FileCheck %s 2 3/// Examples from the Itanium C++ ABI specification. 4/// http://www.codesourcery.com/public/cxx-abi/ 5 6namespace Test1 { 7 8// This is from http://www.codesourcery.com/public/cxx-abi/cxx-vtable-ex.html 9 10// CHECK: Vtable for 'Test1::A' (5 entries). 11// CHECK-NEXT: 0 | offset_to_top (0) 12// CHECK-NEXT: 1 | Test1::A RTTI 13// CHECK-NEXT: -- (Test1::A, 0) vtable address -- 14// CHECK-NEXT: 2 | void Test1::A::f() 15// CHECK-NEXT: 3 | void Test1::A::g() 16// CHECK-NEXT: 4 | void Test1::A::h() 17struct A { 18 virtual void f (); 19 virtual void g (); 20 virtual void h (); 21 int ia; 22}; 23void A::f() {} 24 25// CHECK: Vtable for 'Test1::B' (13 entries). 26// CHECK-NEXT: 0 | vbase_offset (16) 27// CHECK-NEXT: 1 | offset_to_top (0) 28// CHECK-NEXT: 2 | Test1::B RTTI 29// CHECK-NEXT: -- (Test1::B, 0) vtable address -- 30// CHECK-NEXT: 3 | void Test1::B::f() 31// CHECK-NEXT: 4 | void Test1::B::h() 32// CHECK-NEXT: 5 | vcall_offset (-16) 33// CHECK-NEXT: 6 | vcall_offset (0) 34// CHECK-NEXT: 7 | vcall_offset (-16) 35// CHECK-NEXT: 8 | offset_to_top (-16) 36// CHECK-NEXT: 9 | Test1::B RTTI 37// CHECK-NEXT: -- (Test1::A, 16) vtable address -- 38// CHECK-NEXT: 10 | void Test1::B::f() 39// CHECK-NEXT: [this adjustment: 0 non-virtual, -24 vcall offset offset] 40// CHECK-NEXT: 11 | void Test1::A::g() 41// CHECK-NEXT: 12 | void Test1::B::h() 42// CHECK-NEXT: [this adjustment: 0 non-virtual, -40 vcall offset offset] 43struct B: public virtual A { 44 void f (); 45 void h (); 46 int ib; 47}; 48void B::f() {} 49 50} 51