blob: 36b7a94a5146ec03d88b18eb641070df42aa50b9 [file] [log] [blame]
David Blaikie66e41972015-01-14 07:38:27 +00001// 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
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() {
13#line 100
14 * // The store for the assignment should be attributed to the start of the
David Blaikie8ec8dfe2014-12-09 21:10:43 +000015 // assignment expression here, regardless of the location of subexpressions.
16 sink() = src();
David Blaikie73ca5692014-12-09 00:32:22 +000017 // CHECK: store {{.*}}, !dbg [[DBG_F1:!.*]]
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() {
41#line 300
David Blaikie93e9cf82014-12-09 21:32:00 +000042 * // CHECK: store float {{.*}} !dbg [[DBG_F2:!.*]]
David Blaikie8ec8dfe2014-12-09 21:10:43 +000043 complex_sink() = complex_src();
David Blaikie73ca5692014-12-09 00:32:22 +000044}
45
David Blaikie93e9cf82014-12-09 21:32:00 +000046// CHECK-LABEL: define
47void f3() {
48#line 400
49 * // CHECK: store float {{.*}} !dbg [[DBG_F3:!.*]]
50 complex_sink() += complex_src();
51}
52
David Blaikie7f138812014-12-09 22:04:13 +000053// CHECK-LABEL: define
54void f4() {
55#line 500
56 auto x // CHECK: store {{.*}} !dbg [[DBG_F4:!.*]]
57 = src();
58}
59
David Blaikie00de22f2014-12-09 22:15:02 +000060// CHECK-LABEL: define
61void f5() {
62#line 600
63 auto x // CHECK: store float {{.*}} !dbg [[DBG_F5:!.*]]
64 = complex_src();
65}
66
David Blaikied73f3c62014-12-09 23:33:26 +000067struct agg { int i; };
68agg agg_src();
69
70// CHECK-LABEL: define
71void f6() {
72 agg x;
73#line 700
74 x // CHECK: call void @llvm.memcpy{{.*}} !dbg [[DBG_F6:!.*]]
75 = agg_src();
76}
77
David Blaikief0aceb22014-12-10 01:03:48 +000078// CHECK-LABEL: define
79void f7() {
80 int *src1();
81 int src2();
82#line 800
83 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F7:!.*]]
84 src1())[src2()];
85}
86
David Blaikied85548d2014-12-10 01:16:09 +000087// CHECK-LABEL: define
88void f8() {
89 int src1[1];
90 int src2();
91#line 900
92 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F8:!.*]]
93 src1)[src2()];
94}
95
David Blaikie7c5da412014-12-10 01:34:25 +000096// CHECK-LABEL: define
97void 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
David Blaikie09f12fa2014-12-14 18:48:18 +0000105inline void *operator new(decltype(sizeof(1)), void *p) noexcept { return p; }
David Blaikiea2c11242014-12-10 19:04:09 +0000106
107// CHECK-LABEL: define
108void f10() {
109 void *void_src();
David Blaikie09f12fa2014-12-14 18:48:18 +0000110 ( // CHECK: icmp {{.*}} !dbg [[DBG_F10_ICMP:.*]]
111 // CHECK: store {{.*}} !dbg [[DBG_F10_STORE:!.*]]
David Blaikiea2c11242014-12-10 19:04:09 +0000112#line 1100
113 new (void_src()) int(src()));
114}
115
David Blaikie47d28e02015-01-14 07:10:46 +0000116// noexcept just to simplify the codegen a bit
117void fn() noexcept(true);
118
119struct 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:!.*]]
David Blaikie66e41972015-01-14 07:38:27 +0000129
130// terminate caller
131// CHECK-LABEL: define
132
David Blaikie47d28e02015-01-14 07:10:46 +0000133// global dtor cleanup
134// CHECK-LABEL: define
135// CHECK: invoke{{ }}
136// CHECK: invoke{{ }}
137// CHECK: to label {{.*}}, !dbg [[DBG_GLBL_DTOR_B:!.*]]
David Blaikie71fb83e2015-01-16 22:55:09 +0000138#line 1200
David Blaikie47d28e02015-01-14 07:10:46 +0000139bar b[1] = { //
140 (fn(), //
141 bar())};
142
David Blaikie66e41972015-01-14 07:38:27 +0000143// CHECK-LABEL: define
144__complex double f11() {
145 __complex double f;
146// CHECK: store {{.*}} !dbg [[DBG_F11:!.*]]
David Blaikie71fb83e2015-01-16 22:55:09 +0000147#line 1300
David Blaikie66e41972015-01-14 07:38:27 +0000148 return f;
149}
150
151// CHECK-LABEL: define
152void f12() {
153 int f12_1();
154 void f12_2(int = f12_1());
155// CHECK: call {{(signext )?}}i32 {{.*}} !dbg [[DBG_F12:!.*]]
David Blaikie71fb83e2015-01-16 22:55:09 +0000156#line 1400
David Blaikie66e41972015-01-14 07:38:27 +0000157 f12_2();
158}
159
160// CHECK-LABEL: define
161void f13() {
162// CHECK: call {{.*}} !dbg [[DBG_F13:!.*]]
163#define F13_IMPL 1, src()
164 1,
David Blaikie71fb83e2015-01-16 22:55:09 +0000165#line 1500
David Blaikie66e41972015-01-14 07:38:27 +0000166 F13_IMPL;
167}
168
David Blaikie01fb5fb2015-01-18 01:48:19 +0000169struct f14_impl {
170 f14_impl(int);
David Blaikie71fb83e2015-01-16 22:55:09 +0000171};
172
173// CHECK-LABEL: define
David Blaikie1c39bbb2015-01-18 00:37:04 +0000174struct f14_use {
David Blaikie01fb5fb2015-01-18 01:48:19 +0000175// CHECK: call {{.*}}f14_impl{{.*}}, !dbg [[DBG_F14_CTOR_CALL:![0-9]*]]
David Blaikiea81d4102015-01-18 00:12:58 +0000176#line 1600
David Blaikie01fb5fb2015-01-18 01:48:19 +0000177 f14_impl v{//
178 1};
David Blaikie1c39bbb2015-01-18 00:37:04 +0000179 f14_use();
180};
181
182f14_use::f14_use() = default;
David Blaikie71fb83e2015-01-16 22:55:09 +0000183
184// CHECK-LABEL: define
David Blaikiec6593072015-01-18 01:57:54 +0000185// CHECK-LABEL: define
David Blaikie01fb5fb2015-01-18 01:48:19 +0000186void func(foo);
187void f15(foo *f) {
188 func(
189// CHECK: getelementptr {{.*}}, !dbg [[DBG_F15:![0-9]*]]
190#line 1700
191 f[3]);
192}
David Blaikie71fb83e2015-01-16 22:55:09 +0000193
David Blaikiec6593072015-01-18 01:57:54 +0000194// CHECK-LABEL: define
195void f16(__complex float f) {
196 __complex float g = //
197// CHECK: add {{.*}}, !dbg [[DBG_F16:![0-9]*]]
198#line 1800
199 f + 1;
200}
201
Duncan P. N. Exon Smith8d3ef612015-01-14 22:28:03 +0000202// CHECK: [[DBG_F1]] = !MDLocation(line: 100,
203// CHECK: [[DBG_FOO_VALUE]] = !MDLocation(line: 200,
204// CHECK: [[DBG_FOO_REF]] = !MDLocation(line: 202,
205// CHECK: [[DBG_FOO_COMPLEX]] = !MDLocation(line: 204,
206// CHECK: [[DBG_F2]] = !MDLocation(line: 300,
207// CHECK: [[DBG_F3]] = !MDLocation(line: 400,
208// CHECK: [[DBG_F4]] = !MDLocation(line: 500,
209// CHECK: [[DBG_F5]] = !MDLocation(line: 600,
210// CHECK: [[DBG_F6]] = !MDLocation(line: 700,
211// CHECK: [[DBG_F7]] = !MDLocation(line: 800,
212// CHECK: [[DBG_F8]] = !MDLocation(line: 900,
213// CHECK: [[DBG_F9]] = !MDLocation(line: 1000,
214// CHECK: [[DBG_F10_ICMP]] = !MDLocation(line: 1100,
215// CHECK: [[DBG_F10_STORE]] = !MDLocation(line: 1100,
David Blaikie71fb83e2015-01-16 22:55:09 +0000216// CHECK: [[DBG_GLBL_CTOR_B]] = !MDLocation(line: 1200,
217// CHECK: [[DBG_GLBL_DTOR_B]] = !MDLocation(line: 1200,
218// CHECK: [[DBG_F11]] = !MDLocation(line: 1300,
219// CHECK: [[DBG_F12]] = !MDLocation(line: 1400,
220// CHECK: [[DBG_F13]] = !MDLocation(line: 1500,
221// CHECK: [[DBG_F14_CTOR_CALL]] = !MDLocation(line: 1600,
David Blaikie01fb5fb2015-01-18 01:48:19 +0000222// CHECK: [[DBG_F15]] = !MDLocation(line: 1700,
David Blaikiec6593072015-01-18 01:57:54 +0000223// CHECK: [[DBG_F16]] = !MDLocation(line: 1800,