]> granicus.if.org Git - clang/commitdiff
objective-c: don't involve properties when checking
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 5 Jul 2012 22:26:07 +0000 (22:26 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 5 Jul 2012 22:26:07 +0000 (22:26 +0000)
under -Wsuper-class-method-mismatch for method
mismatches in current and suprt class.
// rdar://11793793

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

lib/Sema/SemaDeclObjC.cpp
test/SemaObjC/nowarn-superclass-method-mismatch.m [new file with mode: 0644]

index 87acd1e63d0c007a61b95a5382cc7c29a980fbb9..d67fb5002a18100563e1c7abdfddc7d59aadd5fd 100644 (file)
@@ -2700,7 +2700,8 @@ void Sema::CheckObjCMethodOverrides(ObjCMethodDecl *ObjCMethod,
               isa<ObjCProtocolDecl>(overridden->getDeclContext()));
     
     if (CurrentClass && overridden->getDeclContext() != CurrentClass &&
-        isa<ObjCInterfaceDecl>(overridden->getDeclContext())) {
+        isa<ObjCInterfaceDecl>(overridden->getDeclContext()) &&
+        !overridden->isImplicit() /* not meant for properties */) {
       ObjCMethodDecl::param_iterator ParamI = ObjCMethod->param_begin(),
                                           E = ObjCMethod->param_end();
       ObjCMethodDecl::param_iterator PrevI = overridden->param_begin(),
diff --git a/test/SemaObjC/nowarn-superclass-method-mismatch.m b/test/SemaObjC/nowarn-superclass-method-mismatch.m
new file mode 100644 (file)
index 0000000..b211cde
--- /dev/null
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1  -fsyntax-only -fobjc-arc -fobjc-runtime-has-weak -Wsuper-class-method-mismatch -verify %s
+// rdar://11793793
+
+@class NSString;
+
+@interface Super
+@property (nonatomic) NSString *thingy;
+@property () __weak id PROP;
+@end
+
+@interface Sub : Super
+@end
+
+@implementation Sub
+- (void)setThingy:(NSString *)val
+{
+  [super setThingy:val];
+}
+@synthesize PROP;
+@end