diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index 3326f83..3b602a0 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -33,7 +33,8 @@
               llvm::cl::ZeroOrMore,
               llvm::cl::init(false));
 
-llvm::Constant *CodeGenFunction::BuildDescriptorBlockDecl(uint64_t Size) {
+llvm::Constant *CodeGenFunction::
+BuildDescriptorBlockDecl(uint64_t Size, const llvm::Type* Ty) {
   const llvm::Type *UnsignedLongTy
     = CGM.getTypes().ConvertType(getContext().UnsignedLongTy);
   llvm::Constant *C;
@@ -52,10 +53,10 @@
 
   if (BlockHasCopyDispose) {
     // copy_func_helper_decl
-    Elts.push_back(BuildCopyHelper());
+    Elts.push_back(BuildCopyHelper(Ty));
 
     // destroy_func_decl
-    Elts.push_back(BuildDestroyHelper());
+    Elts.push_back(BuildDestroyHelper(Ty));
   }
 
   C = llvm::ConstantStruct::get(Elts);
@@ -180,10 +181,10 @@
     C = llvm::ConstantInt::get(IntTy, 0);
     Elts[2] = C;
 
-    // __descriptor
-    Elts[4] = BuildDescriptorBlockDecl(subBlockSize);
-
     if (subBlockDeclRefDecls.size() == 0) {
+      // __descriptor
+      Elts[4] = BuildDescriptorBlockDecl(subBlockSize, 0);
+
       // Optimize to being a global block.
       Elts[0] = CGM.getNSConcreteGlobalBlock();
       Elts[1] = llvm::ConstantInt::get(IntTy, flags|BLOCK_IS_GLOBAL);
@@ -295,6 +296,9 @@
         // FIXME: Ensure that the offset created by the backend for
         // the struct matches the previously computed offset in BlockDecls.
       }
+
+    // __descriptor
+    Elts[4] = BuildDescriptorBlockDecl(subBlockSize, Ty);
   }
 
   QualType BPT = BE->getType();
@@ -671,7 +675,7 @@
   return BlockOffset-Size;
 }
 
-llvm::Constant *BlockFunction::GenerateCopyHelperFunction() {
+llvm::Constant *BlockFunction::GenerateCopyHelperFunction(const llvm::Type *Ty) {
   QualType R = getContext().VoidTy;
 
   FunctionArgList Args;
@@ -709,7 +713,8 @@
   return llvm::ConstantExpr::getBitCast(Fn, PtrToInt8Ty);
 }
 
-llvm::Constant *BlockFunction::GenerateDestroyHelperFunction() {
+llvm::Constant *BlockFunction::
+GenerateDestroyHelperFunction(const llvm::Type* Ty) {
   QualType R = getContext().VoidTy;
 
   FunctionArgList Args;
@@ -747,12 +752,12 @@
   return llvm::ConstantExpr::getBitCast(Fn, PtrToInt8Ty);
 }
 
-llvm::Constant *BlockFunction::BuildCopyHelper() {
-  return CodeGenFunction(CGM).GenerateCopyHelperFunction();
+llvm::Constant *BlockFunction::BuildCopyHelper(const llvm::Type *Ty) {
+  return CodeGenFunction(CGM).GenerateCopyHelperFunction(Ty);
 }
 
-llvm::Constant *BlockFunction::BuildDestroyHelper() {
-  return CodeGenFunction(CGM).GenerateDestroyHelperFunction();
+llvm::Constant *BlockFunction::BuildDestroyHelper(const llvm::Type *Ty) {
+  return CodeGenFunction(CGM).GenerateDestroyHelperFunction(Ty);
 }
 
 llvm::Constant *BlockFunction::
diff --git a/lib/CodeGen/CGBlocks.h b/lib/CodeGen/CGBlocks.h
index e915a51..5d6c089 100644
--- a/lib/CodeGen/CGBlocks.h
+++ b/lib/CodeGen/CGBlocks.h
@@ -158,11 +158,11 @@
   ImplicitParamDecl *BlockStructDecl;
   ImplicitParamDecl *getBlockStructDecl() { return BlockStructDecl; }
 
-  llvm::Constant *GenerateCopyHelperFunction();
-  llvm::Constant *GenerateDestroyHelperFunction();
+  llvm::Constant *GenerateCopyHelperFunction(const llvm::Type *);
+  llvm::Constant *GenerateDestroyHelperFunction(const llvm::Type *);
 
-  llvm::Constant *BuildCopyHelper();
-  llvm::Constant *BuildDestroyHelper();
+  llvm::Constant *BuildCopyHelper(const llvm::Type *);
+  llvm::Constant *BuildDestroyHelper(const llvm::Type *);
 
   llvm::Constant *GeneratebyrefCopyHelperFunction(const llvm::Type *, int flag);
   llvm::Constant *GeneratebyrefDestroyHelperFunction(const llvm::Type *T, int);
diff --git a/lib/CodeGen/CodeGenFunction.h b/lib/CodeGen/CodeGenFunction.h
index 26fde84..2ac886d 100644
--- a/lib/CodeGen/CodeGenFunction.h
+++ b/lib/CodeGen/CodeGenFunction.h
@@ -266,7 +266,7 @@
   //===--------------------------------------------------------------------===//
 
   llvm::Value *BuildBlockLiteralTmp(const BlockExpr *);
-  llvm::Constant *BuildDescriptorBlockDecl(uint64_t Size);
+  llvm::Constant *BuildDescriptorBlockDecl(uint64_t Size, const llvm::Type *);
 
   llvm::Function *GenerateBlockFunction(const BlockExpr *BExpr,
                                         const BlockInfo& Info,
