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 | 430b35edf887d8f9a8930f879bf479c7ba12186b (patch) | |
| tree | e8b6adb24c352599c0abcf5d66ecce77bf16a38a | |
| parent | 8a450cb2fa9c06a9971fb9a7416ba7c58b41db02 (diff) | |
| download | bcm5719-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.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CodeGenObjC/arc-ivar-layout.m | 11 |
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 "!" |

