From c4133a477389dacb4479a96ee2227b92aea0a237 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 5 Jul 2012 22:26:07 +0000 Subject: [PATCH] objective-c: don't involve properties when checking 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 | 3 ++- .../nowarn-superclass-method-mismatch.m | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/SemaObjC/nowarn-superclass-method-mismatch.m 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(overridden->getDeclContext())); if (CurrentClass && overridden->getDeclContext() != CurrentClass && - isa(overridden->getDeclContext())) { + isa(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 -- 2.40.0