Harden CGDebugInfo::CreateType() a bit for cases where we couldn't generate type info for its component types

llvm-svn: 120401
This commit is contained in:
Douglas Gregor 2010-11-30 06:38:09 +00:00
parent e3ea1cba79
commit 2f53a0bbf2
1 changed files with 9 additions and 1 deletions

View 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.