summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2011-10-13 23:45:45 +0000
committerFariborz Jahanian <fjahanian@apple.com>2011-10-13 23:45:45 +0000
commit5fa065b55bd622f20656e0de3b1f122951146784 (patch)
treebcf162d4501a9cc0a6ad4c56435c4b5edd1c453a
parent575fdda948e07c1afc6fcdced9e5cf0b7905a54e (diff)
objc-arc: 'Class' property is implicitly __unsafe_unretained.
// rdar://10239594 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141915 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaObjCProperty.cpp2
-rw-r--r--test/SemaObjC/arc-property-lifetime.m15
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/Sema/SemaObjCProperty.cpp b/lib/Sema/SemaObjCProperty.cpp
index 33069928f2..751f553945 100644
--- a/lib/Sema/SemaObjCProperty.cpp
+++ b/lib/Sema/SemaObjCProperty.cpp
@@ -39,7 +39,7 @@ static Qualifiers::ObjCLifetime getImpliedARCOwnership(
if (attrs & (ObjCPropertyDecl::OBJC_PR_retain |
ObjCPropertyDecl::OBJC_PR_strong |
ObjCPropertyDecl::OBJC_PR_copy)) {
- return Qualifiers::OCL_Strong;
+ return type->getObjCARCImplicitLifetime();
} else if (attrs & ObjCPropertyDecl::OBJC_PR_weak) {
return Qualifiers::OCL_Weak;
} else if (attrs & ObjCPropertyDecl::OBJC_PR_unsafe_unretained) {
diff --git a/test/SemaObjC/arc-property-lifetime.m b/test/SemaObjC/arc-property-lifetime.m
index cbed455ddc..9cc3ada15f 100644
--- a/test/SemaObjC/arc-property-lifetime.m
+++ b/test/SemaObjC/arc-property-lifetime.m
@@ -110,3 +110,18 @@
@synthesize isAutosaving = _isAutosaving;
@end
+// rdar://10239594
+// Test for 'Class' properties being unretained.
+@interface MyClass {
+@private
+ Class _controllerClass;
+ id _controllerId;
+}
+@property (copy) Class controllerClass;
+@property (copy) id controllerId;
+@end
+
+@implementation MyClass
+@synthesize controllerClass = _controllerClass;
+@synthesize controllerId = _controllerId;
+@end