diff --git a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp --- a/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp +++ b/llvm/lib/Transforms/IPO/DeadArgumentElimination.cpp @@ -1056,7 +1056,8 @@ } // Replace the return instruction with one returning the new return // value (possibly 0 if we became void). - ReturnInst::Create(F->getContext(), RetVal, RI); + auto *NewRet = ReturnInst::Create(F->getContext(), RetVal, RI); + NewRet->setDebugLoc(RI->getDebugLoc()); BB.getInstList().erase(RI); } diff --git a/llvm/test/Transforms/DeadArgElim/dbginfo-preserve-dbgloc.ll b/llvm/test/Transforms/DeadArgElim/dbginfo-preserve-dbgloc.ll --- a/llvm/test/Transforms/DeadArgElim/dbginfo-preserve-dbgloc.ll +++ b/llvm/test/Transforms/DeadArgElim/dbginfo-preserve-dbgloc.ll @@ -63,6 +63,7 @@ cleanup: ; preds = %if.end3, %if.then2, %if.then %retval.0 = phi i1 [ false, %if.then2 ], [ true, %if.end3 ], [ false, %if.then ] +; CHECK: ret void, !dbg ret i1 %retval.0, !dbg !56 }