diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2017-04-28 18:50:57 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2017-04-28 18:50:57 +0000 |
commit | a6b6dcc12384359b0e9a5843ec8e69ff3dc28009 (patch) | |
tree | 442e88773ef7214cc66949728e2c35031a589de4 /clang/lib/CodeGen/CodeGenFunction.h | |
parent | 6652a52e2b208ad593ff562667142affaec4a7df (diff) | |
download | bcm5719-llvm-a6b6dcc12384359b0e9a5843ec8e69ff3dc28009.tar.gz bcm5719-llvm-a6b6dcc12384359b0e9a5843ec8e69ff3dc28009.zip |
[CodeGen][ObjC] Don't retain captured Objective-C pointers at block
creation that are const-qualified.
When a block captures an ObjC object pointer, clang retains the pointer
to prevent prematurely destroying the object the pointer points to
before the block is called or copied.
When the captured object pointer is const-qualified, we can avoid
emitting the retain/release pair since the pointer variable cannot be
modified in the scope in which the block literal is introduced.
For example:
void test(const id x) {
callee(^{ (void)x; });
}
This patch implements that optimization.
rdar://problem/28894510
Differential Revision: https://reviews.llvm.org/D32601
llvm-svn: 301667
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.h')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 1ded824ba5b..f9bc4a1bc2d 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -3369,6 +3369,7 @@ public: static Destroyer destroyARCStrongImprecise; static Destroyer destroyARCStrongPrecise; static Destroyer destroyARCWeak; + static Destroyer emitARCIntrinsicUse; void EmitObjCAutoreleasePoolPop(llvm::Value *Ptr); llvm::Value *EmitObjCAutoreleasePoolPush(); |