blob: 9936d5f02f5edb0f412030cd6ba2773d01235fce [file] [log] [blame]
David Blaikie0b7fad62014-12-08 21:48:57 +00001// RUN: %clang_cc1 -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s
2
David Blaikie538deff2014-12-09 20:52:24 +00003int &src();
David Blaikie8ec8dfe2014-12-09 21:10:43 +00004int *sink();
David Blaikie538deff2014-12-09 20:52:24 +00005__complex float complex_src();
David Blaikie8ec8dfe2014-12-09 21:10:43 +00006__complex float *complex_sink();
David Blaikie0b7fad62014-12-08 21:48:57 +00007
David Blaikie8ec8dfe2014-12-09 21:10:43 +00008// CHECK-LABEL: define
David Blaikie0b7fad62014-12-08 21:48:57 +00009void f1() {
10#line 100
11 * // The store for the assignment should be attributed to the start of the
David Blaikie8ec8dfe2014-12-09 21:10:43 +000012 // assignment expression here, regardless of the location of subexpressions.
13 sink() = src();
David Blaikie73ca5692014-12-09 00:32:22 +000014 // CHECK: store {{.*}}, !dbg [[DBG_F1:!.*]]
David Blaikie0b7fad62014-12-08 21:48:57 +000015}
16
David Blaikie73ca5692014-12-09 00:32:22 +000017struct foo {
18 int i;
19 int &j;
David Blaikie538deff2014-12-09 20:52:24 +000020 __complex float k;
David Blaikie73ca5692014-12-09 00:32:22 +000021 foo();
22};
23
David Blaikie8ec8dfe2014-12-09 21:10:43 +000024// CHECK-LABEL: define
David Blaikie73ca5692014-12-09 00:32:22 +000025foo::foo()
David Blaikie8ec8dfe2014-12-09 21:10:43 +000026 :
David Blaikie73ca5692014-12-09 00:32:22 +000027#line 200
David Blaikie8ec8dfe2014-12-09 21:10:43 +000028 i // CHECK: store i32 {{.*}} !dbg [[DBG_FOO_VALUE:!.*]]
29 (src()),
30 j // CHECK: store i32* {{.*}} !dbg [[DBG_FOO_REF:!.*]]
31 (src()),
32 k // CHECK: store float {{.*}} !dbg [[DBG_FOO_COMPLEX:!.*]]
33 (complex_src()) {
34}
35
David Blaikie93e9cf82014-12-09 21:32:00 +000036// skip C1
37// CHECK-LABEL: define
38
David Blaikie8ec8dfe2014-12-09 21:10:43 +000039// CHECK-LABEL: define
40void 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 Blaikie73ca5692014-12-09 00:32:22 +000067// CHECK: [[DBG_F1]] = metadata !{i32 100,
68// CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200,
David Blaikie8ec8dfe2014-12-09 21:10:43 +000069// CHECK: [[DBG_FOO_REF]] = metadata !{i32 202,
70// CHECK: [[DBG_FOO_COMPLEX]] = metadata !{i32 204,
David Blaikie93e9cf82014-12-09 21:32:00 +000071// CHECK: [[DBG_F2]] = metadata !{i32 300,
72// CHECK: [[DBG_F3]] = metadata !{i32 400,
David Blaikie7f138812014-12-09 22:04:13 +000073// CHECK: [[DBG_F4]] = metadata !{i32 500,
David Blaikie00de22f2014-12-09 22:15:02 +000074// CHECK: [[DBG_F5]] = metadata !{i32 600,