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