mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
IR: Stop using DIDescriptor::is*() and auto-casting
`DIDescriptor`'s subclasses allow construction from incompatible pointers, and `DIDescriptor` defines a series of `isa<>`-like functions (e.g., `isCompileUnit()` instead of `isa<MDCompileUnit>()`) that clients tend to use like this: if (DICompileUnit(N).isCompileUnit()) foo(DICompileUnit(N)); These construction patterns work together to make `DIDescriptor` behave differently from normal pointers. Instead, use built-in `isa<>`, `dyn_cast<>`, etc., and only build `DIDescriptor`s from pointers that are valid for their type. I've split this into a few commits for different parts of LLVM and clang (to decrease the patch size and increase the chance of review). Generally the changes I made were NFC, but in a few places I made things stricter if it made sense from the surrounded code. Eventually a follow-up commit will remove the API for the "old" way. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234255 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -30,14 +30,12 @@ struct BreakpointPrinter : public ModulePass {
|
||||
BreakpointPrinter(raw_ostream &out) : ModulePass(ID), Out(out) {}
|
||||
|
||||
void getContextName(DIDescriptor Context, std::string &N) {
|
||||
if (Context.isNameSpace()) {
|
||||
DINameSpace NS(Context);
|
||||
if (DINameSpace NS = dyn_cast<MDNamespace>(Context)) {
|
||||
if (!NS.getName().empty()) {
|
||||
getContextName(NS.getContext(), N);
|
||||
N = N + NS.getName().str() + "::";
|
||||
}
|
||||
} else if (Context.isType()) {
|
||||
DIType TY(Context);
|
||||
} else if (DIType TY = dyn_cast<MDType>(Context)) {
|
||||
if (!TY.getName().empty()) {
|
||||
getContextName(TY.getContext().resolve(TypeIdentifierMap), N);
|
||||
N = N + TY.getName().str() + "::";
|
||||
@@ -55,9 +53,7 @@ struct BreakpointPrinter : public ModulePass {
|
||||
if (NamedMDNode *NMD = M.getNamedMetadata("llvm.dbg.sp"))
|
||||
for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
|
||||
std::string Name;
|
||||
DISubprogram SP(NMD->getOperand(i));
|
||||
assert((!SP || SP.isSubprogram()) &&
|
||||
"A MDNode in llvm.dbg.sp should be null or a DISubprogram.");
|
||||
DISubprogram SP = cast_or_null<MDSubprogram>(NMD->getOperand(i));
|
||||
if (!SP)
|
||||
continue;
|
||||
getContextName(SP.getContext().resolve(TypeIdentifierMap), Name);
|
||||
|
Reference in New Issue
Block a user