From: Fariborz Jahanian Date: Wed, 20 Jun 2012 23:18:57 +0000 (+0000) Subject: objc: tweak my last patch to warn if class extension X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c78ff27813288b30ee566477705353ae660fd577;p=clang objc: tweak my last patch to warn if class extension has not overridden the property. // rdar://11656982 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158871 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp index 32fbb0432a..13350eaf37 100644 --- a/lib/Sema/SemaObjCProperty.cpp +++ b/lib/Sema/SemaObjCProperty.cpp @@ -612,7 +612,6 @@ DiagnoseClassAndClassExtPropertyMismatch(Sema &S, ObjCInterfaceDecl *ClassDecl, bool warn = (Attributes & ObjCDeclSpec::DQ_PR_readonly); for (const ObjCCategoryDecl *CDecl = ClassDecl->getFirstClassExtension(); CDecl; CDecl = CDecl->getNextClassExtension()) { - warn = false; ObjCPropertyDecl *ClassExtProperty = 0; for (ObjCContainerDecl::prop_iterator P = CDecl->prop_begin(), E = CDecl->prop_end(); P != E; ++P) { @@ -622,6 +621,7 @@ DiagnoseClassAndClassExtPropertyMismatch(Sema &S, ObjCInterfaceDecl *ClassDecl, } } if (ClassExtProperty) { + warn = false; unsigned classExtPropertyAttr = ClassExtProperty->getPropertyAttributesAsWritten(); // We are issuing the warning that we postponed because class extensions diff --git a/test/SemaObjC/tentative-property-decl.m b/test/SemaObjC/tentative-property-decl.m index 4ab2f56a4a..f69ac6dace 100644 --- a/test/SemaObjC/tentative-property-decl.m +++ b/test/SemaObjC/tentative-property-decl.m @@ -15,6 +15,7 @@ @interface MyClass : Super @property(nonatomic, copy, readonly) NSString *prop; +@property(nonatomic, copy, readonly) id warnProp; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}} @end @interface MyClass () @@ -23,11 +24,13 @@ @implementation MyClass @synthesize prop; +@synthesize warnProp; @end @protocol P @property(nonatomic, copy, readonly) NSString *prop; +@property(nonatomic, copy, readonly) id warnProp; // expected-warning {{property attributes 'readonly' and 'copy' are mutually exclusive}} @end @interface YourClass : Super

@@ -39,5 +42,6 @@ @implementation YourClass @synthesize prop; +@synthesize warnProp; @end