summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaExprObjC.cpp6
-rw-r--r--clang/test/SemaObjC/method-lookup-2.m22
2 files changed, 25 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index e3d2074c0e2..5be84607b2a 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -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));
diff --git a/clang/test/SemaObjC/method-lookup-2.m b/clang/test/SemaObjC/method-lookup-2.m
index 4ebdb8e4524..9939e349547 100644
--- a/clang/test/SemaObjC/method-lookup-2.m
+++ b/clang/test/SemaObjC/method-lookup-2.m
@@ -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
OpenPOWER on IntegriCloud