diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-04-06 23:18:49 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2015-04-06 23:18:49 +0000 |
commit | 9d1cf4c1663ccd3c6b6168973215fad0f297ca35 (patch) | |
tree | e7900851342fcf73e633889a0a5344d3534598c1 /llvm/tools/opt/BreakpointPrinter.cpp | |
parent | b6030b9dbf1762877795fabbea7c7b4b7dbf627e (diff) | |
download | bcm5719-llvm-9d1cf4c1663ccd3c6b6168973215fad0f297ca35.tar.gz bcm5719-llvm-9d1cf4c1663ccd3c6b6168973215fad0f297ca35.zip |
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.
llvm-svn: 234255
Diffstat (limited to 'llvm/tools/opt/BreakpointPrinter.cpp')
-rw-r--r-- | llvm/tools/opt/BreakpointPrinter.cpp | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/llvm/tools/opt/BreakpointPrinter.cpp b/llvm/tools/opt/BreakpointPrinter.cpp index 3cbc0ae50f1..eb89b9bca80 100644 --- a/llvm/tools/opt/BreakpointPrinter.cpp +++ b/llvm/tools/opt/BreakpointPrinter.cpp @@ -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); |