blob: c59eff0abf8a715d4a21f65043175fd6b7e04ed1 [file] [log] [blame]
Anders Carlsson824d7ea2010-02-11 08:02:13 +00001// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm-only -fdump-vtable-layouts 2>&1 | FileCheck %s
2namespace Test1 {
3
4// CHECK: Vtable for 'Test1::A' (3 entries).
5// CHECK-NEXT: 0 | offset_to_top (0)
6// CHECK-NEXT: 1 | Test1::A RTTI
Anders Carlsson822307b2010-02-11 17:18:51 +00007// CHECK-NEXT: -- (Test1::A, 0) vtable address --
Anders Carlsson848fa642010-02-11 18:20:28 +00008// CHECK-NEXT: 2 | void Test1::A::f()
Anders Carlsson824d7ea2010-02-11 08:02:13 +00009struct A {
10 virtual void f();
11};
12
13void A::f() { }
Anders Carlsson824d7ea2010-02-11 08:02:13 +000014}
15
Anders Carlsson848fa642010-02-11 18:20:28 +000016namespace Test2 {
17
18// This is a smoke test of the vtable dumper.
Anders Carlssonbac72712010-02-11 18:21:49 +000019// CHECK: Vtable for 'Test2::A' (9 entries).
Anders Carlsson848fa642010-02-11 18:20:28 +000020// CHECK-NEXT: 0 | offset_to_top (0)
21// CHECK-NEXT: 1 | Test2::A RTTI
22// CHECK-NEXT: -- (Test2::A, 0) vtable address --
23// CHECK-NEXT: 2 | void Test2::A::f()
24// CHECK-NEXT: 3 | void Test2::A::f() const
25// CHECK-NEXT: 4 | Test2::A *Test2::A::g(int)
26// CHECK-NEXT: 5 | Test2::A::~A() [complete]
27// CHECK-NEXT: 6 | Test2::A::~A() [deleting]
28// CHECK-NEXT: 7 | void Test2::A::h()
Anders Carlssonbac72712010-02-11 18:21:49 +000029// CHECK-NEXT: 8 | Test2::A &Test2::A::operator=(Test2::A const &)
Anders Carlsson848fa642010-02-11 18:20:28 +000030struct A {
31 virtual void f();
32 virtual void f() const;
33
34 virtual A* g(int a);
35 virtual ~A();
36 virtual void h();
Anders Carlssonbac72712010-02-11 18:21:49 +000037 virtual A& operator=(const A&);
Anders Carlsson848fa642010-02-11 18:20:28 +000038};
39
40void A::f() { }
41
42}