blob: 58f709c333b4a5acd42a5eedebccfc2a91432df7 [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
David Blaikied6c88ec2015-04-16 23:25:00 +000019 // 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
Dmitri Gribenko35630ec2013-01-28 21:43:46 +000077// 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
Rafael Espindolae5df59f2015-01-22 00:24:57 +000083// S::~S()
84// CHECK: define linkonce_odr void @_ZN1SD2Ev{{.*}} unnamed_addr