diff options
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 3 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/debug-info-line.cpp | 10 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index e7caf835ce2..ca06e852d0f 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -2452,6 +2452,9 @@ LValue CodeGenFunction::EmitArraySubscriptExpr(const ArraySubscriptExpr *E, // Propagate the alignment from the array itself to the result. ArrayAlignment = ArrayLV.getAlignment(); + if (auto *DI = getDebugInfo()) + DI->EmitLocation(Builder, E->getLocStart()); + if (getLangOpts().isSignedOverflowDefined()) Address = Builder.CreateGEP(ArrayPtr, Args, "arrayidx"); else diff --git a/clang/test/CodeGenCXX/debug-info-line.cpp b/clang/test/CodeGenCXX/debug-info-line.cpp index 396a3f77501..33c188af590 100644 --- a/clang/test/CodeGenCXX/debug-info-line.cpp +++ b/clang/test/CodeGenCXX/debug-info-line.cpp @@ -81,6 +81,15 @@ void f7() { src1())[src2()]; } +// CHECK-LABEL: define +void f8() { + int src1[1]; + int src2(); +#line 900 + int x = ( // CHECK: load {{.*}} !dbg [[DBG_F8:!.*]] + src1)[src2()]; +} + // CHECK: [[DBG_F1]] = metadata !{i32 100, // CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200, // CHECK: [[DBG_FOO_REF]] = metadata !{i32 202, @@ -91,3 +100,4 @@ void f7() { // CHECK: [[DBG_F5]] = metadata !{i32 600, // CHECK: [[DBG_F6]] = metadata !{i32 700, // CHECK: [[DBG_F7]] = metadata !{i32 800, +// CHECK: [[DBG_F8]] = metadata !{i32 900, |