1 // RUN: %clang_cc1 -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s 2 3 int &src(); 4 int *sink(); 5 extern "C" __complex float complex_src(); 6 extern "C" __complex float *complex_sink(); 7 8 // CHECK-LABEL: define 9 void f1() { 10 #line 100 11 * // The store for the assignment should be attributed to the start of the 12 // assignment expression here, regardless of the location of subexpressions. 13 sink() = src(); 14 // CHECK: store {{.*}}, !dbg [[DBG_F1:!.*]] 15 } 16 17 struct foo { 18 int i; 19 int &j; 20 __complex float k; 21 foo(); 22 }; 23 24 // CHECK-LABEL: define 25 foo::foo() 26 : 27 #line 200 28 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 36 // CHECK-LABEL: define {{.*}}f2{{.*}} 37 void f2() { 38 #line 300 39 * // CHECK: store float {{.*}} !dbg [[DBG_F2:!.*]] 40 complex_sink() = complex_src(); 41 } 42 43 // CHECK-LABEL: define 44 void f3() { 45 #line 400 46 * // CHECK: store float {{.*}} !dbg [[DBG_F3:!.*]] 47 complex_sink() += complex_src(); 48 } 49 50 // CHECK-LABEL: define 51 void f4() { 52 #line 500 53 auto x // CHECK: store {{.*}} !dbg [[DBG_F4:!.*]] 54 = src(); 55 } 56 57 // CHECK-LABEL: define 58 void f5() { 59 #line 600 60 auto x // CHECK: store float {{.*}} !dbg [[DBG_F5:!.*]] 61 = complex_src(); 62 } 63 64 struct agg { int i; }; 65 agg agg_src(); 66 67 // CHECK-LABEL: define 68 void f6() { 69 agg x; 70 #line 700 71 x // CHECK: call void @llvm.memcpy{{.*}} !dbg [[DBG_F6:!.*]] 72 = agg_src(); 73 } 74 75 // CHECK-LABEL: define 76 void f7() { 77 int *src1(); 78 int src2(); 79 #line 800 80 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F7:!.*]] 81 src1())[src2()]; 82 } 83 84 // CHECK-LABEL: define 85 void f8() { 86 int src1[1]; 87 int src2(); 88 #line 900 89 int x = ( // CHECK: load {{.*}} !dbg [[DBG_F8:!.*]] 90 src1)[src2()]; 91 } 92 93 // CHECK-LABEL: define 94 void f9(int i) { 95 int src1[1][i]; 96 int src2(); 97 #line 1000 98 auto x = ( // CHECK: getelementptr {{.*}} !dbg [[DBG_F9:!.*]] 99 src1)[src2()]; 100 } 101 102 // CHECK: [[DBG_F1]] = metadata !{i32 100, 103 // CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200, 104 // CHECK: [[DBG_FOO_REF]] = metadata !{i32 202, 105 // CHECK: [[DBG_FOO_COMPLEX]] = metadata !{i32 204, 106 // CHECK: [[DBG_F2]] = metadata !{i32 300, 107 // CHECK: [[DBG_F3]] = metadata !{i32 400, 108 // CHECK: [[DBG_F4]] = metadata !{i32 500, 109 // CHECK: [[DBG_F5]] = metadata !{i32 600, 110 // CHECK: [[DBG_F6]] = metadata !{i32 700, 111 // CHECK: [[DBG_F7]] = metadata !{i32 800, 112 // CHECK: [[DBG_F8]] = metadata !{i32 900, 113 // CHECK: [[DBG_F9]] = metadata !{i32 1000, 114