aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Sema/SemaDeclObjC.cpp3
-rw-r--r--test/SemaObjC/nowarn-superclass-method-mismatch.m20
2 files changed, 22 insertions, 1 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 87acd1e63d..d67fb5002a 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -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
index 0000000000..b211cdea37
--- /dev/null
+++ b/test/SemaObjC/nowarn-superclass-method-mismatch.m
@@ -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