blob: 8bf30e4853a3ed94afc3eb0a6906aab722f0f40e [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 Blaikie73ca5692014-12-09 00:32:22 +000060// CHECK: [[DBG_F1]] = metadata !{i32 100,
61// CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200,
David Blaikie8ec8dfe2014-12-09 21:10:43 +000062// CHECK: [[DBG_FOO_REF]] = metadata !{i32 202,
63// CHECK: [[DBG_FOO_COMPLEX]] = metadata !{i32 204,
David Blaikie93e9cf82014-12-09 21:32:00 +000064// CHECK: [[DBG_F2]] = metadata !{i32 300,
65// CHECK: [[DBG_F3]] = metadata !{i32 400,
David Blaikie7f138812014-12-09 22:04:13 +000066// CHECK: [[DBG_F4]] = metadata !{i32 500,