forked from OSchip/llvm-project
Objective-C. When multiple nullary selectors are found in
global pool in the course of method selection for a messaging expression, select one with the most general return type of 'id'. This is to remove type-mismatch warning (which is useless) as result of random selection of method with more restrictive return type. rdar://18095772 llvm-svn: 216560
This commit is contained in:
parent
1d6082ff17
commit
180d76b408
|
@ -5743,10 +5743,20 @@ ObjCMethodDecl *Sema::SelectBestMethod(Selector Sel, MultiExprArg Args,
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else
|
||||
} else {
|
||||
// Check for extra arguments to non-variadic methods.
|
||||
if (Args.size() != NumNamedArgs)
|
||||
Match = false;
|
||||
else if (Match && NumNamedArgs == 0 && Methods.size() > 1) {
|
||||
// Special case when selectors have no argument. In this case, select
|
||||
// one with the most general result type of 'id'.
|
||||
for (unsigned b = 0, e = Methods.size(); b < e; b++) {
|
||||
QualType ReturnT = Methods[b]->getReturnType();
|
||||
if (ReturnT->isObjCIdType())
|
||||
return Methods[b];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Match)
|
||||
return Method;
|
||||
|
|
|
@ -40,3 +40,24 @@
|
|||
void func( Class c, float g ) {
|
||||
[c clsMethod: &g];
|
||||
}
|
||||
|
||||
// rdar://18095772
|
||||
@protocol NSKeyedArchiverDelegate @end
|
||||
|
||||
@interface NSKeyedArchiver
|
||||
@property (assign) id <NSKeyedArchiverDelegate> delegate;
|
||||
@end
|
||||
|
||||
@interface NSConnection
|
||||
@property (assign) id delegate;
|
||||
@end
|
||||
|
||||
extern id NSApp;
|
||||
|
||||
@interface AppDelegate
|
||||
@end
|
||||
|
||||
AppDelegate* GetDelegate()
|
||||
{
|
||||
return [NSApp delegate];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue