summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclObjC.cpp
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2008-09-30 14:38:43 +0000
committerSteve Naroff <snaroff@apple.com>2008-09-30 14:38:43 +0000
commit4a82d815de070537545538ac1fbfaafa48cb97bf (patch)
tree4a617b7ebeeb18991d4c9a35943ddd8ee19ebb4f /clang/lib/Sema/SemaDeclObjC.cpp
parenta459f128621bf5652336dea5e2513688b811f476 (diff)
downloadbcm5719-llvm-4a82d815de070537545538ac1fbfaafa48cb97bf.tar.gz
bcm5719-llvm-4a82d815de070537545538ac1fbfaafa48cb97bf.zip
Fix <rdar://problem/6191148> [sema] Objective-C method lookup (at global scope) fails to handle overloaded selectors properly.
Long standing bug in Sema::ActOnInstanceMessage(). We now warn when messaging an "id" with multiple method signatures in scope. The diags are a little verbose, however they can be streamlined if necessary. llvm-svn: 56843
Diffstat (limited to 'clang/lib/Sema/SemaDeclObjC.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclObjC.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp
index f98eeb61125..05c3bc78b31 100644
--- a/clang/lib/Sema/SemaDeclObjC.cpp
+++ b/clang/lib/Sema/SemaDeclObjC.cpp
@@ -776,6 +776,21 @@ void Sema::AddInstanceMethodToGlobalPool(ObjCMethodDecl *Method) {
}
}
+ObjCMethodDecl *Sema::LookupInstanceMethodInGlobalPool(Selector Sel,
+ SourceRange R) {
+ ObjCMethodList &MethList = InstanceMethodPool[Sel];
+
+ if (MethList.Method && MethList.Next) {
+ Diag(R.getBegin(), diag::warn_multiple_method_decl, Sel.getName(), R);
+ Diag(MethList.Method->getLocStart(), diag::warn_using_decl,
+ MethList.Method->getSourceRange());
+ for (ObjCMethodList *Next = MethList.Next; Next; Next = Next->Next)
+ Diag(Next->Method->getLocStart(), diag::warn_also_found_decl,
+ Next->Method->getSourceRange());
+ }
+ return MethList.Method;
+}
+
void Sema::AddFactoryMethodToGlobalPool(ObjCMethodDecl *Method) {
ObjCMethodList &FirstMethod = FactoryMethodPool[Method->getSelector()];
if (!FirstMethod.Method) {
OpenPOWER on IntegriCloud