From: Fariborz Jahanian Date: Wed, 13 Aug 2014 23:38:04 +0000 (+0000) Subject: Objective-C. Handle case of multiple class methods X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cd21fe6e8a43670110164f7ad6dfa4b12571931e;p=clang Objective-C. Handle case of multiple class methods found in global pool as well. rdar://16808765 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215603 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index 80ce9baee7..0facca0391 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -2420,7 +2420,7 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver, receiverIsId); if (Method) if (ObjCMethodDecl *BestMethod = - SelectBestMethod(Sel, ArgsIn, Method->isInstanceMethod())) + SelectBestMethod(Sel, ArgsIn, Method->isInstanceMethod())) Method = BestMethod; } else if (ReceiverType->isObjCClassType() || ReceiverType->isObjCQualifiedClassType()) { @@ -2473,6 +2473,10 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver, << Sel << SourceRange(LBracLoc, RBracLoc); } } + if (Method) + if (ObjCMethodDecl *BestMethod = + SelectBestMethod(Sel, ArgsIn, Method->isInstanceMethod())) + Method = BestMethod; } } } diff --git a/test/SemaObjC/resolve-method-in-global-pool.m b/test/SemaObjC/resolve-method-in-global-pool.m index 38a2bb7ca5..2c5dde4cba 100644 --- a/test/SemaObjC/resolve-method-in-global-pool.m +++ b/test/SemaObjC/resolve-method-in-global-pool.m @@ -4,7 +4,9 @@ // rdar://16808765 -@interface NSObject @end +@interface NSObject ++ (void)clsMethod:(int*)arg; +@end @class NSDictionary; @class NSError; @@ -18,6 +20,7 @@ @required - (void)getDonuts:(void (^)(NSDictionary *))replyBlock; - (void)getCake:(float*)arg, ...; ++ (void)clsMethod:(float*)arg; @end @implementation Foo @@ -33,3 +36,7 @@ [(id)0 getCake: &g, 1,3.14]; } @end + +void func( Class c, float g ) { + [c clsMethod: &g]; +}