diff options
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 5 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/PR20038.cpp | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index 14ef5b79826..046ee33271e 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -358,7 +358,10 @@ public: Value *VisitExprWithCleanups(ExprWithCleanups *E) { CGF.enterFullExpression(E); CodeGenFunction::RunCleanupsScope Scope(CGF); - return Visit(E->getSubExpr()); + auto *V = Visit(E->getSubExpr()); + if (CGDebugInfo *DI = CGF.getDebugInfo()) + DI->EmitLocation(Builder, E->getLocEnd(), false); + return V; } Value *VisitCXXNewExpr(const CXXNewExpr *E) { return CGF.EmitCXXNewExpr(E); diff --git a/clang/test/CodeGenCXX/PR20038.cpp b/clang/test/CodeGenCXX/PR20038.cpp new file mode 100644 index 00000000000..8b3ffc6f53a --- /dev/null +++ b/clang/test/CodeGenCXX/PR20038.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -g -emit-llvm %s -o - | FileCheck %s + +struct C { + ~C(); +}; +extern bool b; +// CHECK: call void @_ZN1CD1Ev({{.*}}), !dbg [[DTOR_CALL_LOC:![0-9]*]] +// CHECK: [[FUN4:.*]] = {{.*}}; [ DW_TAG_subprogram ] {{.*}} [def] [fun4] +// CHECK: [[DTOR_CALL_LOC]] = metadata !{i32 [[@LINE+2]], i32 0, metadata [[FUN4_BLOCK:.*]], null} +// CHECK: [[FUN4_BLOCK]] = metadata !{{{[^,]*}}, {{[^,]*}}, metadata [[FUN4]], +void fun4() { b && (C(), 1); } |