From: Devang Patel Date: Thu, 30 Jul 2009 01:02:04 +0000 (+0000) Subject: Check null NameMDNode elements. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=e8861b840bf388945d876f97cf2ff6fcbf310790;p=oota-llvm.git Check null NameMDNode elements. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77559 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Metadata.h b/include/llvm/Metadata.h index 7977c820846..0515979c8bf 100644 --- a/include/llvm/Metadata.h +++ b/include/llvm/Metadata.h @@ -168,7 +168,7 @@ public: } operator MetadataBase*() const { - return cast(getValPtr()); + return dyn_cast_or_null(getValPtr()); } }; diff --git a/lib/VMCore/AsmWriter.cpp b/lib/VMCore/AsmWriter.cpp index bfdb0489b5f..8824fd9244f 100644 --- a/lib/VMCore/AsmWriter.cpp +++ b/lib/VMCore/AsmWriter.cpp @@ -647,7 +647,8 @@ void SlotTracker::processModule() { const NamedMDNode *NMD = I; for (unsigned i = 0, e = NMD->getNumElements(); i != e; ++i) { MDNode *MD = dyn_cast_or_null(NMD->getElement(i)); - CreateMetadataSlot(MD); + if (MD) + CreateMetadataSlot(MD); } } @@ -1392,7 +1393,7 @@ void AssemblyWriter::printModule(const Module *M) { Out << "!" << NMD->getName() << " = !{"; for (unsigned i = 0, e = NMD->getNumElements(); i != e; ++i) { if (i) Out << ", "; - MDNode *MD = cast(NMD->getElement(i)); + MDNode *MD = dyn_cast_or_null(NMD->getElement(i)); Out << '!' << Machine.getMetadataSlot(MD); } Out << "}\n"; @@ -2047,8 +2048,11 @@ void Value::print(raw_ostream &OS, AssemblyAnnotationWriter *AAW) const { OS << "!" << N->getName() << " = !{"; for (unsigned i = 0, e = N->getNumElements(); i != e; ++i) { if (i) OS << ", "; - MDNode *MD = cast(N->getElement(i)); - OS << '!' << SlotTable.getMetadataSlot(MD); + MDNode *MD = dyn_cast_or_null(N->getElement(i)); + if (MD) + OS << '!' << SlotTable.getMetadataSlot(MD); + else + OS << "null"; } OS << "}\n"; WriteMDNodes(OS, TypePrinter, SlotTable);