1 // RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin9 -o - %s | FileCheck %s
2
3 struct C {
4 void f();
5 void g(int, ...);
6 };
7
8 // CHECK-LABEL: define void @_ZN1C1fEv
f()9 void C::f() {
10 }
11
12 // CHECK-LABEL: define void @_Z5test1v
test1()13 void test1() {
14 C c;
15
16 // CHECK: call void @_ZN1C1fEv
17 c.f();
18
19 // CHECK: call void (%struct.C*, i32, ...) @_ZN1C1gEiz
20 c.g(1, 2, 3);
21 }
22
23
24 struct S {
SS25 inline S() { }
~SS26 inline ~S() { }
27
f_inline1S28 void f_inline1() { }
f_inline2S29 inline void f_inline2() { }
30
gS31 static void g() { }
32 static void f();
33
vS34 virtual void v() {}
35 };
36
37 // CHECK-LABEL: define void @_ZN1S1fEv
f()38 void S::f() {
39 }
40
test2()41 void test2() {
42 S s;
43
44 s.f_inline1();
45 s.f_inline2();
46
47 S::g();
48 }
49
50 // S::S()
51 // CHECK: define linkonce_odr void @_ZN1SC1Ev{{.*}} unnamed_addr
52
53 // S::f_inline1()
54 // CHECK-LABEL: define linkonce_odr void @_ZN1S9f_inline1Ev
55
56 // S::f_inline2()
57 // CHECK-LABEL: define linkonce_odr void @_ZN1S9f_inline2Ev
58
59 // S::g()
60 // CHECK-LABEL: define linkonce_odr void @_ZN1S1gEv
61
62 // S::~S()
63 // CHECK: define linkonce_odr void @_ZN1SD1Ev{{.*}} unnamed_addr
64
65 struct T {
66 T operator+(const T&);
67 };
68
69 // CHECK-LABEL: define void @_Z5test3v
test3()70 void test3() {
71 T t1, t2;
72
73 // CHECK: call void @_ZN1TplERKS_
74 T result = t1 + t2;
75 }
76
77 // S::S()
78 // CHECK: define linkonce_odr void @_ZN1SC2Ev{{.*}} unnamed_addr
79
80 // S::v()
81 // CHECK: define linkonce_odr void @_ZN1S1vEv{{.*}}unnamed_addr
82
83 // S::~S()
84 // CHECK: define linkonce_odr void @_ZN1SD2Ev{{.*}} unnamed_addr
85