Refine placement of LangOptions object in CompilerInvocation by adding a new baseclass CompilerInvocationBase with a custom copy constructor.  This ensures that whenever the CompilerInvocation object's copy constructor is used we always clone the LangOptions object.

llvm-svn: 144973
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp
index 13be408..738facf 100644
--- a/clang/lib/Frontend/CompilerInvocation.cpp
+++ b/clang/lib/Frontend/CompilerInvocation.cpp
@@ -34,12 +34,11 @@
 // Initialization.
 //===----------------------------------------------------------------------===//
 
-CompilerInvocation::CompilerInvocation()
+CompilerInvocationBase::CompilerInvocationBase()
   : LangOpts(new LangOptions()) {}
 
-void CompilerInvocation::setLangOpts(LangOptions *LOpts) {
-  LangOpts = LOpts;
-}
+CompilerInvocationBase::CompilerInvocationBase(const CompilerInvocationBase &X)
+  : LangOpts(new LangOptions(*X.getLangOpts())) {}
 
 //===----------------------------------------------------------------------===//
 // Utility functions.