From 3556124ef63389598d06b0ef19c1fddbb9cc887c Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Fri, 10 Jan 2014 00:53:48 +0000 Subject: [PATCH] ObjectiveC. 1) Warn when @dynamic (as well as synthesize) property has the naming convention that implies 'ownership'. 2) improve on diagnostic and make it property specific. 3) fix the line number in the case of default property synthesis. // rdar://15757510 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198905 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 8 ++++---- lib/Sema/SemaObjCProperty.cpp | 8 ++------ test/SemaObjC/arc-decls.m | 20 ++++++++++++++------ 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index bf8c051910..974533e44f 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -703,8 +703,8 @@ def note_atomic_property_fixup_suggest : Note<"setter and getter must both be " def err_atomic_property_nontrivial_assign_op : Error< "atomic property of reference type %0 cannot have non-trivial assignment" " operator">; -def warn_owning_getter_rule : Warning< - "property's synthesized getter follows Cocoa naming" +def warn_cocoa_naming_owned_rule : Warning< + "property follows Cocoa naming" " convention for returning 'owned' objects">, InGroup>; def warn_auto_synthesizing_protocol_property :Warning< @@ -733,8 +733,8 @@ def warn_property_getter_owning_mismatch : Warning< def error_property_setter_ambiguous_use : Error< "synthesized properties %0 and %1 both claim setter %2 -" " use of this setter will cause unexpected behavior">; -def err_ownin_getter_rule : Error< - "property's synthesized getter follows Cocoa naming" +def err_cocoa_naming_owned_rule : Error< + "property follows Cocoa naming" " convention for returning 'owned' objects">; def warn_default_atomic_custom_getter_setter : Warning< "atomic by default property %0 has a user defined %select{getter|setter}1 " diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp index 9413202619..f613b643ca 100644 --- a/lib/Sema/SemaObjCProperty.cpp +++ b/lib/Sema/SemaObjCProperty.cpp @@ -1795,9 +1795,6 @@ void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D for (ObjCImplementationDecl::propimpl_iterator i = D->propimpl_begin(), e = D->propimpl_end(); i != e; ++i) { ObjCPropertyImplDecl *PID = *i; - if (PID->getPropertyImplementation() != ObjCPropertyImplDecl::Synthesize) - continue; - const ObjCPropertyDecl *PD = PID->getPropertyDecl(); if (PD && !PD->hasAttr() && !D->getInstanceMethod(PD->getGetterName())) { @@ -1808,10 +1805,9 @@ void Sema::DiagnoseOwningPropertyGetterSynthesis(const ObjCImplementationDecl *D if (family == OMF_alloc || family == OMF_copy || family == OMF_mutableCopy || family == OMF_new) { if (getLangOpts().ObjCAutoRefCount) - Diag(PID->getLocation(), diag::err_ownin_getter_rule); + Diag(PD->getLocation(), diag::err_cocoa_naming_owned_rule); else - Diag(PID->getLocation(), diag::warn_owning_getter_rule); - Diag(PD->getLocation(), diag::note_property_declare); + Diag(PD->getLocation(), diag::warn_cocoa_naming_owned_rule); } } } diff --git a/test/SemaObjC/arc-decls.m b/test/SemaObjC/arc-decls.m index 903cea2a0e..7fcf576f70 100644 --- a/test/SemaObjC/arc-decls.m +++ b/test/SemaObjC/arc-decls.m @@ -51,20 +51,28 @@ void func() } // rdar://9157348 +// rdar://15757510 @interface J -@property (retain) id newFoo; // expected-note {{property declared here}} -@property (strong) id copyBar; // expected-note {{property declared here}} -@property (copy) id allocBaz; // expected-note {{property declared here}} +@property (retain) id newFoo; // expected-error {{property follows Cocoa naming convention for returning 'owned' objects}} +@property (strong) id copyBar; // expected-error {{property follows Cocoa naming convention for returning 'owned' objects}} +@property (copy) id allocBaz; // expected-error {{property follows Cocoa naming convention for returning 'owned' objects}} @property (copy, nonatomic) id new; +@property (retain) id newDFoo; // expected-error {{property follows Cocoa naming convention for returning 'owned' objects}} +@property (strong) id copyDBar; // expected-error {{property follows Cocoa naming convention for returning 'owned' objects}} +@property (copy) id allocDBaz; // expected-error {{property follows Cocoa naming convention for returning 'owned' objects}} @end @implementation J -@synthesize newFoo; // expected-error {{property's synthesized getter follows Cocoa naming convention for returning}} -@synthesize copyBar; // expected-error {{property's synthesized getter follows Cocoa naming convention for returning}} -@synthesize allocBaz; // expected-error {{property's synthesized getter follows Cocoa naming convention for returning}} +@synthesize newFoo; +@synthesize copyBar; +@synthesize allocBaz; @synthesize new; - new {return 0; }; + +@dynamic newDFoo; +@dynamic copyDBar; +@dynamic allocDBaz; @end -- 2.40.0