]> granicus.if.org Git - clang/commitdiff
objc-arc: For arc's ivar layout, treat __unsafe_unretained ivars
authorFariborz Jahanian <fjahanian@apple.com>
Thu, 16 Feb 2012 00:15:02 +0000 (00:15 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Thu, 16 Feb 2012 00:15:02 +0000 (00:15 +0000)
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
test/CodeGenObjC/arc-ivar-layout.m

index 1b9554729248261b9ade3d8952fbc2029a63c517..edef754b1581bc074995f7cc33b372481f315cfe 100644 (file)
@@ -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;
   
index 30c90fac9e404ff44025b8a26569cfc11f6905d5..7f58a0cad3bd6cbea0fc60eafee12e59cc249582 100644 (file)
 // 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      "!"