Objective-C. Handle case of multiple class methods

found in global pool as well. rdar://16808765

llvm-svn: 215603
This commit is contained in:
Fariborz Jahanian 2014-08-13 23:38:04 +00:00
parent ebf09360ec
commit d288fad374
2 changed files with 13 additions and 2 deletions

View File

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

View File

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