blob: 75b354cd0f93af00e15bc5da0e22d4e720cba2e6 [file] [log] [blame]
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +00001// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin9 -o - %s | FileCheck %s
2
Anders Carlsson2b77ba82009-04-04 20:47:02 +00003struct C {
4 void f();
Anders Carlssone9918d22009-04-08 20:31:57 +00005 void g(int, ...);
Anders Carlsson2b77ba82009-04-04 20:47:02 +00006};
7
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +00008// CHECK: define void @_ZN1C1fEv
Anders Carlsson2b77ba82009-04-04 20:47:02 +00009void C::f() {
10}
11
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000012// CHECK: define void @_Z5test1v
Chris Lattner0c337ed2009-05-12 21:02:27 +000013void test1() {
Anders Carlsson2b77ba82009-04-04 20:47:02 +000014 C c;
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000015
16 // CHECK: call void @_ZN1C1fEv
Anders Carlsson2b77ba82009-04-04 20:47:02 +000017 c.f();
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000018
19 // CHECK: call void (%struct.C*, i32, ...)* @_ZN1C1gEiz
Anders Carlssone9918d22009-04-08 20:31:57 +000020 c.g(1, 2, 3);
21}
Chris Lattner0c337ed2009-05-12 21:02:27 +000022
23
24struct S {
Chris Lattnerb4880ba2009-05-12 21:21:08 +000025 inline S() { }
Chris Lattnerb4880ba2009-05-12 21:21:08 +000026 inline ~S() { }
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000027
Chris Lattner0c337ed2009-05-12 21:02:27 +000028 void f_inline1() { }
Chris Lattner0c337ed2009-05-12 21:02:27 +000029 inline void f_inline2() { }
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000030
Chris Lattner0c337ed2009-05-12 21:02:27 +000031 static void g() { }
Anders Carlsson167b8242009-05-15 18:35:39 +000032 static void f();
Richard Smithef4d5ce2012-09-28 22:46:07 +000033
Richard Smithef4d5ce2012-09-28 22:46:07 +000034 virtual void v() {}
Chris Lattner0c337ed2009-05-12 21:02:27 +000035};
36
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000037// CHECK: define void @_ZN1S1fEv
Anders Carlsson167b8242009-05-15 18:35:39 +000038void S::f() {
39}
40
Chris Lattner0c337ed2009-05-12 21:02:27 +000041void test2() {
42 S s;
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000043
Chris Lattner0c337ed2009-05-12 21:02:27 +000044 s.f_inline1();
45 s.f_inline2();
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000046
Chris Lattner0c337ed2009-05-12 21:02:27 +000047 S::g();
Chris Lattner0c337ed2009-05-12 21:02:27 +000048}
Anders Carlsson0f294632009-05-27 04:18:27 +000049
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000050// S::S()
51// CHECK: define linkonce_odr void @_ZN1SC1Ev{{.*}} unnamed_addr
52
53// S::f_inline1()
54// CHECK: define linkonce_odr void @_ZN1S9f_inline1Ev
55
56// S::f_inline2()
57// CHECK: define linkonce_odr void @_ZN1S9f_inline2Ev
58
59// S::g()
60// CHECK: define linkonce_odr void @_ZN1S1gEv
61
62// S::~S()
63// CHECK: define linkonce_odr void @_ZN1SD1Ev{{.*}} unnamed_addr
64
Anders Carlsson0f294632009-05-27 04:18:27 +000065struct T {
66 T operator+(const T&);
67};
68
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000069// CHECK: define void @_Z5test3v
Anders Carlsson0f294632009-05-27 04:18:27 +000070void test3() {
71 T t1, t2;
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000072
73 // CHECK: call void @_ZN1TplERKS_
Anders Carlsson0f294632009-05-27 04:18:27 +000074 T result = t1 + t2;
75}
Dmitri Gribenko319d8fc2013-01-28 21:43:46 +000076
77// S::~S()
78// CHECK: define linkonce_odr void @_ZN1SD2Ev{{.*}} unnamed_addr
79
80// S::S()
81// CHECK: define linkonce_odr void @_ZN1SC2Ev{{.*}} unnamed_addr
82
83// S::v()
84// CHECK: define linkonce_odr void @_ZN1S1vEv{{.*}}unnamed_addr
85