temporaries.cpp revision 03d8ed439f55b692634f9c71721ecfabbe347c4d
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 ~B(); 135}; 136 137B::B() 138 // CHECK: call void @_ZN6PR50771AC1Ev 139 // CHECK: call i32 @_ZN6PR50771A1fEv 140 // CHECK: call void @_ZN6PR50771AD1Ev 141 : a1(A().f()) 142 // CHECK: call void @_ZN6PR50771AC1Ev 143 // CHECK: call i32 @_ZN6PR50771gERKNS_1AE 144 // CHECK: call void @_ZN6PR50771AD1Ev 145 , a2(g(A())) 146{ 147 // CHECK: call void @_ZN6PR50771fEv 148 f(); 149} 150 151struct C { 152 C(); 153 154 const B& b; 155}; 156 157C::C() 158 // CHECK: call void @_ZN6PR50771BC1Ev 159 : b(B()) { 160 // CHECK: call void @_ZN6PR50771fEv 161 f(); 162 163 // CHECK: call void @_ZN6PR50771BD1Ev 164} 165} 166 167A f8() { 168 // CHECK: call void @_ZN1AC1Ev 169 // CHECK-NOT: call void @_ZN1AD1Ev 170 return A(); 171 // CHECK: ret void 172} 173 174struct H { 175 H(); 176 ~H(); 177 H(const H&); 178}; 179 180void f9(H h) { 181 // CHECK: call void @_ZN1HC1Ev 182 // CHECK: call void @_Z2f91H 183 // CHECK: call void @_ZN1HD1Ev 184 f9(H()); 185 186 // CHECK: call void @_ZN1HC1ERKS_ 187 // CHECK: call void @_Z2f91H 188 // CHECK: call void @_ZN1HD1Ev 189 f9(h); 190} 191