diff options
Diffstat (limited to 'clang/lib/AST/ASTContext.cpp')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 0d1dc4e4d17..0528a58f894 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -3540,14 +3540,14 @@ bool ASTContext::QIdProtocolsAdoptObjCObjectProtocols(QualType QT, return false; if (!IDecl->hasDefinition()) return false; - ObjCInterfaceDecl::protocol_iterator PI = IDecl->protocol_begin(), - E = IDecl->protocol_end(); - if (PI == E) - return (IDecl->getSuperClass() - ? QIdProtocolsAdoptObjCObjectProtocols(QT, IDecl->getSuperClass()) - : false); - - for (; PI != E; ++PI) { + llvm::SmallPtrSet<ObjCProtocolDecl *, 8> InheritedProtocols; + CollectInheritedProtocols(IDecl, InheritedProtocols); + if (InheritedProtocols.empty()) + return false; + + for (llvm::SmallPtrSet<ObjCProtocolDecl*,8>::iterator PI = + InheritedProtocols.begin(), + E = InheritedProtocols.end(); PI != E; ++PI) { // If both the right and left sides have qualifiers. bool Adopts = false; for (ObjCObjectPointerType::qual_iterator I = OPT->qual_begin(), @@ -3558,9 +3558,7 @@ bool ASTContext::QIdProtocolsAdoptObjCObjectProtocols(QualType QT, break; } if (!Adopts) - return (IDecl->getSuperClass() - ? QIdProtocolsAdoptObjCObjectProtocols(QT, IDecl->getSuperClass()) - : false); + return false; } return true; } |

