diff options
-rw-r--r-- | clang/lib/Sema/SemaObjCProperty.cpp | 4 | ||||
-rw-r--r-- | clang/test/SemaObjC/arc-decls.m | 5 |
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaObjCProperty.cpp b/clang/lib/Sema/SemaObjCProperty.cpp index 9d18c659c27..d9d9cec1b70 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<ObjCObjectPointerType>(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 f8e80c78194..903cea2a0e8 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 |