forked from OSchip/llvm-project
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:
parent
e3ea1cba79
commit
2f53a0bbf2
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue