]> granicus.if.org Git - clang/commitdiff
Fix <rdar://problem/6614945> method not found.
authorSteve Naroff <snaroff@apple.com>
Thu, 26 Feb 2009 18:16:19 +0000 (18:16 +0000)
committerSteve Naroff <snaroff@apple.com>
Thu, 26 Feb 2009 18:16:19 +0000 (18:16 +0000)
This was a fairly recent regression.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65547 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprObjC.cpp
test/SemaObjC/method-lookup-2.m

index e3d2074c0e273c161a243d6d601201fea3930cdf..5be84607b2a4d31fff1b091a29282763f3e23567 100644 (file)
@@ -395,10 +395,10 @@ Sema::ExprResult Sema::ActOnInstanceMessage(ExprTy *receiver, Selector Sel,
       }
       if (Method && DiagnoseUseOfDecl(Method, receiverLoc))
         return true;
-    } else {
-      // We're not in a method context, look for any factory method named 'Sel'.
-      Method = FactoryMethodPool[Sel].Method;
     }
+    // Look for any factory method named 'Sel'.
+    if (!Method)
+      Method = FactoryMethodPool[Sel].Method;
     if (!Method)
       Method = LookupInstanceMethodInGlobalPool(
                                Sel, SourceRange(lbrac,rbrac));
index 4ebdb8e4524d2be25a88a273a300a3d6e5fc917d..9939e349547a7e32df546d0062e5cd2ebc50fff4 100644 (file)
@@ -2,7 +2,10 @@
 typedef signed char BOOL;
 
 @protocol NSObject
++ alloc;
+- init;
 - (BOOL) isEqual:(id) object;
+- (Class)class;
 @end
 
 @interface NSObject < NSObject > {} @end
@@ -38,3 +41,22 @@ extern NSString *const NSWillBecomeMultiThreadedNotification;
   return[[self sharedInstance] run];
 }
 @end
+
+@interface XX : NSObject
+
++ classMethod;
+
+@end
+
+@interface YY : NSObject
+- whatever;
+@end
+
+@implementation YY 
+
+- whatever {
+  id obj = [[XX alloc] init];
+  [[obj class] classMethod];
+}
+
+@end