some cleanups on top of David's patch.  There are still two
remaining open issues I've communicated to him:

1) self can be assigned to, and his patch didn't handle it correctly.
2) CollectObjCIvarTypes is N^2 (because each subclass reprocesses
   all parent class ivars) and flattens classes.  If A derives from B, 
   and both have an int, I'd expect to get { {i32}, i32}, not { i32, i32}.

David, please review.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48970 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index 8374f2b..21b372b 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -41,9 +41,8 @@
 
 CodeGenModule::~CodeGenModule() {
   llvm::Function *ObjCInitFunction = Runtime->ModuleInitFunction();
-  if (ObjCInitFunction) {
+  if (ObjCInitFunction)
     AddGlobalCtor(ObjCInitFunction);
-  }
   EmitGlobalCtors();
   delete Runtime;
 }
@@ -80,15 +79,15 @@
 /// called on module load, if any have been registered with AddGlobalCtor.
 void CodeGenModule::EmitGlobalCtors() {
   if (GlobalCtors.empty()) return;
+  
   // Get the type of @llvm.global_ctors
   std::vector<const llvm::Type*> CtorFields;
   CtorFields.push_back(llvm::IntegerType::get(32));
   // Constructor function type
   std::vector<const llvm::Type*> VoidArgs;
-  llvm::FunctionType* CtorFuncTy = llvm::FunctionType::get(
-    llvm::Type::VoidTy,
-    VoidArgs,
-    false);
+  llvm::FunctionType* CtorFuncTy =
+    llvm::FunctionType::get(llvm::Type::VoidTy, VoidArgs, false);
+  
   // i32, function type pair
   const llvm::Type *FPType = llvm::PointerType::getUnqual(CtorFuncTy);
   llvm::StructType* CtorStructTy = 
@@ -120,7 +119,6 @@
   
   GlobalCtorsVal->setInitializer(llvm::ConstantArray::get(GlobalCtorsTy,
                                                           CtorValues));
-
 }