diff options
author | John McCall <rjmccall@apple.com> | 2011-10-04 06:23:45 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2011-10-04 06:23:45 +0000 |
commit | ff61303bd04faa380d2058f2c5520fa125330192 (patch) | |
tree | 080b4d04d5e3bcdd5a9fffe5ba186df7d89d85f3 /clang/test/CodeGenObjC/arc-block-copy-escape.m | |
parent | 05de0298d2c3da8d42c2de6a95a765523e3baed0 (diff) | |
download | bcm5719-llvm-ff61303bd04faa380d2058f2c5520fa125330192.tar.gz bcm5719-llvm-ff61303bd04faa380d2058f2c5520fa125330192.zip |
Mark calls to objc_retainBlock that don't result from casts
to id so that we can still optimize them appropriately.
llvm-svn: 141064
Diffstat (limited to 'clang/test/CodeGenObjC/arc-block-copy-escape.m')
-rw-r--r-- | clang/test/CodeGenObjC/arc-block-copy-escape.m | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/CodeGenObjC/arc-block-copy-escape.m b/clang/test/CodeGenObjC/arc-block-copy-escape.m new file mode 100644 index 00000000000..15c0d1d0f49 --- /dev/null +++ b/clang/test/CodeGenObjC/arc-block-copy-escape.m @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fobjc-arc -fblocks -emit-llvm %s -o - | FileCheck %s + +typedef void (^block_t)(void); +void use_block(block_t); +void use_int(int); + +// rdar://problem/10211676 + +void test0(int i) { + block_t block = ^{ use_int(i); }; + // CHECK: define void @test0( + // CHECK: call i8* @objc_retainBlock(i8* {{%.*}}) nounwind, !clang.arc.copy_on_escape + // CHECK: ret void +} + +void test1(int i) { + id block = ^{ use_int(i); }; + // CHECK: define void @test1( + // CHECK: call i8* @objc_retainBlock(i8* {{%.*}}) nounwind + // CHECK-NOT: !clang.arc.copy_on_escape + // CHECK: ret void +} |