Objective-C. Fixes a bogus warning on unimplemented

selectors because we were not going through entire
elements in list of all implemented selectors. 
// rdar://16428638

llvm-svn: 204852
This commit is contained in:
Fariborz Jahanian 2014-03-26 20:59:26 +00:00
parent 84aa5e555f
commit ec762bda73
2 changed files with 33 additions and 5 deletions

View File

@ -2402,11 +2402,15 @@ ObjCMethodDecl *Sema::LookupImplementedMethodInGlobalPool(Selector Sel) {
return 0;
GlobalMethods &Methods = Pos->second;
if (Methods.first.Method && Methods.first.Method->isDefined())
return Methods.first.Method;
if (Methods.second.Method && Methods.second.Method->isDefined())
return Methods.second.Method;
for (const ObjCMethodList *Method = &Methods.first; Method;
Method = Method->getNext())
if (Method->Method && Method->Method->isDefined())
return Method->Method;
for (const ObjCMethodList *Method = &Methods.second; Method;
Method = Method->getNext())
if (Method->Method && Method->Method->isDefined())
return Method->Method;
return 0;
}

View File

@ -110,3 +110,27 @@ extern SEL MySelector(SEL s);
@interface USETextSub : USEText
- (int) invalidate : (id)arg;
@end
// rdar://16428638
@interface I16428638
- (int) compare: (I16428638 *) arg1; // commenting out this line avoids the warning
@end
@interface J16428638
- (int) compare: (J16428638 *) arg1;
@end
@implementation J16428638
- (void)method {
SEL s = @selector(compare:); // spurious warning
(void)s;
}
- (int) compare: (J16428638 *) arg1 {
return 0;
}
@end
void test16428638() {
SEL s = @selector(compare:);
(void)s;
}