Forgot to include nested protocols in collection, resulting in

bogus warning. Fixes radar 7682116.

llvm-svn: 97157
This commit is contained in:
Fariborz Jahanian 2010-02-25 18:24:33 +00:00
parent 048b6485b7
commit 8e3b9db27f
2 changed files with 33 additions and 1 deletions

View File

@ -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();

View File

@ -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 <MyProtocol>
- (void)myMethod2;
@end
@interface NSArray() <MyProtocol2>
@end
@interface NSSet() <MyProtocol>
@end
int main (int argc, const char * argv[]) {
NSArray *array = (void*)0;
NSSet *set = (void*)0;
id <MyProtocol> instance = (argc) ? array : set;
instance = (void*)0;
return 0;
}