From 43eab6bce02309f470e486667e45d21f09884f51 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 21 Apr 2015 18:24:23 +0000 Subject: [PATCH] DebugInfo: Assert dbg.declare/value insts are valid Remove early returns for when `getVariable()` is null, and just assert that it never happens. The Verifier already confirms that there's a valid variable on these intrinsics, so we should assume the debug info isn't broken. I also updated a check for a `!dbg` attachment, which the Verifier similarly guarantees. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235400 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/FastISel.cpp | 4 ++-- lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp | 5 +++-- lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 8 +++----- lib/Transforms/Utils/Local.cpp | 9 +++------ 4 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/FastISel.cpp b/lib/CodeGen/SelectionDAG/FastISel.cpp index 5ffb826956e..dafbc63dbd0 100644 --- a/lib/CodeGen/SelectionDAG/FastISel.cpp +++ b/lib/CodeGen/SelectionDAG/FastISel.cpp @@ -1088,8 +1088,8 @@ bool FastISel::selectIntrinsicCall(const IntrinsicInst *II) { } case Intrinsic::dbg_declare: { const DbgDeclareInst *DI = cast(II); - DIVariable DIVar = DI->getVariable(); - if (!DIVar || !FuncInfo.MF->getMMI().hasDebugInfo()) { + assert(DI->getVariable() && "Missing variable"); + if (!FuncInfo.MF->getMMI().hasDebugInfo()) { DEBUG(dbgs() << "Dropping debug info for " << *DI << "\n"); return true; } diff --git a/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp index bb40326ba2d..b7882329955 100644 --- a/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp +++ b/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp @@ -202,8 +202,9 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf, // during the initial isel pass through the IR so that it is done // in a predictable order. if (const DbgDeclareInst *DI = dyn_cast(I)) { - DIVariable DIVar = DI->getVariable(); - if (MMI.hasDebugInfo() && DIVar && DI->getDebugLoc()) { + assert(DI->getVariable() && "Missing variable"); + assert(DI->getDebugLoc() && "Missing location"); + if (MMI.hasDebugInfo()) { // Don't handle byval struct arguments or VLAs, for example. // Non-byval arguments are handled here (they refer to the stack // temporary alloca at this point). diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 32d2aae488e..49ea4b4b5a3 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -4650,8 +4650,8 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) { MDLocalVariable *Variable = DI.getVariable(); MDExpression *Expression = DI.getExpression(); const Value *Address = DI.getAddress(); - DIVariable DIVar = Variable; - if (!Address || !DIVar) { + assert(Variable && "Missing variable"); + if (!Address) { DEBUG(dbgs() << "Dropping debug info for " << DI << "\n"); return nullptr; } @@ -4728,9 +4728,7 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) { } case Intrinsic::dbg_value: { const DbgValueInst &DI = cast(I); - DIVariable DIVar = DI.getVariable(); - if (!DIVar) - return nullptr; + assert(DI.getVariable() && "Missing variable"); MDLocalVariable *Variable = DI.getVariable(); MDExpression *Expression = DI.getExpression(); diff --git a/lib/Transforms/Utils/Local.cpp b/lib/Transforms/Utils/Local.cpp index 1c9760e0ff9..5672a36a458 100644 --- a/lib/Transforms/Utils/Local.cpp +++ b/lib/Transforms/Utils/Local.cpp @@ -1000,8 +1000,7 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI, StoreInst *SI, DIBuilder &Builder) { DIVariable DIVar = DDI->getVariable(); DIExpression DIExpr = DDI->getExpression(); - if (!DIVar) - return false; + assert(DIVar && "Missing variable"); if (LdStHasDebugValue(DIVar, SI)) return true; @@ -1028,8 +1027,7 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI, LoadInst *LI, DIBuilder &Builder) { DIVariable DIVar = DDI->getVariable(); DIExpression DIExpr = DDI->getExpression(); - if (!DIVar) - return false; + assert(DIVar && "Missing variable"); if (LdStHasDebugValue(DIVar, LI)) return true; @@ -1107,8 +1105,7 @@ bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress, DebugLoc Loc = DDI->getDebugLoc(); DIVariable DIVar = DDI->getVariable(); DIExpression DIExpr = DDI->getExpression(); - if (!DIVar) - return false; + assert(DIVar && "Missing variable"); if (Deref) { // Create a copy of the original DIDescriptor for user variable, prepending -- 2.34.1