From: David Blaikie Date: Tue, 9 Dec 2014 23:33:26 +0000 (+0000) Subject: DebugInfo: Correct location of aggregate assignment X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=46323d1e823ee9d8d3d2e6ce851d97b98d563599;p=clang DebugInfo: Correct location of aggregate assignment git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@223854 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExprCXX.cpp b/lib/CodeGen/CGExprCXX.cpp index 4a8fe9a954..4876b1a6ed 100644 --- a/lib/CodeGen/CGExprCXX.cpp +++ b/lib/CodeGen/CGExprCXX.cpp @@ -187,6 +187,8 @@ RValue CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr( unsigned ArgsToSkip = isa(CE) ? 1 : 0; llvm::Value *RHS = EmitLValue(*(CE->arg_begin() + ArgsToSkip)).getAddress(); + if (auto *DI = getDebugInfo()) + DI->EmitLocation(Builder, CE->getLocStart()); EmitAggregateAssign(This, RHS, CE->getType()); return RValue::get(This); } diff --git a/test/CodeGenCXX/debug-info-line.cpp b/test/CodeGenCXX/debug-info-line.cpp index 9936d5f02f..25db99fd46 100644 --- a/test/CodeGenCXX/debug-info-line.cpp +++ b/test/CodeGenCXX/debug-info-line.cpp @@ -64,6 +64,17 @@ void f5() { = complex_src(); } +struct agg { int i; }; +agg agg_src(); + +// CHECK-LABEL: define +void f6() { + agg x; +#line 700 + x // CHECK: call void @llvm.memcpy{{.*}} !dbg [[DBG_F6:!.*]] + = agg_src(); +} + // CHECK: [[DBG_F1]] = metadata !{i32 100, // CHECK: [[DBG_FOO_VALUE]] = metadata !{i32 200, // CHECK: [[DBG_FOO_REF]] = metadata !{i32 202, @@ -72,3 +83,4 @@ void f5() { // CHECK: [[DBG_F3]] = metadata !{i32 400, // CHECK: [[DBG_F4]] = metadata !{i32 500, // CHECK: [[DBG_F5]] = metadata !{i32 600, +// CHECK: [[DBG_F6]] = metadata !{i32 700,