blob: 9fb6ba8ac70ef7256ccebc3cf20078edeb473357 [file] [log] [blame]
Douglas Katzman3459ce22015-10-08 04:24:12 +00001// RUN: %clang_cc1 -w -debug-info-kind=line-tables-only -std=c++11 -fexceptions -fcxx-exceptions -S -emit-llvm %s -o - | FileCheck %s
2// RUN: %clang_cc1 -w -debug-info-kind=line-tables-only -std=c++11 -fexceptions -fcxx-exceptions -S -emit-llvm %s -o - -triple i686-linux-gnu | FileCheck %s
David Blaikie66e41972015-01-14 07:38:27 +00003
4// XFAIL: win32
David Blaikie0b7fad62014-12-08 21:48:57 +00005
David Blaikie538deff2014-12-09 20:52:24 +00006int &src();
David Blaikie8ec8dfe2014-12-09 21:10:43 +00007int *sink();
Reid Kleckner60e54da2014-12-10 00:47:33 +00008extern "C" __complex float complex_src();
9extern "C" __complex float *complex_sink();
David Blaikie0b7fad62014-12-08 21:48:57 +000010
David Blaikie8ec8dfe2014-12-09 21:10:43 +000011// CHECK-LABEL: define
David Blaikie0b7fad62014-12-08 21:48:57 +000012void f1() {
David Blaikie9b479662015-01-25 01:19:10 +000013 *sink()
David Blaikie73ca5692014-12-09 00:32:22 +000014 // CHECK: store {{.*}}, !dbg [[DBG_F1:!.*]]
David Blaikie9b479662015-01-25 01:19:10 +000015#line 100
16 = //
17 src();
David Blaikie0b7fad62014-12-08 21:48:57 +000018}
19
David Blaikie73ca5692014-12-09 00:32:22 +000020struct foo {
21 int i;
22 int &j;
David Blaikie538deff2014-12-09 20:52:24 +000023 __complex float k;
David Blaikie73ca5692014-12-09 00:32:22 +000024 foo();
25};
26
David Blaikie8ec8dfe2014-12-09 21:10:43 +000027// CHECK-LABEL: define
David Blaikie73ca5692014-12-09 00:32:22 +000028foo::foo()
David Blaikie8ec8dfe2014-12-09 21:10:43 +000029 :
David Blaikie73ca5692014-12-09 00:32:22 +000030#line 200
David Blaikie8ec8dfe2014-12-09 21:10:43 +000031 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
Reid Kleckner60e54da2014-12-10 00:47:33 +000039// CHECK-LABEL: define {{.*}}f2{{.*}}
David Blaikie8ec8dfe2014-12-09 21:10:43 +000040void f2() {
David Blaikie9b479662015-01-25 01:19:10 +000041 // CHECK: store float {{.*}} !dbg [[DBG_F2:!.*]]
42 *complex_sink()
David Blaikie8ec8dfe2014-12-09 21:10:43 +000043#line 300
David Blaikie9b479662015-01-25 01:19:10 +000044 = //
45 complex_src();
David Blaikie73ca5692014-12-09 00:32:22 +000046}
47
David Blaikie93e9cf82014-12-09 21:32:00 +000048// CHECK-LABEL: define
49void f3() {
David Blaikie9b479662015-01-25 01:19:10 +000050 // CHECK: store float {{.*}} !dbg [[DBG_F3:!.*]]
51 *complex_sink()
David Blaikie93e9cf82014-12-09 21:32:00 +000052#line 400
David Blaikie9b479662015-01-25 01:19:10 +000053 += //
54 complex_src();
David Blaikie93e9cf82014-12-09 21:32:00 +000055}
56
David Blaikie7f138812014-12-09 22:04:13 +000057// CHECK-LABEL: define
58void f4() {
59#line 500
60 auto x // CHECK: store {{.*}} !dbg [[DBG_F4:!.*]]
61 = src();
62}
63
David Blaikie00de22f2014-12-09 22:15:02 +000064// CHECK-LABEL: define
65void f5() {
66#line 600
67 auto x // CHECK: store float {{.*}} !dbg [[DBG_F5:!.*]]
68 = complex_src();
69}
70
David Blaikied73f3c62014-12-09 23:33:26 +000071struct agg { int i; };
72agg agg_src();
73
74// CHECK-LABEL: define
75void f6() {
76 agg x;
David Blaikie9f7ae2c2015-01-25 01:25:37 +000077 // CHECK: call void @llvm.memcpy{{.*}} !dbg [[DBG_F6:!.*]]
78 x
David Blaikied73f3c62014-12-09 23:33:26 +000079#line 700
David Blaikie9f7ae2c2015-01-25 01:25:37 +000080 = //
81 agg_src();
David Blaikied73f3c62014-12-09 23:33:26 +000082}
83
David Blaikief0aceb22014-12-10 01:03:48 +000084// CHECK-LABEL: define
85void f7() {
86 int *src1();
87 int src2();
88#line 800
89 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F7:!.*]]
90 src1())[src2()];
91}
92
David Blaikied85548d2014-12-10 01:16:09 +000093// CHECK-LABEL: define
94void f8() {
95 int src1[1];
96 int src2();
97#line 900
98 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F8:!.*]]
99 src1)[src2()];
100}
101
David Blaikie7c5da412014-12-10 01:34:25 +0000102// CHECK-LABEL: define
103void f9(int i) {
104 int src1[1][i];
105 int src2();
106#line 1000
107 auto x = ( // CHECK: getelementptr {{.*}} !dbg [[DBG_F9:!.*]]
108 src1)[src2()];
109}
110
David Blaikie09f12fa2014-12-14 18:48:18 +0000111inline void *operator new(decltype(sizeof(1)), void *p) noexcept { return p; }
David Blaikiea2c11242014-12-10 19:04:09 +0000112
113// CHECK-LABEL: define
114void f10() {
115 void *void_src();
Richard Smith902a0232015-02-14 01:52:20 +0000116 (
David Blaikie09f12fa2014-12-14 18:48:18 +0000117 // CHECK: store {{.*}} !dbg [[DBG_F10_STORE:!.*]]
David Blaikiea2c11242014-12-10 19:04:09 +0000118#line 1100
119 new (void_src()) int(src()));
120}
121
David Blaikie47d28e02015-01-14 07:10:46 +0000122// noexcept just to simplify the codegen a bit
123void fn() noexcept(true);
124
125struct bar {
126 bar();
127 // noexcept(false) to convolute the global dtor
128 ~bar() noexcept(false);
129};
130// global ctor cleanup
131// CHECK-LABEL: define
132// CHECK: invoke{{ }}
133// CHECK: invoke{{ }}
134// CHECK: to label {{.*}}, !dbg [[DBG_GLBL_CTOR_B:!.*]]
David Blaikie66e41972015-01-14 07:38:27 +0000135
136// terminate caller
137// CHECK-LABEL: define
138
David Blaikie47d28e02015-01-14 07:10:46 +0000139// global dtor cleanup
140// CHECK-LABEL: define
141// CHECK: invoke{{ }}
142// CHECK: invoke{{ }}
143// CHECK: to label {{.*}}, !dbg [[DBG_GLBL_DTOR_B:!.*]]
David Blaikie71fb83e2015-01-16 22:55:09 +0000144#line 1200
David Blaikie47d28e02015-01-14 07:10:46 +0000145bar b[1] = { //
146 (fn(), //
147 bar())};
148
David Blaikie66e41972015-01-14 07:38:27 +0000149// CHECK-LABEL: define
150__complex double f11() {
151 __complex double f;
152// CHECK: store {{.*}} !dbg [[DBG_F11:!.*]]
David Blaikie71fb83e2015-01-16 22:55:09 +0000153#line 1300
David Blaikie66e41972015-01-14 07:38:27 +0000154 return f;
155}
156
157// CHECK-LABEL: define
158void f12() {
159 int f12_1();
160 void f12_2(int = f12_1());
David Blaikieea3e51d2015-06-29 17:29:50 +0000161// CHECK: call {{.*}}{{(signext )?}}i32 {{.*}} !dbg [[DBG_F12:!.*]]
David Blaikie71fb83e2015-01-16 22:55:09 +0000162#line 1400
David Blaikie66e41972015-01-14 07:38:27 +0000163 f12_2();
164}
165
166// CHECK-LABEL: define
167void f13() {
168// CHECK: call {{.*}} !dbg [[DBG_F13:!.*]]
169#define F13_IMPL 1, src()
170 1,
David Blaikie71fb83e2015-01-16 22:55:09 +0000171#line 1500
David Blaikie66e41972015-01-14 07:38:27 +0000172 F13_IMPL;
173}
174
David Blaikie01fb5fb2015-01-18 01:48:19 +0000175struct f14_impl {
176 f14_impl(int);
David Blaikie71fb83e2015-01-16 22:55:09 +0000177};
178
179// CHECK-LABEL: define
David Blaikie1c39bbb2015-01-18 00:37:04 +0000180struct f14_use {
David Blaikie01fb5fb2015-01-18 01:48:19 +0000181// CHECK: call {{.*}}f14_impl{{.*}}, !dbg [[DBG_F14_CTOR_CALL:![0-9]*]]
David Blaikiea81d4102015-01-18 00:12:58 +0000182#line 1600
David Blaikie01fb5fb2015-01-18 01:48:19 +0000183 f14_impl v{//
184 1};
David Blaikie1c39bbb2015-01-18 00:37:04 +0000185 f14_use();
186};
187
188f14_use::f14_use() = default;
David Blaikie71fb83e2015-01-16 22:55:09 +0000189
190// CHECK-LABEL: define
David Blaikiec6593072015-01-18 01:57:54 +0000191// CHECK-LABEL: define
David Blaikie01fb5fb2015-01-18 01:48:19 +0000192void func(foo);
193void f15(foo *f) {
194 func(
195// CHECK: getelementptr {{.*}}, !dbg [[DBG_F15:![0-9]*]]
196#line 1700
197 f[3]);
198}
David Blaikie71fb83e2015-01-16 22:55:09 +0000199
David Blaikiec6593072015-01-18 01:57:54 +0000200// CHECK-LABEL: define
201void f16(__complex float f) {
202 __complex float g = //
203// CHECK: add {{.*}}, !dbg [[DBG_F16:![0-9]*]]
204#line 1800
205 f + 1;
206}
207
David Blaikie2d321fb2015-01-24 23:35:17 +0000208// CHECK-LABEL: define
209void f17(int *x) {
210 1,
211// CHECK: getelementptr {{.*}}, !dbg [[DBG_F17:![0-9]*]]
212#line 1900
213 x[1];
214}
215
David Blaikie298720d2015-01-28 19:50:09 +0000216// CHECK-LABEL: define
217void f18(int a, int b) {
218// CHECK: icmp {{.*}}, !dbg [[DBG_F18_1:![0-9]*]]
219// CHECK: br {{.*}}, !dbg [[DBG_F18_2:![0-9]*]]
220#line 2000
221 if (a //
222 && //
223 b)
224 ;
225}
226
227// CHECK-LABEL: define
228void f19(int a, int b) {
229// CHECK: icmp {{.*}}, !dbg [[DBG_F19_1:![0-9]*]]
230// CHECK: br {{.*}}, !dbg [[DBG_F19_2:![0-9]*]]
231#line 2100
232 if (a //
233 || //
234 b)
235 ;
236}
237
238// CHECK-LABEL: define
239void f20(int a, int b, int c) {
240// CHECK: icmp {{.*}}, !dbg [[DBG_F20_1:![0-9]*]]
241// FIXME: Conditional operator's exprloc should be the '?' not the start of the
242// expression, then this would go in the right place. (but adding getExprLoc to
243// the ConditionalOperator breaks the ARC migration tool - need to investigate
244// further).
245// CHECK: br {{.*}}, !dbg [[DBG_F20_1]]
246#line 2200
247 if (a //
248 ? //
249 b : c)
250 ;
251}
252
David Blaikie14177b72015-02-03 22:37:17 +0000253// CHECK-LABEL: define
254int f21_a(int = 0);
255void f21_b(int = f21_a());
256void f21() {
257// CHECK: call {{.*}}f21_b{{.*}}, !dbg [[DBG_F21:![0-9]*]]
258#line 2300
259 f21_b();
260}
261
David Blaikie4d524432015-02-04 19:47:54 +0000262// CHECK-LABEL: define
263struct f22_dtor {
264 ~f22_dtor();
265};
266void f22() {
267 {
268 f22_dtor f;
269 src();
NAKAMURA Takumib1980e62015-02-05 01:02:34 +0000270// CHECK: invoke {{.*}}src
David Blaikie4d524432015-02-04 19:47:54 +0000271// CHECK: call {{.*}}, !dbg [[DBG_F22:![0-9]*]]
272// CHECK: call {{.*}}, !dbg [[DBG_F22]]
273#line 2400
274 }
275}
276
David Blaikie2221aba2015-02-09 18:47:14 +0000277// CHECK-LABEL: define
278struct f23_struct {
279};
280f23_struct f23_a();
281void f23_b(f23_struct = f23_a());
282void f23() {
283// CHECK: call {{.*}}f23_a{{.*}}, !dbg [[DBG_F23:![0-9]*]]
284#line 2500
285 f23_b();
286}
287
David Blaikie20937be2015-02-09 18:55:57 +0000288// CHECK-LABEL: define
289void f24_a(__complex float = complex_src());
290void f24() {
291// CHECK: call {{.*}}complex_src{{.*}}, !dbg [[DBG_F24:![0-9]*]]
292#line 2600
293 f24_a();
294}
295
Duncan P. N. Exon Smith9dd4e4e2015-04-29 16:40:08 +0000296// CHECK: [[DBG_F1]] = !DILocation(line: 100,
297// CHECK: [[DBG_FOO_VALUE]] = !DILocation(line: 200,
298// CHECK: [[DBG_FOO_REF]] = !DILocation(line: 202,
299// CHECK: [[DBG_FOO_COMPLEX]] = !DILocation(line: 204,
300// CHECK: [[DBG_F2]] = !DILocation(line: 300,
301// CHECK: [[DBG_F3]] = !DILocation(line: 400,
302// CHECK: [[DBG_F4]] = !DILocation(line: 500,
303// CHECK: [[DBG_F5]] = !DILocation(line: 600,
304// CHECK: [[DBG_F6]] = !DILocation(line: 700,
305// CHECK: [[DBG_F7]] = !DILocation(line: 800,
306// CHECK: [[DBG_F8]] = !DILocation(line: 900,
307// CHECK: [[DBG_F9]] = !DILocation(line: 1000,
308// CHECK: [[DBG_F10_STORE]] = !DILocation(line: 1100,
309// CHECK: [[DBG_GLBL_CTOR_B]] = !DILocation(line: 1200,
310// CHECK: [[DBG_GLBL_DTOR_B]] = !DILocation(line: 1200,
311// CHECK: [[DBG_F11]] = !DILocation(line: 1300,
312// CHECK: [[DBG_F12]] = !DILocation(line: 1400,
313// CHECK: [[DBG_F13]] = !DILocation(line: 1500,
314// CHECK: [[DBG_F14_CTOR_CALL]] = !DILocation(line: 1600,
315// CHECK: [[DBG_F15]] = !DILocation(line: 1700,
316// CHECK: [[DBG_F16]] = !DILocation(line: 1800,
317// CHECK: [[DBG_F17]] = !DILocation(line: 1900,
318// CHECK: [[DBG_F18_1]] = !DILocation(line: 2000,
319// CHECK: [[DBG_F18_2]] = !DILocation(line: 2001,
320// CHECK: [[DBG_F19_1]] = !DILocation(line: 2100,
321// CHECK: [[DBG_F19_2]] = !DILocation(line: 2101,
322// CHECK: [[DBG_F20_1]] = !DILocation(line: 2200,
323// CHECK: [[DBG_F23]] = !DILocation(line: 2500,
324// CHECK: [[DBG_F24]] = !DILocation(line: 2600,