From 3b65982b9fe09329bd64518a390052f3ca3b0a08 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 llvm-svn: 195146 --- clang/lib/Sema/SemaObjCProperty.cpp | 4 +++- clang/test/SemaObjC/arc-decls.m | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp index 9d18c659c27e..d9d9cec1b700 100644 --- a/clang/lib/Sema/SemaObjCProperty.cpp +++ b/clang/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/clang/test/SemaObjC/arc-decls.m b/clang/test/SemaObjC/arc-decls.m index f8e80c781945..903cea2a0e8a 100644 --- a/clang/test/SemaObjC/arc-decls.m +++ b/clang/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