summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-01-04 23:32:24 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-01-04 23:32:24 +0000
commita82e9265d8230b0908071c777e16dcebbf2679a9 (patch)
treecacbce0ef7d964846e9ee31f2b66f9025fda3f81 /clang/lib
parent184c6591ecda872310e20aa6c213910afa6dfa9c (diff)
downloadbcm5719-llvm-a82e9265d8230b0908071c777e16dcebbf2679a9.tar.gz
bcm5719-llvm-a82e9265d8230b0908071c777e16dcebbf2679a9.zip
objective-C arc: in copy helper function for
__strong __block variables, perform objc_storeStrong on source and destination instead of direct move. This is done with -O0 and to improve some analysis. // rdar://12530881 llvm-svn: 171555
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/CodeGen/CGBlocks.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp
index 54bcb88ce38..e33e6644307 100644
--- a/clang/lib/CodeGen/CGBlocks.cpp
+++ b/clang/lib/CodeGen/CGBlocks.cpp
@@ -1565,6 +1565,11 @@ public:
llvm::Value *null =
llvm::ConstantPointerNull::get(cast<llvm::PointerType>(value->getType()));
+ if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) {
+ CGF.EmitARCStoreStrongCall(destField, value, /*ignored*/ true);
+ CGF.EmitARCStoreStrongCall(srcField, null, /*ignored*/ true);
+ return;
+ }
llvm::StoreInst *store = CGF.Builder.CreateStore(value, destField);
store->setAlignment(Alignment.getQuantity());
OpenPOWER on IntegriCloud