summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-02-16 00:15:02 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-02-16 00:15:02 +0000
commit430b35edf887d8f9a8930f879bf479c7ba12186b (patch)
treee8b6adb24c352599c0abcf5d66ecce77bf16a38a
parent8a450cb2fa9c06a9971fb9a7416ba7c58b41db02 (diff)
downloadbcm5719-llvm-430b35edf887d8f9a8930f879bf479c7ba12186b.tar.gz
bcm5719-llvm-430b35edf887d8f9a8930f879bf479c7ba12186b.zip
objc-arc: For arc's ivar layout, treat __unsafe_unretained ivars
as unscanned. // rdar://10832643 llvm-svn: 150639
-rw-r--r--clang/lib/CodeGen/CGObjCMac.cpp4
-rw-r--r--clang/test/CodeGenObjC/arc-ivar-layout.m11
2 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 1b955472924..edef754b158 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -1730,6 +1730,10 @@ static Qualifiers::GC GetGCAttrTypeForType(ASTContext &Ctx, QualType FQT) {
if (FQT.isObjCGCWeak() || FQT.getObjCLifetime() == Qualifiers::OCL_Weak)
return Qualifiers::Weak;
+ // check for __unsafe_unretained
+ if (FQT.getObjCLifetime() == Qualifiers::OCL_ExplicitNone)
+ return Qualifiers::GCNone;
+
if (FQT->isObjCObjectPointerType() || FQT->isBlockPointerType())
return Qualifiers::Strong;
diff --git a/clang/test/CodeGenObjC/arc-ivar-layout.m b/clang/test/CodeGenObjC/arc-ivar-layout.m
index 30c90fac9e4..7f58a0cad3b 100644
--- a/clang/test/CodeGenObjC/arc-ivar-layout.m
+++ b/clang/test/CodeGenObjC/arc-ivar-layout.m
@@ -42,3 +42,14 @@
// CHECK-LP64: L_OBJC_CLASS_NAME_15:
// CHECK-LP64-NEXT: .asciz "\022"
+@interface UnsafePerson {
+@public
+ __unsafe_unretained id name;
+ __unsafe_unretained id age;
+ id value;
+}
+@end
+
+@implementation UnsafePerson @end
+// CHECK-LP64: L_OBJC_CLASS_NAME_20:
+// CHECK-LP64-NEXT: .asciz "!"
OpenPOWER on IntegriCloud