diff options
Diffstat (limited to 'source/Symbol/ClangASTImporter.cpp')
-rw-r--r-- | source/Symbol/ClangASTImporter.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/source/Symbol/ClangASTImporter.cpp b/source/Symbol/ClangASTImporter.cpp index a925f808f858..64a7323d25cf 100644 --- a/source/Symbol/ClangASTImporter.cpp +++ b/source/Symbol/ClangASTImporter.cpp @@ -274,7 +274,10 @@ ClangASTImporter::CompleteObjCInterfaceDecl (clang::ObjCInterfaceDecl *interface if (minion_sp) minion_sp->ImportDefinitionTo(interface_decl, decl_origin.decl); - + + if (ObjCInterfaceDecl *super_class = interface_decl->getSuperClass()) + RequireCompleteType(clang::QualType(super_class->getTypeForDecl(), 0)); + return true; } @@ -286,7 +289,12 @@ ClangASTImporter::RequireCompleteType (clang::QualType type) if (const TagType *tag_type = type->getAs<TagType>()) { - return CompleteTagDecl(tag_type->getDecl()); + TagDecl *tag_decl = tag_type->getDecl(); + + if (tag_decl->getDefinition() || tag_decl->isBeingDefined()) + return true; + + return CompleteTagDecl(tag_decl); } if (const ObjCObjectType *objc_object_type = type->getAs<ObjCObjectType>()) { |