From: Fariborz Jahanian Date: Thu, 25 Feb 2010 18:24:33 +0000 (+0000) Subject: Forgot to include nested protocols in collection, resulting in X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b2f812165676230bce5d0215e49a4749c451ca9c;p=clang Forgot to include nested protocols in collection, resulting in bogus warning. Fixes radar 7682116. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@97157 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 202e3370b6..22871a4a68 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -945,9 +945,11 @@ void ASTContext::CollectInheritedProtocols(const Decl *CDecl, ObjCProtocolDecl *Proto = (*P); Protocols.insert(Proto); for (ObjCProtocolDecl::protocol_iterator P = Proto->protocol_begin(), - PE = Proto->protocol_end(); P != PE; ++P) + PE = Proto->protocol_end(); P != PE; ++P) { + Protocols.insert(*P); CollectInheritedProtocols(*P, Protocols); } + } // Categories of this Interface. for (const ObjCCategoryDecl *CDeclChain = OI->getCategoryList(); diff --git a/test/SemaObjC/conditional-expr-7.m b/test/SemaObjC/conditional-expr-7.m new file mode 100644 index 0000000000..3ddf3d7356 --- /dev/null +++ b/test/SemaObjC/conditional-expr-7.m @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -fsyntax-only -verify %s +// radar 7682116 + +@interface Super @end + +@interface NSArray : Super @end +@interface NSSet : Super @end + +@protocol MyProtocol +- (void)myMethod; +@end + +@protocol MyProtocol2 +- (void)myMethod2; +@end + +@interface NSArray() +@end + +@interface NSSet() +@end + +int main (int argc, const char * argv[]) { + NSArray *array = (void*)0; + NSSet *set = (void*)0; + id instance = (argc) ? array : set; + instance = (void*)0; + return 0; +} +