summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2009-07-30 01:02:04 +0000
committerDevang Patel <dpatel@apple.com>2009-07-30 01:02:04 +0000
commit847fcacd48ee14ba319fea6c8f3ecf8f40214244 (patch)
treef1201b3686efed52ea63ca6b5116025460d15332
parent652529ec9c6ed91e7724a78e9f46c6c4802eda4a (diff)
downloadbcm5719-llvm-847fcacd48ee14ba319fea6c8f3ecf8f40214244.tar.gz
bcm5719-llvm-847fcacd48ee14ba319fea6c8f3ecf8f40214244.zip
Check null NameMDNode elements.
llvm-svn: 77559
-rw-r--r--llvm/include/llvm/Metadata.h2
-rw-r--r--llvm/lib/VMCore/AsmWriter.cpp12
2 files changed, 9 insertions, 5 deletions
diff --git a/llvm/include/llvm/Metadata.h b/llvm/include/llvm/Metadata.h
index 7977c820846..0515979c8bf 100644
--- a/llvm/include/llvm/Metadata.h
+++ b/llvm/include/llvm/Metadata.h
@@ -168,7 +168,7 @@ public:
}
operator MetadataBase*() const {
- return cast<MetadataBase>(getValPtr());
+ return dyn_cast_or_null<MetadataBase>(getValPtr());
}
};
diff --git a/llvm/lib/VMCore/AsmWriter.cpp b/llvm/lib/VMCore/AsmWriter.cpp
index bfdb0489b5f..8824fd9244f 100644
--- a/llvm/lib/VMCore/AsmWriter.cpp
+++ b/llvm/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<MDNode>(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<MDNode>(NMD->getElement(i));
+ MDNode *MD = dyn_cast_or_null<MDNode>(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<MDNode>(N->getElement(i));
- OS << '!' << SlotTable.getMetadataSlot(MD);
+ MDNode *MD = dyn_cast_or_null<MDNode>(N->getElement(i));
+ if (MD)
+ OS << '!' << SlotTable.getMetadataSlot(MD);
+ else
+ OS << "null";
}
OS << "}\n";
WriteMDNodes(OS, TypePrinter, SlotTable);
OpenPOWER on IntegriCloud