1 // RUN: %clang_cc1 -gline-tables-only -std=c++11 -fexceptions -fcxx-exceptions -S -emit-llvm %s -o - | FileCheck %s 2 // RUN: %clang_cc1 -gline-tables-only -std=c++11 -fexceptions -fcxx-exceptions -S -emit-llvm %s -o - -triple i686-linux-gnu | FileCheck %s 3 4 // XFAIL: win32 5 6 int &src(); 7 int *sink(); 8 extern "C" __complex float complex_src(); 9 extern "C" __complex float *complex_sink(); 10 11 // CHECK-LABEL: define 12 void f1() { 13 #line 100 14 * // The store for the assignment should be attributed to the start of the 15 // assignment expression here, regardless of the location of subexpressions. 16 sink() = src(); 17 // CHECK: store {{.*}}, !dbg [[DBG_F1:!.*]] 18 } 19 20 struct foo { 21 int i; 22 int &j; 23 __complex float k; 24 foo(); 25 }; 26 27 // CHECK-LABEL: define 28 foo::foo() 29 : 30 #line 200 31 i // CHECK: store i32 {{.*}} !dbg [[DBG_FOO_VALUE:!.*]] 32 (src()), 33 j // CHECK: store i32* {{.*}} !dbg [[DBG_FOO_REF:!.*]] 34 (src()), 35 k // CHECK: store float {{.*}} !dbg [[DBG_FOO_COMPLEX:!.*]] 36 (complex_src()) { 37 } 38 39 // CHECK-LABEL: define {{.*}}f2{{.*}} 40 void f2() { 41 #line 300 42 * // CHECK: store float {{.*}} !dbg [[DBG_F2:!.*]] 43 complex_sink() = complex_src(); 44 } 45 46 // CHECK-LABEL: define 47 void f3() { 48 #line 400 49 * // CHECK: store float {{.*}} !dbg [[DBG_F3:!.*]] 50 complex_sink() += complex_src(); 51 } 52 53 // CHECK-LABEL: define 54 void f4() { 55 #line 500 56 auto x // CHECK: store {{.*}} !dbg [[DBG_F4:!.*]] 57 = src(); 58 } 59 60 // CHECK-LABEL: define 61 void f5() { 62 #line 600 63 auto x // CHECK: store float {{.*}} !dbg [[DBG_F5:!.*]] 64 = complex_src(); 65 } 66 67 struct agg { int i; }; 68 agg agg_src(); 69 70 // CHECK-LABEL: define 71 void f6() { 72 agg x; 73 #line 700 74 x // CHECK: call void @llvm.memcpy{{.*}} !dbg [[DBG_F6:!.*]] 75 = agg_src(); 76 } 77 78 // CHECK-LABEL: define 79 void f7() { 80 int *src1(); 81 int src2(); 82 #line 800 83 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F7:!.*]] 84 src1())[src2()]; 85 } 86 87 // CHECK-LABEL: define 88 void f8() { 89 int src1[1]; 90 int src2(); 91 #line 900 92 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F8:!.*]] 93 src1)[src2()]; 94 } 95 96 // CHECK-LABEL: define 97 void f9(int i) { 98 int src1[1][i]; 99 int src2(); 100 #line 1000 101 auto x = ( // CHECK: getelementptr {{.*}} !dbg [[DBG_F9:!.*]] 102 src1)[src2()]; 103 } 104 105 inline void *operator new(decltype(sizeof(1)), void *p) noexcept { return p; } 106 107 // CHECK-LABEL: define 108 void f10() { 109 void *void_src(); 110 ( // CHECK: icmp {{.*}} !dbg [[DBG_F10_ICMP:.*]] 111 // CHECK: store {{.*}} !dbg [[DBG_F10_STORE:!.*]] 112 #line 1100 113 new (void_src()) int(src())); 114 } 115 116 // noexcept just to simplify the codegen a bit 117 void fn() noexcept(true); 118 119 struct bar { 120 bar(); 121 // noexcept(false) to convolute the global dtor 122 ~bar() noexcept(false); 123 }; 124 // global ctor cleanup 125 // CHECK-LABEL: define 126 // CHECK: invoke{{ }} 127 // CHECK: invoke{{ }} 128 // CHECK: to label {{.*}}, !dbg [[DBG_GLBL_CTOR_B:!.*]] 129 130 // terminate caller 131 // CHECK-LABEL: define 132 133 // global dtor cleanup 134 // CHECK-LABEL: define 135 // CHECK: invoke{{ }} 136 // CHECK: invoke{{ }} 137 // CHECK: to label {{.*}}, !dbg [[DBG_GLBL_DTOR_B:!.*]] 138 #line 1500 139 bar b[1] = { // 140 (fn(), // 141 bar())}; 142 143 // CHECK-LABEL: define 144 __complex double f11() { 145 __complex double f; 146 // CHECK: store {{.*}} !dbg [[DBG_F11:!.*]] 147 #line 1200 148 return f; 149 } 150 151 // CHECK-LABEL: define 152 void f12() { 153 int f12_1(); 154 void f12_2(int = f12_1()); 155 // CHECK: call {{(signext )?}}i32 {{.*}} !dbg [[DBG_F12:!.*]] 156 #line 1300 157 f12_2(); 158 } 159 160 // CHECK-LABEL: define 161 void f13() { 162 // CHECK: call {{.*}} !dbg [[DBG_F13:!.*]] 163 #define F13_IMPL 1, src() 164 1, 165 #line 1400 166 F13_IMPL; 167 } 168 169 struct f14 { 170 f14(int); 171 }; 172 173 // CHECK-LABEL: define 174 struct f14_use { 175 // CHECK: call {{.*}}, !dbg [[DBG_F14_CTOR_CALL:![0-9]*]] 176 #line 1600 177 f14 v 178 = 179 1; 180 f14_use(); 181 }; 182 183 f14_use::f14_use() = default; 184 185 // CHECK-LABEL: define 186 187 // CHECK-LABEL: define 188 int f21_a(int = 0); 189 void f21_b(int = f21_a()); 190 void f21() { 191 // CHECK: call {{.*}}f21_b{{.*}}, !dbg [[DBG_F21:![0-9]*]] 192 #line 2300 193 f21_b(); 194 } 195 196 // CHECK: [[DBG_F1]] = !MDLocation(line: 100, 197 // CHECK: [[DBG_FOO_VALUE]] = !MDLocation(line: 200, 198 // CHECK: [[DBG_FOO_REF]] = !MDLocation(line: 202, 199 // CHECK: [[DBG_FOO_COMPLEX]] = !MDLocation(line: 204, 200 // CHECK: [[DBG_F2]] = !MDLocation(line: 300, 201 // CHECK: [[DBG_F3]] = !MDLocation(line: 400, 202 // CHECK: [[DBG_F4]] = !MDLocation(line: 500, 203 // CHECK: [[DBG_F5]] = !MDLocation(line: 600, 204 // CHECK: [[DBG_F6]] = !MDLocation(line: 700, 205 // CHECK: [[DBG_F7]] = !MDLocation(line: 800, 206 // CHECK: [[DBG_F8]] = !MDLocation(line: 900, 207 // CHECK: [[DBG_F9]] = !MDLocation(line: 1000, 208 // CHECK: [[DBG_F10_ICMP]] = !MDLocation(line: 1100, 209 // CHECK: [[DBG_F10_STORE]] = !MDLocation(line: 1100, 210 // CHECK: [[DBG_GLBL_CTOR_B]] = !MDLocation(line: 1500, 211 // CHECK: [[DBG_GLBL_DTOR_B]] = !MDLocation(line: 1500, 212 // CHECK: [[DBG_F11]] = !MDLocation(line: 1200, 213 // CHECK: [[DBG_F12]] = !MDLocation(line: 1300, 214 // CHECK: [[DBG_F13]] = !MDLocation(line: 1400, 215