Move BlockDescriptorType into CGM.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64451 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGBlocks.cpp b/lib/CodeGen/CGBlocks.cpp
index 9aa5207..cb096fc 100644
--- a/lib/CodeGen/CGBlocks.cpp
+++ b/lib/CodeGen/CGBlocks.cpp
@@ -26,25 +26,25 @@
   IsGlobal = 1 << 28
 };
 
-static const llvm::Type *getBlockDescriptorType(CodeGenModule &CGM) {
-  static const llvm::Type *Ty = 0;
-    
-  if (!Ty) {
-    const llvm::Type *UnsignedLongTy = 
-      CGM.getTypes().ConvertType(CGM.getContext().UnsignedLongTy);
+const llvm::Type *CodeGenModule::getBlockDescriptorType() {
+  if (BlockDescriptorType)
+    return BlockDescriptorType;
+
+  const llvm::Type *UnsignedLongTy = 
+    getTypes().ConvertType(getContext().UnsignedLongTy);
         
-    // struct __block_descriptor {
-    //   unsigned long reserved;
-    //   unsigned long block_size;
-    // };
-    Ty = llvm::StructType::get(UnsignedLongTy, 
-                               UnsignedLongTy, 
-                               NULL);
-        
-    CGM.getModule().addTypeName("struct.__block_descriptor", Ty);
-  }
-    
-  return Ty;
+  // struct __block_descriptor {
+  //   unsigned long reserved;
+  //   unsigned long block_size;
+  // };
+  BlockDescriptorType = llvm::StructType::get(UnsignedLongTy, 
+                                              UnsignedLongTy, 
+                                              NULL);
+
+  getModule().addTypeName("struct.__block_descriptor",
+                          BlockDescriptorType);
+
+  return BlockDescriptorType;
 }
 
 static const llvm::Type *getGenericBlockLiteralType(CodeGenModule &CGM) {
@@ -55,7 +55,7 @@
       llvm::PointerType::getUnqual(llvm::Type::Int8Ty);
         
     const llvm::Type *BlockDescPtrTy = 
-      llvm::PointerType::getUnqual(getBlockDescriptorType(CGM));
+      llvm::PointerType::getUnqual(CGM.getBlockDescriptorType());
         
     // struct __block_literal_generic {
     //   void *isa;
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index df4a3d0..422eb3b 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -36,7 +36,8 @@
                              Diagnostic &diags, bool GenerateDebugInfo)
   : 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) {
+    CFConstantStringClassRef(0), NSConcreteGlobalBlock(0),
+    BlockDescriptorType(0) {
 
   if (Features.ObjC1) {
     if (Features.NeXTRuntime) {
diff --git a/lib/CodeGen/CodeGenModule.h b/lib/CodeGen/CodeGenModule.h
index d8719ef..c484264 100644
--- a/lib/CodeGen/CodeGenModule.h
+++ b/lib/CodeGen/CodeGenModule.h
@@ -123,10 +123,12 @@
   /// Obj-C class pointer.
   llvm::Constant *CFConstantStringClassRef;
   
-  /// NSConcreteGlobalBlock - Cached reference to the clas pointer for 
+  /// NSConcreteGlobalBlock - Cached reference to the class pointer for 
   /// global blocks.
   llvm::Constant *NSConcreteGlobalBlock;
   
+  const llvm::Type *BlockDescriptorType;
+
   std::vector<llvm::Function *> BuiltinFunctions;
 public:
   CodeGenModule(ASTContext &C, const LangOptions &Features, llvm::Module &M, 
@@ -138,6 +140,8 @@
   /// Release - Finalize LLVM code generation.
   void Release();
 
+  const llvm::Type *getBlockDescriptorType();
+
   /// getObjCRuntime() - Return a reference to the configured
   /// Objective-C runtime.
   CGObjCRuntime &getObjCRuntime() {