diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index bf8c051910aa0323127643f3a7a7c6c815c1d2bb..974533e44f79a72019e46a0854b7ed158a983869 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<DiagGroup<"objc-property-matches-cocoa-ownership-rule">>; 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 941320261926f0247056d45740d379fd719b3dc5..f613b643ca040ee5337253bb4d4f54b5ca8bcd42 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<NSReturnsNotRetainedAttr>() && !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 903cea2a0e8a4581582e676fe72a3cfb7647d89f..7fcf576f7000eb3ab47d94a5b57bf86e5c30fcc1 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