From cba0ebce65667f76e291346d377f402579743cea Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian <fjahanian@apple.com> Date: Sat, 26 May 2012 16:10:06 +0000 Subject: [PATCH] Change warning to error when property setter names conflict. // rdar://11528439 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157517 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/DiagnosticSemaKinds.td | 5 ++--- lib/Sema/SemaPseudoObject.cpp | 2 +- test/SemaObjC/property-user-setter.m | 8 ++++---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 66dfafef153..98e387bece5 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -626,10 +626,9 @@ def warn_missing_explicit_synthesis : Warning < def warn_property_getter_owning_mismatch : Warning< "property declared as returning non-retained objects" "; getter returning retained objects">; -def warn_property_setter_ambiguous_use : Warning< +def error_property_setter_ambiguous_use : Error< "synthesized properties '%0' and '%1' both claim setter %2 -" - " use of this setter may cause unexpected behavior">, - InGroup<DiagGroup<"objc-multiple-property-setter-use">>; + " use of this setter will cause unexpected behavior">; def err_ownin_getter_rule : Error< "property's synthesized getter follows Cocoa naming" " convention for returning 'owned' objects">; diff --git a/lib/Sema/SemaPseudoObject.cpp b/lib/Sema/SemaPseudoObject.cpp index 82bf79b3666..4921ec9bfe9 100644 --- a/lib/Sema/SemaPseudoObject.cpp +++ b/lib/Sema/SemaPseudoObject.cpp @@ -543,7 +543,7 @@ bool ObjCPropertyOpBuilder::findSetter(bool warn) { IdentifierInfo *AltMember = &S.PP.getIdentifierTable().get(PropertyName); if (ObjCPropertyDecl *prop1 = IFace->FindPropertyDeclaration(AltMember)) if (prop != prop1 && (prop1->getSetterMethodDecl() == setter)) { - S.Diag(RefExpr->getExprLoc(), diag::warn_property_setter_ambiguous_use) + S.Diag(RefExpr->getExprLoc(), diag::error_property_setter_ambiguous_use) << prop->getName() << prop1->getName() << setter->getSelector(); S.Diag(prop->getLocation(), diag::note_property_declare); S.Diag(prop1->getLocation(), diag::note_property_declare); diff --git a/test/SemaObjC/property-user-setter.m b/test/SemaObjC/property-user-setter.m index 736f2adfb89..b36b027e5ef 100644 --- a/test/SemaObjC/property-user-setter.m +++ b/test/SemaObjC/property-user-setter.m @@ -127,10 +127,10 @@ int main (void) { self.P = 0; // expected-error {{property 'P' not found on object of type 'rdar11363363 *'}} self.q = 0; // expected-error {{property 'q' not found on object of type 'rdar11363363 *'}} // rdar://11528439 - self.t = 0; // expected-warning {{synthesized properties 't' and 'T' both claim setter 'setT:'}} - self.T = 0; // expected-warning {{synthesized properties 'T' and 't' both claim setter 'setT:'}} - self.Pxyz = 0; // expected-warning {{synthesized properties 'Pxyz' and 'pxyz' both claim setter 'setPxyz:'}} - self.pxyz = 0; // expected-warning {{synthesized properties 'pxyz' and 'Pxyz' both claim setter 'setPxyz:'}} + self.t = 0; // expected-error {{synthesized properties 't' and 'T' both claim setter 'setT:'}} + self.T = 0; // expected-error {{synthesized properties 'T' and 't' both claim setter 'setT:'}} + self.Pxyz = 0; // expected-error {{synthesized properties 'Pxyz' and 'pxyz' both claim setter 'setPxyz:'}} + self.pxyz = 0; // expected-error {{synthesized properties 'pxyz' and 'Pxyz' both claim setter 'setPxyz:'}} self.R = 0; // expected-error {{property 'R' not found on object of type 'rdar11363363 *'; did you mean to access ivar 'R'?}} return self.R; // expected-error {{property 'R' not found on object of type 'rdar11363363 *'; did you mean to access ivar 'R'?}} } -- GitLab