зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
333de066a0
Коммит
b2f8121656
|
@ -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;
|
||||
}
|
||||
|
Загрузка…
Ссылка в новой задаче