From ba83c95b9f8e6bd65405ebff815416fd06b3d4f8 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Thu, 16 Feb 2012 00:15:02 +0000 Subject: [PATCH] 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 --- lib/CodeGen/CGObjCMac.cpp | 4 ++++ test/CodeGenObjC/arc-ivar-layout.m | 11 +++++++++++ 2 files changed, 15 insertions(+) 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 "!" -- 2.50.1