diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index cb096fc..2168351 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -47,34 +47,35 @@
   return BlockDescriptorType;
 }
 
-static const llvm::Type *getGenericBlockLiteralType(CodeGenModule &CGM) {
-  static const llvm::Type *Ty = 0;
-    
-  if (!Ty) {
-    const llvm::Type *Int8PtrTy = 
-      llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
+const llvm::Type *
+CodeGenModule::getGenericBlockLiteralType() {
+  if (GenericBlockLiteralType)
+    return GenericBlockLiteralType;
+
+  const llvm::Type *Int8PtrTy = 
+    llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
         
-    const llvm::Type *BlockDescPtrTy = 
-      llvm::PointerType::getUnqual(CGM.getBlockDescriptorType());
+  const llvm::Type *BlockDescPtrTy = 
+    llvm::PointerType::getUnqual(getBlockDescriptorType());
         
-    // struct __block_literal_generic {
-    //   void *isa;
-    //   int flags;
-    //   int reserved;
-    //   void (*invoke)(void *);
-    //   struct __block_descriptor *descriptor;
-    // };
-    Ty = llvm::StructType::get(Int8PtrTy,
-                               llvm::Type::Int32Ty,
-                               llvm::Type::Int32Ty,
-                               Int8PtrTy,
-                               BlockDescPtrTy,
-                               NULL);
+  // struct __block_literal_generic {
+  //   void *isa;
+  //   int flags;
+  //   int reserved;
+  //   void (*invoke)(void *);
+  //   struct __block_descriptor *descriptor;
+  // };
+  GenericBlockLiteralType = llvm::StructType::get(Int8PtrTy,
+                                                  llvm::Type::Int32Ty,
+                                                  llvm::Type::Int32Ty,
+                                                  Int8PtrTy,
+                                                  BlockDescPtrTy,
+                                                  NULL);
         
-    CGM.getModule().addTypeName("struct.__block_literal_generic", Ty);
-  }
+  getModule().addTypeName("struct.__block_literal_generic",
+                          GenericBlockLiteralType);
   
-  return Ty;
+  return GenericBlockLiteralType;
 }
 
 /// getBlockFunctionType - Given a BlockPointerType, will return the 
@@ -103,7 +104,7 @@
 
   // Get a pointer to the generic block literal.
   const llvm::Type *BlockLiteralTy =
-    llvm::PointerType::getUnqual(getGenericBlockLiteralType(CGM));
+    llvm::PointerType::getUnqual(CGM.getGenericBlockLiteralType());
 
   // Bitcast the callee to a block literal.
   llvm::Value *BlockLiteral = 
@@ -164,7 +165,7 @@
   // Block literal size. For global blocks we just use the size of the generic
   // block literal struct.
   uint64_t BlockLiteralSize = 
-    TheTargetData.getTypeStoreSizeInBits(getGenericBlockLiteralType(*this)) / 8;
+    TheTargetData.getTypeStoreSizeInBits(getGenericBlockLiteralType()) / 8;
   DescriptorFields[1] = llvm::ConstantInt::get(UnsignedLongTy,BlockLiteralSize);
   
   llvm::Constant *DescriptorStruct = 
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 422eb3b..53d99f0 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -37,7 +37,7 @@
   : Context(C), Features(LO), TheModule(M), TheTargetData(TD), Diags(diags),
     Types(C, M, TD), Runtime(0), MemCpyFn(0), MemMoveFn(0), MemSetFn(0),
     CFConstantStringClassRef(0), NSConcreteGlobalBlock(0),
-    BlockDescriptorType(0) {
+    BlockDescriptorType(0), GenericBlockLiteralType(0) {
 
   if (Features.ObjC1) {
     if (Features.NeXTRuntime) {
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index c484264..eb9ce7d 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -128,6 +128,7 @@
   llvm::Constant *NSConcreteGlobalBlock;
   
   const llvm::Type *BlockDescriptorType;
+  const llvm::Type * GenericBlockLiteralType;
 
   std::vector<llvm::Function *> BuiltinFunctions;
 public:
@@ -142,6 +143,8 @@
 
   const llvm::Type *getBlockDescriptorType();
 
+  const llvm::Type *getGenericBlockLiteralType();
+
   /// getObjCRuntime() - Return a reference to the configured
   /// Objective-C runtime.
   CGObjCRuntime &getObjCRuntime() { 
