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