[Objective-C Sema]. Don't warn about use of
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 19 Feb 2015 21:52:41 +0000 (21:52 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 19 Feb 2015 21:52:41 +0000 (21:52 +0000)
property accessors in @selector not implemented
because they will be auto-synthesized. rdar://16607480

llvm-svn: 229919

clang/lib/Sema/SemaDeclObjC.cpp
clang/test/SemaObjC/selector-3.m

index 1aec327..33d9e95 100644 (file)
@@ -2441,12 +2441,16 @@ ObjCMethodDecl *Sema::LookupImplementedMethodInGlobalPool(Selector Sel) {
   GlobalMethods &Methods = Pos->second;
   for (const ObjCMethodList *Method = &Methods.first; Method;
        Method = Method->getNext())
-    if (Method->getMethod() && Method->getMethod()->isDefined())
+    if (Method->getMethod() &&
+        (Method->getMethod()->isDefined() ||
+         Method->getMethod()->isPropertyAccessor()))
       return Method->getMethod();
   
   for (const ObjCMethodList *Method = &Methods.second; Method;
        Method = Method->getNext())
-    if (Method->getMethod() && Method->getMethod()->isDefined())
+    if (Method->getMethod() &&
+        (Method->getMethod()->isDefined() ||
+         Method->getMethod()->isPropertyAccessor()))
       return Method->getMethod();
   return nullptr;
 }
index dfd216a..80332ec 100644 (file)
@@ -134,3 +134,24 @@ void test16428638() {
     SEL s = @selector(compare:);
     (void)s;
 }
+
+// rdar://16607480
+@class NSString;
+@interface SELCanary : NSObject
+@property (readonly, nonatomic) NSString *name;
+@property (nonatomic, getter = isHidden) char hidden;
+@property (nonatomic, copy, getter = hasFish, setter = setFish:) NSString *ridiculousFish;
+@end
+
+@implementation SELCanary
+- (void) Meth {
+ SEL properties[] = {
+  @selector(name),
+  @selector(isHidden),
+  @selector(setHidden:),
+  @selector(hasFish),
+  @selector(setFish:)
+ };
+}
+@end
+