diff options
-rw-r--r-- | lib/CodeGen/CGBlocks.cpp | 2 | ||||
-rw-r--r-- | test/CodeGen/blocks.c | 7 |
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) {} }); +} |