blob: 5366612001aa3a74553eb0398273bf452084b95d [file] [log] [blame]
Anders Carlssonfa4f5502009-10-18 21:11:11 +00001// RUN: clang-cc -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
Anders Carlsson7a039eb2009-08-15 22:30:50 +00002struct A {
3 A();
4 ~A();
5 void f();
6};
7
Anders Carlssonec74c592009-08-16 03:06:32 +00008void f1() {
Anders Carlssonfa4f5502009-10-18 21:11:11 +00009 // CHECK: call void @_ZN1AC1Ev
10 // CHECK: call void @_ZN1AD1Ev
Anders Carlssonec74c592009-08-16 03:06:32 +000011 (void)A();
Anders Carlssonfa4f5502009-10-18 21:11:11 +000012
13 // CHECK: call void @_ZN1AC1Ev
14 // CHECK: call void @_ZN1AD1Ev
Anders Carlsson7a039eb2009-08-15 22:30:50 +000015 A().f();
16}
Anders Carlssonec74c592009-08-16 03:06:32 +000017
Anders Carlsson6f680272009-08-16 03:42:12 +000018// Function calls
Anders Carlssonec74c592009-08-16 03:06:32 +000019struct B {
20 B();
21 ~B();
22};
23
24B g();
25
Anders Carlssonec74c592009-08-16 03:06:32 +000026void f2() {
Anders Carlssonfa4f5502009-10-18 21:11:11 +000027 // CHECK-NOT: call void @_ZN1BC1Ev
28 // CHECK: call void @_ZN1BD1Ev
Anders Carlssonec74c592009-08-16 03:06:32 +000029 (void)g();
30}
31
Anders Carlsson6f680272009-08-16 03:42:12 +000032// Member function calls
33struct C {
34 C();
35 ~C();
36
37 C f();
38};
39
Anders Carlsson6f680272009-08-16 03:42:12 +000040void f3() {
Anders Carlssonfa4f5502009-10-18 21:11:11 +000041 // CHECK: call void @_ZN1CC1Ev
42 // CHECK: call void @_ZN1CD1Ev
43 // CHECK: call void @_ZN1CD1Ev
Anders Carlsson6f680272009-08-16 03:42:12 +000044 C().f();
45}
46
Anders Carlssona303f9e2009-08-16 03:53:54 +000047// Function call operator
48struct D {
49 D();
50 ~D();
51
52 D operator()();
53};
54
Anders Carlssona303f9e2009-08-16 03:53:54 +000055void f4() {
Benjamin Kramer3114af32009-10-31 20:42:26 +000056 // CHECK: call void @_ZN1DC1Ev
57 // CHECK: call void @_ZN1DD1Ev
58 // CHECK: call void @_ZN1DD1Ev
Anders Carlssona303f9e2009-08-16 03:53:54 +000059 D()();
60}
Anders Carlsson6f680272009-08-16 03:42:12 +000061
Anders Carlsson2d46eb22009-08-16 04:11:06 +000062// Overloaded operators
63struct E {
64 E();
65 ~E();
66 E operator+(const E&);
67 E operator!();
68};
69
Anders Carlsson2d46eb22009-08-16 04:11:06 +000070void f5() {
Anders Carlssonfa4f5502009-10-18 21:11:11 +000071 // CHECK: call void @_ZN1EC1Ev
72 // CHECK: call void @_ZN1EC1Ev
73 // CHECK: call void @_ZN1ED1Ev
74 // CHECK: call void @_ZN1ED1Ev
75 // CHECK: call void @_ZN1ED1Ev
Anders Carlsson2d46eb22009-08-16 04:11:06 +000076 E() + E();
Anders Carlssonfa4f5502009-10-18 21:11:11 +000077
78 // CHECK: call void @_ZN1EC1Ev
79 // CHECK: call void @_ZN1ED1Ev
80 // CHECK: call void @_ZN1ED1Ev
Anders Carlsson2d46eb22009-08-16 04:11:06 +000081 !E();
82}
Anders Carlsson6f680272009-08-16 03:42:12 +000083
Anders Carlsson283e4d52009-09-14 01:30:44 +000084struct F {
85 F();
86 ~F();
87 F& f();
88};
89
Anders Carlsson283e4d52009-09-14 01:30:44 +000090void f6() {
Anders Carlssonfa4f5502009-10-18 21:11:11 +000091 // CHECK: call void @_ZN1FC1Ev
92 // CHECK: call void @_ZN1FD1Ev
Anders Carlsson283e4d52009-09-14 01:30:44 +000093 F().f();
94}
95
Anders Carlsson4fa26842009-10-18 21:20:14 +000096struct G {
97 G();
98 G(A);
99 ~G();
100 operator A();
101};
102
103void a(const A&);
104
105void f7() {
106 // CHECK: call void @_ZN1AC1Ev
107 // CHECK: call void @_Z1aRK1A
108 // CHECK: call void @_ZN1AD1Ev
109 a(A());
110
111 // CHECK: call void @_ZN1GC1Ev
112 // CHECK: call void @_ZN1Gcv1AEv
113 // CHECK: call void @_Z1aRK1A
114 // CHECK: call void @_ZN1AD1Ev
115 // CHECK: call void @_ZN1GD1Ev
116 a(G());
117}
Anders Carlsson1faf6742009-11-06 04:11:09 +0000118
119namespace PR5077 {
120
121struct A {
122 A();
123 ~A();
124 int f();
125};
126
127void f();
128int g(const A&);
129
130struct B {
131 int a1;
132 int a2;
133 B();
134};
135
136B::B()
137 // CHECK: call void @_ZN6PR50771AC1Ev
138 // CHECK: call i32 @_ZN6PR50771A1fEv
139 // CHECK: call void @_ZN6PR50771AD1Ev
140 : a1(A().f())
141 // CHECK: call void @_ZN6PR50771AC1Ev
142 // CHECK: call i32 @_ZN6PR50771gERKNS_1AE
143 // CHECK: call void @_ZN6PR50771AD1Ev
144 , a2(g(A()))
145{
146 // CHECK: call void @_ZN6PR50771fEv
147 f();
148}
149
150}