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
This commit is contained in:
Fariborz Jahanian 2010-02-25 18:24:33 +00:00
Родитель 333de066a0
Коммит b2f8121656
2 изменённых файлов: 33 добавлений и 1 удалений

Просмотреть файл

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

Просмотреть файл

@ -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;
}