Lookup methods in the global pool even when a statically typed object's class interface isn't in scope!
As the comment in the code indicates, I'm not fond of this. Nevertheless, gcc compat is a goal.
Here is the case I'm talking about...
#import <Foundation/Foundation.h>
@interface AnyClass : NSObject
- (NSRect)rect;
@end
@class Helicopter;
static void func(Helicopter *obj) {
NSRect r = [obj rect];
}
...before this patch, we would warn/error. With this patch, everything "just works".
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44682 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/Sema/SemaExpr.cpp b/Sema/SemaExpr.cpp
index 56b792e..e7102aa 100644
--- a/Sema/SemaExpr.cpp
+++ b/Sema/SemaExpr.cpp
@@ -2245,6 +2245,10 @@
if (ObjcImplementationDecl *ImpDecl =
ObjcImplementations[ClassDecl->getIdentifier()])
Method = ImpDecl->lookupInstanceMethod(Sel);
+ // If we still haven't found a method, look in the global pool.
+ // I am not fond of this behavior, however we conform to what gcc does.
+ if (!Method)
+ Method = InstanceMethodPool[Sel].Method;
}
if (!Method) {
Diag(lbrac, diag::warn_method_not_found, std::string("-"), Sel.getName(),