diff options
-rw-r--r-- | lib/Sema/SemaDeclObjC.cpp | 3 | ||||
-rw-r--r-- | test/SemaObjC/nowarn-superclass-method-mismatch.m | 20 |
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 |