From 9d1cf4c1663ccd3c6b6168973215fad0f297ca35 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Mon, 6 Apr 2015 23:18:49 +0000 Subject: 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()`) 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 --- llvm/lib/IR/DebugLoc.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'llvm/lib/IR/DebugLoc.cpp') diff --git a/llvm/lib/IR/DebugLoc.cpp b/llvm/lib/IR/DebugLoc.cpp index 95f6d67c542..df4802d9549 100644 --- a/llvm/lib/IR/DebugLoc.cpp +++ b/llvm/lib/IR/DebugLoc.cpp @@ -50,8 +50,7 @@ MDNode *DebugLoc::getInlinedAtScope() const { DebugLoc DebugLoc::getFnDebugLoc() const { // FIXME: Add a method on \a MDLocation that does this work. const MDNode *Scope = getInlinedAtScope(); - DISubprogram SP = getDISubprogram(Scope); - if (SP.isSubprogram()) + if (DISubprogram SP = getDISubprogram(Scope)) return DebugLoc::get(SP.getScopeLineNumber(), 0, SP); return DebugLoc(); @@ -87,13 +86,8 @@ void DebugLoc::print(raw_ostream &OS) const { return; // Print source line info. - DIScope Scope(getScope()); - assert((!Scope || Scope.isScope()) && - "Scope of a DebugLoc should be null or a DIScope."); - if (Scope) - OS << Scope.getFilename(); - else - OS << ""; + DIScope Scope = cast(getScope()); + OS << Scope.getFilename(); OS << ':' << getLine(); if (getCol() != 0) OS << ':' << getCol(); -- cgit v1.2.3