mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 16:17:17 +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:
@@ -1269,14 +1269,14 @@ void ModuleLinker::stripReplacedSubprograms() {
|
||||
if (!CompileUnits)
|
||||
return;
|
||||
for (unsigned I = 0, E = CompileUnits->getNumOperands(); I != E; ++I) {
|
||||
DICompileUnit CU(CompileUnits->getOperand(I));
|
||||
DICompileUnit CU = cast<MDCompileUnit>(CompileUnits->getOperand(I));
|
||||
assert(CU && "Expected valid compile unit");
|
||||
|
||||
DITypedArray<DISubprogram> SPs(CU.getSubprograms());
|
||||
MDSubprogramArray SPs(CU.getSubprograms());
|
||||
assert(SPs && "Expected valid subprogram array");
|
||||
|
||||
for (unsigned S = 0, SE = SPs.getNumElements(); S != SE; ++S) {
|
||||
DISubprogram SP = SPs.getElement(S);
|
||||
for (unsigned S = 0, SE = SPs.size(); S != SE; ++S) {
|
||||
DISubprogram SP = SPs[S];
|
||||
if (!SP || !SP.getFunction() || !Functions.count(SP.getFunction()))
|
||||
continue;
|
||||
|
||||
|
Reference in New Issue
Block a user