]> granicus.if.org Git - clang/commitdiff
Harden CGDebugInfo::CreateType() a bit for cases where we couldn't generate type...
authorDouglas Gregor <dgregor@apple.com>
Tue, 30 Nov 2010 06:38:09 +0000 (06:38 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 30 Nov 2010 06:38:09 +0000 (06:38 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120401 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDebugInfo.cpp

index f01690665c658a86d5aea05f1d6108d9c59d3c94..d532214cc96b9d9a0f712fd014c0bfa3de9fbecb 100644 (file)
@@ -1103,6 +1103,9 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCObjectType *Ty,
 llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
                                      llvm::DIFile Unit) {
   ObjCInterfaceDecl *ID = Ty->getDecl();
+  if (!ID)
+    return llvm::DIType();
+  
   unsigned Tag = llvm::dwarf::DW_TAG_structure_type;
 
   // Get overall information about the record type for the debug info.
@@ -1145,6 +1148,9 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
   if (SClass) {
     llvm::DIType SClassTy =
       getOrCreateType(CGM.getContext().getObjCInterfaceType(SClass), Unit);
+    if (!SClassTy.isValid())
+      return llvm::DIType();
+    
     llvm::DIType InhTag =
       DebugFactory.CreateDerivedType(llvm::dwarf::DW_TAG_inheritance,
                                      Unit, "", Unit, 0, 0, 0,
@@ -1158,7 +1164,9 @@ llvm::DIType CGDebugInfo::CreateType(const ObjCInterfaceType *Ty,
   for (ObjCIvarDecl *Field = ID->all_declared_ivar_begin(); Field;
        Field = Field->getNextIvar(), ++FieldNo) {
     llvm::DIType FieldTy = getOrCreateType(Field->getType(), Unit);
-
+    if (!FieldTy.isValid())
+      return llvm::DIType();
+    
     llvm::StringRef FieldName = Field->getName();
 
     // Ignore unnamed fields.