summaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index 85c768807572..b5debd93b0f6 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -3314,7 +3314,14 @@ LValue CodeGenFunction::EmitDeclRefLValue(const DeclRefExpr *E) {
auto *FD = LambdaCaptureFields.lookup(BD);
return EmitCapturedFieldLValue(*this, FD, CXXABIThisValue);
}
- return EmitLValue(BD->getBinding());
+ // Suppress debug location updates when visiting the binding, since the
+ // binding may emit instructions that would otherwise be associated with the
+ // binding itself, rather than the expression referencing the binding. (this
+ // leads to jumpy debug stepping behavior where the location/debugger jump
+ // back to the binding declaration, then back to the expression referencing
+ // the binding)
+ DisableDebugLocationUpdates D(*this);
+ return EmitLValue(BD->getBinding(), NotKnownNonNull);
}
// We can form DeclRefExprs naming GUID declarations when reconstituting