Check null NameMDNode elements.
authorDevang Patel <dpatel@apple.com>
Thu, 30 Jul 2009 01:02:04 +0000 (01:02 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 30 Jul 2009 01:02:04 +0000 (01:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77559 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Metadata.h
lib/VMCore/AsmWriter.cpp

index 7977c820846f2007d80c38df0d7ea28081c5d57a..0515979c8bf8e8e644f38008d4c5afa209732e5c 100644 (file)
@@ -168,7 +168,7 @@ public:
   }
 
   operator MetadataBase*() const {
-   return cast<MetadataBase>(getValPtr());
+   return dyn_cast_or_null<MetadataBase>(getValPtr());
   }
 };
 
index bfdb0489b5fedacd20b405a7d8aeb39e4966054f..8824fd9244f915673ed85c4e019fd6217183e1bc 100644 (file)
@@ -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);