diff --git a/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp
index 14bb962..ff62b46 100644
--- a/lib/CodeGen/DwarfWriter.cpp
+++ b/lib/CodeGen/DwarfWriter.cpp
@@ -1413,7 +1413,7 @@
       Ty->AddUInt(DW_AT_prototyped, DW_FORM_flag, 1);
       // Add return type.
       Ty->AddDIEntry(DW_AT_type, DW_FORM_ref4,
-                     NewType(Context, cast<TypeDesc>(Elements[0]), Unit));
+                     NewType(Context, dyn_cast<TypeDesc>(Elements[0]), Unit));
       
       // Add arguments.
       for(unsigned i = 1, N = Elements.size(); i < N; ++i) {
diff --git a/lib/CodeGen/MachineDebugInfo.cpp b/lib/CodeGen/MachineDebugInfo.cpp
index 54fb1b9..fa2f57f 100644
--- a/lib/CodeGen/MachineDebugInfo.cpp
+++ b/lib/CodeGen/MachineDebugInfo.cpp
@@ -223,16 +223,21 @@
     Field = getGlobalVariable(C);
   }
   virtual void Apply(std::vector<DebugInfoDesc *> &Field) {
+    Field.resize(0);
     Constant *C = CI->getOperand(I++);
     GlobalVariable *GV = getGlobalVariable(C);
-    Field.resize(0);
-    // Have to be able to deal with the empty array case (zero initializer)
-    if (!GV->hasInitializer()) return;
-    if (ConstantArray *CA = dyn_cast<ConstantArray>(GV->getInitializer())) {
-      for (unsigned i = 0, N = CA->getNumOperands(); i < N; ++i) {
-        GlobalVariable *GVE = getGlobalVariable(CA->getOperand(i));
-        DebugInfoDesc *DE = DR.Deserialize(GVE);
-        Field.push_back(DE);
+    if (GV->hasInitializer()) {
+      if (ConstantArray *CA = dyn_cast<ConstantArray>(GV->getInitializer())) {
+        for (unsigned i = 0, N = CA->getNumOperands(); i < N; ++i) {
+          GlobalVariable *GVE = getGlobalVariable(CA->getOperand(i));
+          DebugInfoDesc *DE = DR.Deserialize(GVE);
+          Field.push_back(DE);
+        }
+      } else if (GV->getInitializer()->isNullValue()) {
+        if (const ArrayType *T =
+            dyn_cast<ArrayType>(GV->getType()->getElementType())) {
+          Field.resize(T->getNumElements());
+        }
       }
     }
   }
@@ -305,9 +310,13 @@
     std::vector<Constant *> ArrayElements;
 
     for (unsigned i = 0, N = Field.size(); i < N; ++i) {
-      GlobalVariable *GVE = SR.Serialize(Field[i]);
-      Constant *CE = ConstantExpr::getCast(GVE, EmptyTy);
-      ArrayElements.push_back(cast<Constant>(CE));
+      if (DebugInfoDesc *Element = Field[i]) {
+        GlobalVariable *GVE = SR.Serialize(Element);
+        Constant *CE = ConstantExpr::getCast(GVE, EmptyTy);
+        ArrayElements.push_back(cast<Constant>(CE));
+      } else {
+        ArrayElements.push_back(ConstantPointerNull::get(EmptyTy));
+      }
     }
     
     Constant *CA = ConstantArray::get(AT, ArrayElements);
