IR: Stop using DIDescriptor::is*() and auto-casting
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Mon, 6 Apr 2015 23:18:49 +0000 (23:18 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Mon, 6 Apr 2015 23:18:49 +0000 (23:18 +0000)
commit1545953510c396585f6bcadf55357d050ae0a113
tree03eeefcc38b40b2748555f685f7cbba52e991c38
parent310c640b641dfafd3a4a17d4dd23dc46b5f8e21d
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
include/llvm/IR/DebugInfo.h
lib/IR/DIBuilder.cpp
lib/IR/DebugInfo.cpp
lib/IR/DebugLoc.cpp
lib/Linker/LinkModules.cpp
tools/opt/BreakpointPrinter.cpp
unittests/Transforms/Utils/Cloning.cpp