most of this is plumbing to get CompileOptions down into 
CodeGenModule.  Once there, add a new NoCommon option to
it and implement -fno-common.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67735 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/clang-cc/Backend.cpp b/tools/clang-cc/Backend.cpp
index 459bd69..c5eeb64 100644
--- a/tools/clang-cc/Backend.cpp
+++ b/tools/clang-cc/Backend.cpp
@@ -85,7 +85,7 @@
       OutputFile(outfile), 
       LLVMIRGeneration("LLVM IR Generation Time"),
       CodeGenerationTime("Code Generation Time"),
-      Gen(CreateLLVMCodeGen(Diags, langopts, InputFile, compopts.DebugInfo)),
+      Gen(CreateLLVMCodeGen(Diags, InputFile, compopts)),
       TheModule(0), TheTargetData(0), AsmOutStream(0), ModuleProvider(0),
       CodeGenPasses(0), PerModulePasses(0), PerFunctionPasses(0) {
       
diff --git a/tools/clang-cc/clang.cpp b/tools/clang-cc/clang.cpp
index e0a90a3..8beecd0 100644
--- a/tools/clang-cc/clang.cpp
+++ b/tools/clang-cc/clang.cpp
@@ -1235,6 +1235,10 @@
 static llvm::cl::opt<bool>
 OptSize("Os", llvm::cl::desc("Optimize for size"));
 
+static llvm::cl::opt<bool>
+NoCommon("fno-common",
+         llvm::cl::desc("Compile common globals like normal definitions"));
+
 // It might be nice to add bounds to the CommandLine library directly.
 struct OptLevelParser : public llvm::cl::parser<unsigned> {
   bool parse(llvm::cl::Option &O, const char *ArgName,
@@ -1281,6 +1285,8 @@
   Opts.Features.insert(Opts.Features.end(),
                        TargetFeatures.begin(), TargetFeatures.end());
   
+  Opts.NoCommon = NoCommon | LangOpts.CPlusPlus;
+  
   // Handle -ftime-report.
   Opts.TimePasses = TimeReport;
 }