diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-11-30 06:38:09 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-11-30 06:38:09 +0000 |
commit | a6a28972472d002ea9edd095f966c1eaaa9cb69b (patch) | |
tree | b972dc5528dcf334a894dd443179f47261b36e2f /lib/CodeGen/CGDebugInfo.cpp | |
parent | bbc8175c39f85465475c9f96048d8107848e3e6f (diff) |
Harden CGDebugInfo::CreateType() a bit for cases where we couldn't generate type info for its component types
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120401 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index f01690665c..d532214cc9 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -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. |