blob: 1773c67fc8636661b0da04c3bed37f41f8259919 [file] [log] [blame]
Dmitri Gribenko35630ec2013-01-28 21:43:46 +00001// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin9 -o - %s | FileCheck %s
2
Anders Carlsson468fa632009-04-04 20:47:02 +00003struct C {
4 void f();
Anders Carlsson03a409f2009-04-08 20:31:57 +00005 void g(int, ...);
Anders Carlsson468fa632009-04-04 20:47:02 +00006};
7
Stephen Lin43622612013-08-15 06:47:53 +00008// CHECK-LABEL: define void @_ZN1C1fEv
Anders Carlsson468fa632009-04-04 20:47:02 +00009void C::f() {
10}
11
Stephen Lin43622612013-08-15 06:47:53 +000012// CHECK-LABEL: define void @_Z5test1v
Chris Lattnerd035ebd2009-05-12 21:02:27 +000013void test1() {
Anders Carlsson468fa632009-04-04 20:47:02 +000014 C c;
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000015
16 // CHECK: call void @_ZN1C1fEv
Anders Carlsson468fa632009-04-04 20:47:02 +000017 c.f();
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000018
19 // CHECK: call void (%struct.C*, i32, ...)* @_ZN1C1gEiz
Anders Carlsson03a409f2009-04-08 20:31:57 +000020 c.g(1, 2, 3);
21}
Chris Lattnerd035ebd2009-05-12 21:02:27 +000022
23
24struct S {
Chris Lattnere0be0df2009-05-12 21:21:08 +000025 inline S() { }
Chris Lattnere0be0df2009-05-12 21:21:08 +000026 inline ~S() { }
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000027
Chris Lattnerd035ebd2009-05-12 21:02:27 +000028 void f_inline1() { }
Chris Lattnerd035ebd2009-05-12 21:02:27 +000029 inline void f_inline2() { }
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000030
Chris Lattnerd035ebd2009-05-12 21:02:27 +000031 static void g() { }
Anders Carlsson37604a02009-05-15 18:35:39 +000032 static void f();
Richard Smithb555a762012-09-28 22:46:07 +000033
Richard Smithb555a762012-09-28 22:46:07 +000034 virtual void v() {}
Chris Lattnerd035ebd2009-05-12 21:02:27 +000035};
36
Stephen Lin43622612013-08-15 06:47:53 +000037// CHECK-LABEL: define void @_ZN1S1fEv
Anders Carlsson37604a02009-05-15 18:35:39 +000038void S::f() {
39}
40
Chris Lattnerd035ebd2009-05-12 21:02:27 +000041void test2() {
42 S s;
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000043
Chris Lattnerd035ebd2009-05-12 21:02:27 +000044 s.f_inline1();
45 s.f_inline2();
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000046
Chris Lattnerd035ebd2009-05-12 21:02:27 +000047 S::g();
Chris Lattnerd035ebd2009-05-12 21:02:27 +000048}
Anders Carlsson4034a952009-05-27 04:18:27 +000049
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000050// S::S()
51// CHECK: define linkonce_odr void @_ZN1SC1Ev{{.*}} unnamed_addr
52
53// S::f_inline1()
Stephen Lin43622612013-08-15 06:47:53 +000054// CHECK-LABEL: define linkonce_odr void @_ZN1S9f_inline1Ev
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000055
56// S::f_inline2()
Stephen Lin43622612013-08-15 06:47:53 +000057// CHECK-LABEL: define linkonce_odr void @_ZN1S9f_inline2Ev
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000058
59// S::g()
Stephen Lin43622612013-08-15 06:47:53 +000060// CHECK-LABEL: define linkonce_odr void @_ZN1S1gEv
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000061
62// S::~S()
63// CHECK: define linkonce_odr void @_ZN1SD1Ev{{.*}} unnamed_addr
64
Anders Carlsson4034a952009-05-27 04:18:27 +000065struct T {
66 T operator+(const T&);
67};
68
Stephen Lin43622612013-08-15 06:47:53 +000069// CHECK-LABEL: define void @_Z5test3v
Anders Carlsson4034a952009-05-27 04:18:27 +000070void test3() {
71 T t1, t2;
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000072
73 // CHECK: call void @_ZN1TplERKS_
Anders Carlsson4034a952009-05-27 04:18:27 +000074 T result = t1 + t2;
75}
Dmitri Gribenko35630ec2013-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