1*67e74705SXin Li // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2*67e74705SXin Li
3*67e74705SXin Li struct Field {
4*67e74705SXin Li Field();
5*67e74705SXin Li ~Field();
6*67e74705SXin Li };
7*67e74705SXin Li
8*67e74705SXin Li struct Base {
9*67e74705SXin Li Base();
10*67e74705SXin Li ~Base();
11*67e74705SXin Li };
12*67e74705SXin Li
13*67e74705SXin Li struct A : Base {
14*67e74705SXin Li A();
15*67e74705SXin Li ~A();
16*67e74705SXin Li
17*67e74705SXin Li virtual void f();
18*67e74705SXin Li
19*67e74705SXin Li Field field;
20*67e74705SXin Li };
21*67e74705SXin Li
22*67e74705SXin Li // CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* %this) unnamed_addr
23*67e74705SXin Li // CHECK: call void @_ZN4BaseC2Ev(
24*67e74705SXin Li // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1A, i32 0, i32 2) to i32 (...)**)
25*67e74705SXin Li // CHECK: call void @_ZN5FieldC1Ev(
26*67e74705SXin Li // CHECK: ret void
A()27*67e74705SXin Li A::A() { }
28*67e74705SXin Li
29*67e74705SXin Li // CHECK-LABEL: define void @_ZN1AD2Ev(%struct.A* %this) unnamed_addr
30*67e74705SXin Li // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1A, i32 0, i32 2) to i32 (...)**)
31*67e74705SXin Li // CHECK: call void @_ZN5FieldD1Ev(
32*67e74705SXin Li // CHECK: call void @_ZN4BaseD2Ev(
33*67e74705SXin Li // CHECK: ret void
~A()34*67e74705SXin Li A::~A() { }
35*67e74705SXin Li
36*67e74705SXin Li struct B : Base {
37*67e74705SXin Li virtual void f();
38*67e74705SXin Li
39*67e74705SXin Li Field field;
40*67e74705SXin Li };
41*67e74705SXin Li
f()42*67e74705SXin Li void f() { B b; }
43*67e74705SXin Li
44*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @_ZN1BC1Ev(%struct.B* %this) unnamed_addr
45*67e74705SXin Li // CHECK: call void @_ZN1BC2Ev(
46*67e74705SXin Li
47*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @_ZN1BD1Ev(%struct.B* %this) unnamed_addr
48*67e74705SXin Li // CHECK: call void @_ZN1BD2Ev(
49*67e74705SXin Li
50*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @_ZN1BC2Ev(%struct.B* %this) unnamed_addr
51*67e74705SXin Li // CHECK: call void @_ZN4BaseC2Ev(
52*67e74705SXin Li // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1B, i32 0, i32 2) to i32 (...)**)
53*67e74705SXin Li // CHECK: call void @_ZN5FieldC1Ev
54*67e74705SXin Li // CHECK: ret void
55*67e74705SXin Li
56*67e74705SXin Li // CHECK-LABEL: define linkonce_odr void @_ZN1BD2Ev(%struct.B* %this) unnamed_addr
57*67e74705SXin Li // CHECK: store i32 (...)** bitcast (i8** getelementptr inbounds ([3 x i8*], [3 x i8*]* @_ZTV1B, i32 0, i32 2) to i32 (...)**)
58*67e74705SXin Li // CHECK: call void @_ZN5FieldD1Ev(
59*67e74705SXin Li // CHECK: call void @_ZN4BaseD2Ev(
60*67e74705SXin Li // CHECK: ret void
61