aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/CodeGen/CGBlocks.cpp2
-rw-r--r--test/CodeGen/blocks.c7
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index ca78781ec6..44e0833daf 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -611,7 +611,7 @@ llvm::Value *CodeGenFunction::GetAddrOfBlockDecl(const ValueDecl *VD,
if (VD->getType()->isReferenceType())
V = Builder.CreateLoad(V);
} else {
- const llvm::Type *Ty = CGM.getTypes().ConvertType(VD->getType());
+ const llvm::Type *Ty = CGM.getTypes().ConvertTypeForMem(VD->getType());
Ty = llvm::PointerType::get(Ty, 0);
V = Builder.CreateBitCast(V, Ty);
if (VD->getType()->isReferenceType())
diff --git a/test/CodeGen/blocks.c b/test/CodeGen/blocks.c
index 6888356a5a..b7b6a2d505 100644
--- a/test/CodeGen/blocks.c
+++ b/test/CodeGen/blocks.c
@@ -33,3 +33,10 @@ typedef double ftype(double);
ftype ^test2 = ^ftype {
return 0;
};
+
+// rdar://problem/8605032
+void f3_helper(void (^)(void));
+void f3() {
+ _Bool b = 0;
+ f3_helper(^{ if (b) {} });
+}