mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 05:24:01 +00:00
DebugInfo: Require a DebugLoc in DIBuilder::insertDeclare()
Change `DIBuilder::insertDeclare()` and `insertDbgValueIntrinsic()` to take an `MDLocation*`/`DebugLoc` parameter which it attaches to the created intrinsic. Assert at creation time that the `scope:` field's subprogram matches the variable's. There's a matching `clang` commit to use the API. The context for this is PR22778, which is removing the `inlinedAt:` field from `MDLocalVariable`, instead deferring to the `!dbg` location attached to the debug info intrinsic. The best way to ensure we always have a `!dbg` attachment is to require one at creation time. I'll be adding verifier checks next, but this API change is the best way to shake out frontend bugs. Note: I added an `llvm_unreachable()` in `bindings/go` and passed in `nullptr` for the `DebugLoc`. The `llgo` folks will eventually need to pass a valid `DebugLoc` here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235041 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1166,10 +1166,9 @@ public:
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
Instruction *DbgVal =
|
||||
DIB.insertDbgValueIntrinsic(Arg, 0, DIVariable(DVI->getVariable()),
|
||||
DIExpression(DVI->getExpression()), Inst);
|
||||
DbgVal->setDebugLoc(DVI->getDebugLoc());
|
||||
DIB.insertDbgValueIntrinsic(Arg, 0, DIVariable(DVI->getVariable()),
|
||||
DIExpression(DVI->getExpression()),
|
||||
DVI->getDebugLoc(), Inst);
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -4211,8 +4210,8 @@ bool SROA::splitAlloca(AllocaInst &AI, AllocaSlices &AS) {
|
||||
if (DbgDeclareInst *OldDDI = FindAllocaDbgDeclare(Piece.Alloca))
|
||||
OldDDI->eraseFromParent();
|
||||
|
||||
auto *NewDDI = DIB.insertDeclare(Piece.Alloca, Var, PieceExpr, &AI);
|
||||
NewDDI->setDebugLoc(DbgDecl->getDebugLoc());
|
||||
DIB.insertDeclare(Piece.Alloca, Var, PieceExpr, DbgDecl->getDebugLoc(),
|
||||
&AI);
|
||||
}
|
||||
}
|
||||
return Changed;
|
||||
|
@ -1117,10 +1117,9 @@ public:
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
Instruction *DbgVal = DIB->insertDbgValueIntrinsic(
|
||||
Arg, 0, DIVariable(DVI->getVariable()),
|
||||
DIExpression(DVI->getExpression()), Inst);
|
||||
DbgVal->setDebugLoc(DVI->getDebugLoc());
|
||||
DIB->insertDbgValueIntrinsic(Arg, 0, DIVariable(DVI->getVariable()),
|
||||
DIExpression(DVI->getExpression()),
|
||||
DVI->getDebugLoc(), Inst);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -1015,11 +1015,11 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,
|
||||
if (SExtInst *SExt = dyn_cast<SExtInst>(SI->getOperand(0)))
|
||||
ExtendedArg = dyn_cast<Argument>(SExt->getOperand(0));
|
||||
if (ExtendedArg)
|
||||
DbgVal = Builder.insertDbgValueIntrinsic(ExtendedArg, 0, DIVar, DIExpr, SI);
|
||||
DbgVal = Builder.insertDbgValueIntrinsic(ExtendedArg, 0, DIVar, DIExpr,
|
||||
DDI->getDebugLoc(), SI);
|
||||
else
|
||||
DbgVal = Builder.insertDbgValueIntrinsic(SI->getOperand(0), 0, DIVar,
|
||||
DIExpr, SI);
|
||||
DbgVal->setDebugLoc(DDI->getDebugLoc());
|
||||
DIExpr, DDI->getDebugLoc(), SI);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1035,9 +1035,8 @@ bool llvm::ConvertDebugDeclareToDebugValue(DbgDeclareInst *DDI,
|
||||
if (LdStHasDebugValue(DIVar, LI))
|
||||
return true;
|
||||
|
||||
Instruction *DbgVal =
|
||||
Builder.insertDbgValueIntrinsic(LI->getOperand(0), 0, DIVar, DIExpr, LI);
|
||||
DbgVal->setDebugLoc(DDI->getDebugLoc());
|
||||
Builder.insertDbgValueIntrinsic(LI->getOperand(0), 0, DIVar, DIExpr,
|
||||
DDI->getDebugLoc(), LI);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -1079,10 +1078,9 @@ bool llvm::LowerDbgDeclare(Function &F) {
|
||||
// This is a call by-value or some other instruction that
|
||||
// takes a pointer to the variable. Insert a *value*
|
||||
// intrinsic that describes the alloca.
|
||||
auto DbgVal = DIB.insertDbgValueIntrinsic(
|
||||
AI, 0, DIVariable(DDI->getVariable()),
|
||||
DIExpression(DDI->getExpression()), CI);
|
||||
DbgVal->setDebugLoc(DDI->getDebugLoc());
|
||||
DIB.insertDbgValueIntrinsic(AI, 0, DIVariable(DDI->getVariable()),
|
||||
DIExpression(DDI->getExpression()),
|
||||
DDI->getDebugLoc(), CI);
|
||||
}
|
||||
DDI->eraseFromParent();
|
||||
}
|
||||
@ -1128,8 +1126,7 @@ bool llvm::replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
|
||||
// Insert llvm.dbg.declare in the same basic block as the original alloca,
|
||||
// and remove old llvm.dbg.declare.
|
||||
BasicBlock *BB = AI->getParent();
|
||||
Builder.insertDeclare(NewAllocaAddress, DIVar, DIExpr, BB)
|
||||
->setDebugLoc(Loc);
|
||||
Builder.insertDeclare(NewAllocaAddress, DIVar, DIExpr, Loc, BB);
|
||||
DDI->eraseFromParent();
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user