diff options
author | Steve Naroff <snaroff@apple.com> | 2008-09-30 14:38:43 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-09-30 14:38:43 +0000 |
commit | 037cda5282e73f30bb09fa316047554b1af1e2ef (patch) | |
tree | 714947b521280bafdcbe42a8e2beef39448d7830 /lib/Sema/SemaDeclObjC.cpp | |
parent | 33e2c5f8b568eb475a7e94d8cd557cde1768f92b (diff) |
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.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56843 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclObjC.cpp')
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp index f98eeb6112..05c3bc78b3 100644 --- a/lib/Sema/SemaDeclObjC.cpp +++ b/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) { |