diff options
Diffstat (limited to 'clang/lib/CodeGen/CGExprCXX.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprCXX.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGExprCXX.cpp b/clang/lib/CodeGen/CGExprCXX.cpp index 6d63b3ae9cf..31f9141eebb 100644 --- a/clang/lib/CodeGen/CGExprCXX.cpp +++ b/clang/lib/CodeGen/CGExprCXX.cpp @@ -187,6 +187,8 @@ RValue CodeGenFunction::EmitCXXMemberOrOperatorMemberCallExpr( unsigned ArgsToSkip = isa<CXXOperatorCallExpr>(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); } @@ -752,13 +754,15 @@ static llvm::Value *EmitCXXNewAllocSize(CodeGenFunction &CGF, } static void StoreAnyExprIntoOneUnit(CodeGenFunction &CGF, const Expr *Init, - QualType AllocType, llvm::Value *NewPtr) { + QualType AllocType, llvm::Value *NewPtr, + SourceLocation DbgLoc = SourceLocation()) { // FIXME: Refactor with EmitExprAsInit. CharUnits Alignment = CGF.getContext().getTypeAlignInChars(AllocType); switch (CGF.getEvaluationKind(AllocType)) { case TEK_Scalar: CGF.EmitScalarInit(Init, nullptr, - CGF.MakeAddrLValue(NewPtr, AllocType, Alignment), false); + CGF.MakeAddrLValue(NewPtr, AllocType, Alignment), false, + DbgLoc); return; case TEK_Complex: CGF.EmitComplexExprIntoLValue(Init, CGF.MakeAddrLValue(NewPtr, AllocType, @@ -1016,12 +1020,12 @@ static void EmitNewInitializer(CodeGenFunction &CGF, const CXXNewExpr *E, llvm::Value *NewPtr, llvm::Value *NumElements, llvm::Value *AllocSizeWithoutCookie) { - ApplyDebugLocation DL(CGF, E->getStartLoc()); if (E->isArray()) CGF.EmitNewArrayInitializer(E, ElementType, NewPtr, NumElements, AllocSizeWithoutCookie); else if (const Expr *Init = E->getInitializer()) - StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr); + StoreAnyExprIntoOneUnit(CGF, Init, E->getAllocatedType(), NewPtr, + E->getStartLoc()); } /// Emit a call to an operator new or operator delete function, as implicitly @@ -1265,6 +1269,9 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) { E->placement_arg_end(), /* CalleeDecl */ nullptr, /*ParamsToSkip*/ 1); + if (auto *DI = getDebugInfo()) + DI->EmitLocation(Builder, E->getLocStart()); + // Emit the allocation call. If the allocator is a global placement // operator, just "inline" it directly. RValue RV; |