Clang Project

clang_source_code/test/CodeGenCXX/member-functions.cpp
1// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin9 -o - %s | FileCheck %s
2
3struct C {
4  void f();
5  void g(int, ...);
6};
7
8// CHECK-LABEL: define void @_ZN1C1fEv
9void C::f() {
10}
11
12// CHECK-LABEL: define void @_Z5test1v
13void 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
24struct S {
25  inline S() { }
26  inline ~S() { }
27
28  void f_inline1() { }
29  inline void f_inline2() { }
30
31  static void g() { }
32  static void f();
33
34  virtual void v() {}
35};
36
37// CHECK-LABEL: define void @_ZN1S1fEv
38void S::f() {
39}
40
41void 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
65struct T {
66  T operator+(const T&);
67};
68
69// CHECK-LABEL: define void @_Z5test3v
70void 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