Fix codegen of chained declarations
 - Killed useless CodeGenModule::EmitGlobalVarDeclarator, instead just
   recurse on any ScopedDecl.
 - Fix for <rdar://problem/6093838>


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54162 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/ModuleBuilder.cpp b/lib/CodeGen/ModuleBuilder.cpp
index b37b8d3..3fa086f 100644
--- a/lib/CodeGen/ModuleBuilder.cpp
+++ b/lib/CodeGen/ModuleBuilder.cpp
@@ -64,7 +64,7 @@
       // semantic analysis (to ensure all warnings and errors are emitted).
       if (Diags.hasErrorOccurred())
         return;
-      
+
       if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
         Builder->EmitFunction(FD);
       } else if (isa<ObjCClassDecl>(D)){
@@ -86,8 +86,7 @@
       } else if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)){
         Builder->EmitObjCMethod(OMD);
       } else if (VarDecl *VD = dyn_cast<VarDecl>(D)) {
-        if (VD->isFileVarDecl())
-          Builder->EmitGlobalVarDeclarator(VD);
+        Builder->EmitGlobalVar(VD);
       } else if (isa<ObjCClassDecl>(D) || isa<ObjCCategoryDecl>(D)) {
         // Forward declaration.  Only used for type checking.
       } else if (ObjCMethodDecl *OMD = dyn_cast<ObjCMethodDecl>(D)){
@@ -110,6 +109,12 @@
         assert(isa<TypeDecl>(D) && "Unknown top level decl");
         // TODO: handle debug info?
       }
+
+      if (ScopedDecl *SD = dyn_cast<ScopedDecl>(D)) {
+        SD = SD->getNextDeclarator();
+        if (SD)
+          HandleTopLevelDecl(SD);
+      }
     }
     
     /// HandleTagDeclDefinition - This callback is invoked each time a TagDecl