diff options
author | John McCall <rjmccall@apple.com> | 2011-09-13 18:49:24 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-09-13 18:49:24 +0000 |
commit | 6dc6f008994472cf4da321855e8c51c39720f3ed (patch) | |
tree | 5e4d8e2ddb10c8a0ced4b69661f520a73e9f27b0 /test | |
parent | f1e7af36d6673185994b3d1751cf7e9a9a1491b8 (diff) |
A strong property of block type has "copy" setter semantics, not "retain".
This is consistent with the behavior of assigning into a __strong l-value,
and it's also necessary for ensuring that the ivar doesn't end up a dangling
reference. We decided not to change the behavior of "retain" properties, but
just to make them warnings/errors when of block type.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139619 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGenObjC/arc.m | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/CodeGenObjC/arc.m b/test/CodeGenObjC/arc.m index 7982fd6ebc..ebbc347316 100644 --- a/test/CodeGenObjC/arc.m +++ b/test/CodeGenObjC/arc.m @@ -1892,3 +1892,23 @@ void test64b(void) { // CHECK-NEXT: call void @objc_release(i8* [[T5]]) // CHECK-NEXT: ret void } + +// rdar://problem/9979150 +@interface Test65 +@property (strong) void(^ablock)(void); +@property (nonatomic, strong) void(^nblock)(void); +@end +@implementation Test65 +@synthesize ablock, nblock; +// CHECK: define internal void ()* @"\01-[Test65 ablock]"( +// CHECK: call i8* @objc_getProperty(i8* {{%.*}}, i8* {{%.*}}, i64 {{%.*}}, i1 zeroext true) + +// CHECK: define internal void @"\01-[Test65 setAblock:]"( +// CHECK: call void @objc_setProperty(i8* {{%.*}}, i8* {{%.*}}, i64 {{%.*}}, i8* {{%.*}}, i1 zeroext true, i1 zeroext true) + +// CHECK: define internal void ()* @"\01-[Test65 nblock]"( +// CHECK: call i8* @objc_getProperty(i8* {{%.*}}, i8* {{%.*}}, i64 {{%.*}}, i1 zeroext false) + +// CHECK: define internal void @"\01-[Test65 setNblock:]"( +// CHECK: call void @objc_setProperty(i8* {{%.*}}, i8* {{%.*}}, i64 {{%.*}}, i8* {{%.*}}, i1 zeroext false, i1 zeroext true) +@end |