From: Douglas Gregor Date: Mon, 19 Apr 2010 20:09:36 +0000 (+0000) Subject: When normal name lookup to disambiguiate an Objective-C message send X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ed46442adea496dfb01dbbe53ace583d5614e79a;p=clang When normal name lookup to disambiguiate an Objective-C message send fails to find anything, perform ivar lookup and, if we find one, consider this an instance message. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101810 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprObjC.cpp b/lib/Sema/SemaExprObjC.cpp index c0e04fd6d4..ad95f00d24 100644 --- a/lib/Sema/SemaExprObjC.cpp +++ b/lib/Sema/SemaExprObjC.cpp @@ -505,6 +505,16 @@ Sema::ObjCMessageKind Sema::getObjCMessageKind(Scope *S, switch (Result.getResultKind()) { case LookupResult::NotFound: + // Normal name lookup didn't find anything. If we're in an + // Objective-C method, look for ivars. If we find one, we're done! + // FIXME: This is a hack. Ivar lookup should be part of normal lookup. + if (ObjCMethodDecl *Method = getCurMethodDecl()) { + ObjCInterfaceDecl *ClassDeclared; + if (Method->getClassInterface()->lookupInstanceVariable(Name, + ClassDeclared)) + return ObjCInstanceMessage; + } + // Break out; we'll perform typo correction below. break;