diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-02-16 00:15:02 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-02-16 00:15:02 +0000 |
commit | ba83c95b9f8e6bd65405ebff815416fd06b3d4f8 (patch) | |
tree | 285dbbed314acfafa024e6f40f47b843b68624c5 | |
parent | 64a043045874c9a054f9dfb8d37daf6e5e8d054c (diff) |
objc-arc: For arc's ivar layout, treat __unsafe_unretained ivars
as unscanned. // rdar://10832643
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150639 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGObjCMac.cpp | 4 | ||||
-rw-r--r-- | test/CodeGenObjC/arc-ivar-layout.m | 11 |
2 files changed, 15 insertions, 0 deletions
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp index 1b95547292..edef754b15 100644 --- a/lib/CodeGen/CGObjCMac.cpp +++ b/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/test/CodeGenObjC/arc-ivar-layout.m b/test/CodeGenObjC/arc-ivar-layout.m index 30c90fac9e..7f58a0cad3 100644 --- a/test/CodeGenObjC/arc-ivar-layout.m +++ b/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 "!" |