temporaries.cpp revision 1faf67478c6d423880726a327c737db13b8d9f0b
1// RUN: clang-cc -emit-llvm %s -o - -triple=x86_64-apple-darwin9 | FileCheck %s
2struct A {
3  A();
4  ~A();
5  void f();
6};
7
8void f1() {
9  // CHECK: call void @_ZN1AC1Ev
10  // CHECK: call void @_ZN1AD1Ev
11  (void)A();
12
13  // CHECK: call void @_ZN1AC1Ev
14  // CHECK: call void @_ZN1AD1Ev
15  A().f();
16}
17
18// Function calls
19struct B {
20  B();
21  ~B();
22};
23
24B g();
25
26void f2() {
27  // CHECK-NOT: call void @_ZN1BC1Ev
28  // CHECK: call void @_ZN1BD1Ev
29  (void)g();
30}
31
32// Member function calls
33struct C {
34  C();
35  ~C();
36
37  C f();
38};
39
40void f3() {
41  // CHECK: call void @_ZN1CC1Ev
42  // CHECK: call void @_ZN1CD1Ev
43  // CHECK: call void @_ZN1CD1Ev
44  C().f();
45}
46
47// Function call operator
48struct D {
49  D();
50  ~D();
51
52  D operator()();
53};
54
55void f4() {
56  // CHECK: call void @_ZN1DC1Ev
57  // CHECK: call void @_ZN1DD1Ev
58  // CHECK: call void @_ZN1DD1Ev
59  D()();
60}
61
62// Overloaded operators
63struct E {
64  E();
65  ~E();
66  E operator+(const E&);
67  E operator!();
68};
69
70void f5() {
71  // CHECK: call void @_ZN1EC1Ev
72  // CHECK: call void @_ZN1EC1Ev
73  // CHECK: call void @_ZN1ED1Ev
74  // CHECK: call void @_ZN1ED1Ev
75  // CHECK: call void @_ZN1ED1Ev
76  E() + E();
77
78  // CHECK: call void @_ZN1EC1Ev
79  // CHECK: call void @_ZN1ED1Ev
80  // CHECK: call void @_ZN1ED1Ev
81  !E();
82}
83
84struct F {
85  F();
86  ~F();
87  F& f();
88};
89
90void f6() {
91  // CHECK: call void @_ZN1FC1Ev
92  // CHECK: call void @_ZN1FD1Ev
93  F().f();
94}
95
96struct 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}
118
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}
151