From fc68bf37a00f58808bd3f038e5e6a3bc9f620782 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Tue, 19 Nov 2013 19:26:30 +0000 Subject: [PATCH] ObjectiveC ARC. Removes a bogus warning when a weak property is redeclared as 'weak' in class extension. // rdar://15465916 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195146 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaObjCProperty.cpp | 4 +++- test/SemaObjC/arc-decls.m | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp index 9d18c659c2..d9d9cec1b7 100644 --- a/lib/Sema/SemaObjCProperty.cpp +++ b/lib/Sema/SemaObjCProperty.cpp @@ -463,10 +463,12 @@ Sema::HandlePropertyInClassExtension(Scope *S, QualType PrimaryPropertyQT = Context.getCanonicalType(PIDecl->getType()).getUnqualifiedType(); if (isa(PrimaryPropertyQT)) { + bool PropertyIsWeak = ((PIkind & ObjCPropertyDecl::OBJC_PR_weak) != 0); Qualifiers::ObjCLifetime PrimaryPropertyLifeTime = PrimaryPropertyQT.getObjCLifetime(); if (PrimaryPropertyLifeTime == Qualifiers::OCL_None && - (Attributes & ObjCDeclSpec::DQ_PR_weak)) { + (Attributes & ObjCDeclSpec::DQ_PR_weak) && + !PropertyIsWeak) { Diag(AtLoc, diag::warn_property_implicitly_mismatched); Diag(PIDecl->getLocation(), diag::note_property_declare); } diff --git a/test/SemaObjC/arc-decls.m b/test/SemaObjC/arc-decls.m index f8e80c7819..903cea2a0e 100644 --- a/test/SemaObjC/arc-decls.m +++ b/test/SemaObjC/arc-decls.m @@ -113,8 +113,13 @@ struct __attribute__((objc_ownership(none))) S2 {}; // expected-error {{'objc_ow @interface SomeClassOwnedByController @property (readonly) ControllerClass *controller; // expected-note {{property declared here}} + +// rdar://15465916 +@property (readonly, weak) ControllerClass *weak_controller; @end @interface SomeClassOwnedByController () @property (readwrite, weak) ControllerClass *controller; // expected-warning {{primary property declaration is implicitly strong while redeclaration in class extension is weak}} + +@property (readwrite, weak) ControllerClass *weak_controller; @end -- 2.40.0