]> granicus.if.org Git - clang/commitdiff
In my last patch initialize the destination to null (with a simple store) before...
authorFariborz Jahanian <fjahanian@apple.com>
Sat, 5 Jan 2013 00:32:13 +0000 (00:32 +0000)
committerFariborz Jahanian <fjahanian@apple.com>
Sat, 5 Jan 2013 00:32:13 +0000 (00:32 +0000)
// rdar://12530881

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171572 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGBlocks.cpp
test/CodeGenObjC/arc-unoptimized-byref-var.m

index e33e6644307c72f0950a752825eb5ed6b12dfc88..84d8808bb3d8e82ab8e0e3710dca385f2f1a8392 100644 (file)
@@ -1566,6 +1566,8 @@ public:
       llvm::ConstantPointerNull::get(cast<llvm::PointerType>(value->getType()));
 
     if (CGF.CGM.getCodeGenOpts().OptimizationLevel == 0) {
+      llvm::StoreInst *store = CGF.Builder.CreateStore(null, destField);
+      store->setAlignment(Alignment.getQuantity());
       CGF.EmitARCStoreStrongCall(destField, value, /*ignored*/ true);
       CGF.EmitARCStoreStrongCall(srcField, null, /*ignored*/ true);
       return;
index 4cfc5e9903e51b3bff634163fc2d2c9553526833..080da63ca372cccda3af08ff050a03d2d0233cf1 100644 (file)
@@ -7,6 +7,7 @@ void test19() {
 // CHECK-UNOPT: [[X:%.*]] = getelementptr inbounds [[BYREF_T:%.*]]* [[VAR:%.*]], i32 0, i32 6
 // CHECK-UNOPT: [[X2:%.*]] = getelementptr inbounds [[BYREF_T:%.*]]* [[VAR1:%.*]], i32 0, i32 6
 // CHECK-UNOPT-NEXT: [[SIX:%.*]] = load i8** [[X2]], align 8
+// CHECK-UNOPT-NEXT: store i8* null, i8** [[X]], align 8
 // CHECK-UNOPT-NEXT: call void @objc_storeStrong(i8** [[X]], i8* [[SIX]]) nounwind
 // CHECK-UNOPT-NEXT: call void @objc_storeStrong(i8** [[X2]], i8* null) nounwind
 // CHECK-UNOPT-NEXT: ret void