aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGDebugInfo.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-11-30 06:38:09 +0000
committerDouglas Gregor <dgregor@apple.com>2010-11-30 06:38:09 +0000
commita6a28972472d002ea9edd095f966c1eaaa9cb69b (patch)
treeb972dc5528dcf334a894dd443179f47261b36e2f /lib/CodeGen/CGDebugInfo.cpp
parentbbc8175c39f85465475c9f96048d8107848e3e6f (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.cpp10
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.