Make the use of const with respect to LLVMContext sane.  Hopefully this is the last time, for the
moment, that I will need to make far-reaching changes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74655 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/examples/BrainF/BrainF.cpp b/examples/BrainF/BrainF.cpp
index fa6d667..d3261d7 100644
--- a/examples/BrainF/BrainF.cpp
+++ b/examples/BrainF/BrainF.cpp
@@ -37,7 +37,7 @@
 const char *BrainF::testreg = "test";
 
 Module *BrainF::parse(std::istream *in1, int mem, CompileFlags cf,
-                      const LLVMContext& Context) {
+                      LLVMContext& Context) {
   in       = in1;
   memtotal = mem;
   comflag  = cf;
@@ -48,7 +48,7 @@
   return module;
 }
 
-void BrainF::header(const LLVMContext& C) {
+void BrainF::header(LLVMContext& C) {
   module = new Module("BrainF", C);
 
   //Function prototypes
diff --git a/examples/BrainF/BrainF.h b/examples/BrainF/BrainF.h
index d21d3bb..053ddaa 100644
--- a/examples/BrainF/BrainF.h
+++ b/examples/BrainF/BrainF.h
@@ -40,7 +40,7 @@
     /// On error, it calls abort.
     /// The caller must delete the returned module.
     Module *parse(std::istream *in1, int mem, CompileFlags cf,
-                  const LLVMContext& C);
+                  LLVMContext& C);
 
   protected:
     /// The different symbols in the BrainF language
@@ -66,7 +66,7 @@
     static const char *testreg;
 
     /// Put the brainf function preamble and other fixed pieces of code
-    void header(const LLVMContext& C);
+    void header(LLVMContext& C);
 
     /// The main loop for parsing.  It calls itself recursively
     /// to handle the depth of nesting of "[]".
diff --git a/include/llvm/Assembly/Parser.h b/include/llvm/Assembly/Parser.h
index 616750a..3f60149 100644
--- a/include/llvm/Assembly/Parser.h
+++ b/include/llvm/Assembly/Parser.h
@@ -32,7 +32,7 @@
 Module *ParseAssemblyFile(
   const std::string &Filename, ///< The name of the file to parse
   ParseError &Error,           ///< If not null, an object to return errors in.
-  const LLVMContext& Context         ///< Context in which to allocate globals info.
+  LLVMContext& Context         ///< Context in which to allocate globals info.
 );
 
 /// The function is a secondary interface to the LLVM Assembly Parser. It parses
@@ -45,7 +45,7 @@
   const char *AsmString, ///< The string containing assembly
   Module *M,             ///< A module to add the assembly too.
   ParseError &Error,     ///< If not null, an object to return errors in.
-  const LLVMContext& Context
+  LLVMContext& Context
 );
 
 //===------------------------------------------------------------------------===
diff --git a/include/llvm/Bitcode/Archive.h b/include/llvm/Bitcode/Archive.h
index 85b918e..13583c0 100644
--- a/include/llvm/Bitcode/Archive.h
+++ b/include/llvm/Bitcode/Archive.h
@@ -280,7 +280,7 @@
     /// @brief Create an empty Archive.
     static Archive* CreateEmpty(
       const sys::Path& Filename,///< Name of the archive to (eventually) create.
-      const LLVMContext& C            ///< Context to use for global information
+      LLVMContext& C            ///< Context to use for global information
     );
 
     /// Open an existing archive and load its contents in preparation for
@@ -291,7 +291,7 @@
     /// @brief Open and load an archive file
     static Archive* OpenAndLoad(
       const sys::Path& filePath,  ///< The file path to open and load
-      const LLVMContext& C,       ///< The context to use for global information
+      LLVMContext& C,       ///< The context to use for global information
       std::string* ErrorMessage   ///< An optional error string
     );
 
@@ -313,7 +313,7 @@
     /// @brief Open an existing archive and load its symbols.
     static Archive* OpenAndLoadSymbols(
       const sys::Path& Filename,   ///< Name of the archive file to open
-      const LLVMContext& C,              ///< The context to use for global info
+      LLVMContext& C,              ///< The context to use for global info
       std::string* ErrorMessage=0  ///< An optional error string
     );
 
@@ -453,7 +453,7 @@
   protected:
     /// @brief Construct an Archive for \p filename and optionally  map it
     /// into memory.
-    explicit Archive(const sys::Path& filename, const LLVMContext& C);
+    explicit Archive(const sys::Path& filename, LLVMContext& C);
 
     /// @param data The symbol table data to be parsed
     /// @param len  The length of the symbol table data
@@ -534,7 +534,7 @@
     unsigned firstFileOffset; ///< Offset to first normal file.
     ModuleMap modules;        ///< The modules loaded via symbol lookup.
     ArchiveMember* foreignST; ///< This holds the foreign symbol table.
-    const LLVMContext& Context;     ///< This holds global data.
+    LLVMContext& Context;     ///< This holds global data.
   /// @}
   /// @name Hidden
   /// @{
diff --git a/include/llvm/Bitcode/ReaderWriter.h b/include/llvm/Bitcode/ReaderWriter.h
index 3cde47b..3d33d75 100644
--- a/include/llvm/Bitcode/ReaderWriter.h
+++ b/include/llvm/Bitcode/ReaderWriter.h
@@ -32,13 +32,13 @@
   /// error, this returns null, *does not* take ownership of Buffer, and fills
   /// in *ErrMsg with an error description if ErrMsg is non-null.
   ModuleProvider *getBitcodeModuleProvider(MemoryBuffer *Buffer,
-                                           const LLVMContext& Context,
+                                           LLVMContext& Context,
                                            std::string *ErrMsg = 0);
 
   /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
   /// If an error occurs, this returns null and fills in *ErrMsg if it is
   /// non-null.  This method *never* takes ownership of Buffer.
-  Module *ParseBitcodeFile(MemoryBuffer *Buffer, const LLVMContext& Context,
+  Module *ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext& Context,
                            std::string *ErrMsg = 0);
 
   /// WriteBitcodeToFile - Write the specified module to the specified output
diff --git a/include/llvm/Debugger/Debugger.h b/include/llvm/Debugger/Debugger.h
index d003539..42de356 100644
--- a/include/llvm/Debugger/Debugger.h
+++ b/include/llvm/Debugger/Debugger.h
@@ -96,7 +96,7 @@
     /// the PATH for the specified program, loading it when found.  If the
     /// specified program cannot be found, an exception is thrown to indicate
     /// the error.
-    void loadProgram(const std::string &Path, const LLVMContext& Context);
+    void loadProgram(const std::string &Path, LLVMContext& Context);
 
     /// unloadProgram - If a program is running, kill it, then unload all traces
     /// of the current program.  If no program is loaded, this method silently
diff --git a/include/llvm/LLVMContext.h b/include/llvm/LLVMContext.h
index f0c2200..f018b7e 100644
--- a/include/llvm/LLVMContext.h
+++ b/include/llvm/LLVMContext.h
@@ -198,7 +198,7 @@
 };
 
 /// FOR BACKWARDS COMPATIBILITY - Returns a global context.
-extern const LLVMContext& getGlobalContext();
+extern LLVMContext& getGlobalContext();
 
 }
 
diff --git a/include/llvm/Linker.h b/include/llvm/Linker.h
index 2ab0ed4..2d0c2cd 100644
--- a/include/llvm/Linker.h
+++ b/include/llvm/Linker.h
@@ -67,7 +67,7 @@
     Linker(
         const std::string& progname, ///< name of tool running linker
         const std::string& modulename, ///< name of linker's end-result module
-        const LLVMContext& C, ///< Context for global info
+        LLVMContext& C, ///< Context for global info
         unsigned Flags = 0  ///< ControlFlags (one or more |'d together)
     );
 
@@ -285,7 +285,7 @@
   /// @name Data
   /// @{
   private:
-    const LLVMContext& Context; ///< The context for global information
+    LLVMContext& Context; ///< The context for global information
     Module* Composite; ///< The composite module linked together
     std::vector<sys::Path> LibPaths; ///< The library search paths
     unsigned Flags;    ///< Flags to control optional behavior.
diff --git a/include/llvm/Module.h b/include/llvm/Module.h
index 8efa8e0..7a139cc 100644
--- a/include/llvm/Module.h
+++ b/include/llvm/Module.h
@@ -110,7 +110,7 @@
 /// @name Member Variables
 /// @{
 private:
-  const LLVMContext& Context;    ///< The LLVMContext from which types and
+  LLVMContext& Context;    ///< The LLVMContext from which types and
                                  ///< constants are allocated.
   GlobalListType GlobalList;     ///< The Global Variables in the module
   FunctionListType FunctionList; ///< The Functions in the module
@@ -131,7 +131,7 @@
 public:
   /// The Module constructor. Note that there is no default constructor. You
   /// must provide a name for the module upon construction.
-  explicit Module(const std::string &ModuleID, const LLVMContext& C);
+  explicit Module(const std::string &ModuleID, LLVMContext& C);
   /// The module destructor. This will dropAllReferences.
   ~Module();
 
@@ -162,7 +162,7 @@
 
   /// Get the global data context.
   /// @returns LLVMContext - a container for LLVM's global information
-  const LLVMContext& getContext() const { return Context; }
+  LLVMContext& getContext() const { return Context; }
 
   /// Get any module-scope inline assembly blocks.
   /// @returns a string containing the module-scope inline assembly blocks.
diff --git a/lib/Archive/Archive.cpp b/lib/Archive/Archive.cpp
index 1a8b25a..bb57262 100644
--- a/lib/Archive/Archive.cpp
+++ b/lib/Archive/Archive.cpp
@@ -138,7 +138,7 @@
 // Archive constructor - this is the only constructor that gets used for the
 // Archive class. Everything else (default,copy) is deprecated. This just
 // initializes and maps the file into memory, if requested.
-Archive::Archive(const sys::Path& filename, const LLVMContext& C)
+Archive::Archive(const sys::Path& filename, LLVMContext& C)
   : archPath(filename), members(), mapfile(0), base(0), symTab(), strtab(),
     symTabSize(0), firstFileOffset(0), modules(), foreignST(0), Context(C) {
 }
@@ -208,7 +208,7 @@
 
 // Get just the externally visible defined symbols from the bitcode
 bool llvm::GetBitcodeSymbols(const sys::Path& fName,
-                             const LLVMContext& Context,
+                             LLVMContext& Context,
                              std::vector<std::string>& symbols,
                              std::string* ErrMsg) {
   std::auto_ptr<MemoryBuffer> Buffer(
@@ -240,7 +240,7 @@
 ModuleProvider*
 llvm::GetBitcodeSymbols(const unsigned char *BufPtr, unsigned Length,
                         const std::string& ModuleID,
-                        const LLVMContext& Context,
+                        LLVMContext& Context,
                         std::vector<std::string>& symbols,
                         std::string* ErrMsg) {
   // Get the module provider
diff --git a/lib/Archive/ArchiveInternals.h b/lib/Archive/ArchiveInternals.h
index 15f01b3..d187ed9 100644
--- a/lib/Archive/ArchiveInternals.h
+++ b/lib/Archive/ArchiveInternals.h
@@ -73,13 +73,13 @@
   
   // Get just the externally visible defined symbols from the bitcode
   bool GetBitcodeSymbols(const sys::Path& fName,
-                          const LLVMContext& Context,
+                          LLVMContext& Context,
                           std::vector<std::string>& symbols,
                           std::string* ErrMsg);
   
   ModuleProvider* GetBitcodeSymbols(const unsigned char*Buffer,unsigned Length,
                                     const std::string& ModuleID,
-                                    const LLVMContext& Context,
+                                    LLVMContext& Context,
                                     std::vector<std::string>& symbols,
                                     std::string* ErrMsg);
 }
diff --git a/lib/Archive/ArchiveReader.cpp b/lib/Archive/ArchiveReader.cpp
index 2393554..718d446 100644
--- a/lib/Archive/ArchiveReader.cpp
+++ b/lib/Archive/ArchiveReader.cpp
@@ -327,7 +327,7 @@
 
 // Open and completely load the archive file.
 Archive*
-Archive::OpenAndLoad(const sys::Path& file, const LLVMContext& C, 
+Archive::OpenAndLoad(const sys::Path& file, LLVMContext& C, 
                      std::string* ErrorMessage) {
   std::auto_ptr<Archive> result ( new Archive(file, C));
   if (result->mapToMemory(ErrorMessage))
@@ -442,7 +442,7 @@
 
 // Open the archive and load just the symbol tables
 Archive* Archive::OpenAndLoadSymbols(const sys::Path& file,
-                                     const LLVMContext& C,
+                                     LLVMContext& C,
                                      std::string* ErrorMessage) {
   std::auto_ptr<Archive> result ( new Archive(file, C) );
   if (result->mapToMemory(ErrorMessage))
diff --git a/lib/Archive/ArchiveWriter.cpp b/lib/Archive/ArchiveWriter.cpp
index e840354..881d75b 100644
--- a/lib/Archive/ArchiveWriter.cpp
+++ b/lib/Archive/ArchiveWriter.cpp
@@ -64,7 +64,7 @@
 }
 
 // Create an empty archive.
-Archive* Archive::CreateEmpty(const sys::Path& FilePath, const LLVMContext& C) {
+Archive* Archive::CreateEmpty(const sys::Path& FilePath, LLVMContext& C) {
   Archive* result = new Archive(FilePath, C);
   return result;
 }
diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp
index daf23fe..82d6f8f 100644
--- a/lib/AsmParser/Parser.cpp
+++ b/lib/AsmParser/Parser.cpp
@@ -21,7 +21,7 @@
 using namespace llvm;
 
 Module *llvm::ParseAssemblyFile(const std::string &Filename, ParseError &Err,
-                                const LLVMContext& Context) {
+                                LLVMContext& Context) {
   Err.setFilename(Filename);
 
   std::string ErrorStr;
@@ -39,7 +39,7 @@
 }
 
 Module *llvm::ParseAssemblyString(const char *AsmString, Module *M,
-                                  ParseError &Err, const LLVMContext& Context) {
+                                  ParseError &Err, LLVMContext& Context) {
   Err.setFilename("<string>");
 
   OwningPtr<MemoryBuffer>
diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp
index ce33de0..5943de2 100644
--- a/lib/Bitcode/Reader/BitcodeReader.cpp
+++ b/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -2090,7 +2090,7 @@
 /// getBitcodeModuleProvider - lazy function-at-a-time loading from a file.
 ///
 ModuleProvider *llvm::getBitcodeModuleProvider(MemoryBuffer *Buffer,
-                                               const LLVMContext& Context,
+                                               LLVMContext& Context,
                                                std::string *ErrMsg) {
   BitcodeReader *R = new BitcodeReader(Buffer, Context);
   if (R->ParseBitcode()) {
@@ -2107,7 +2107,7 @@
 
 /// ParseBitcodeFile - Read the specified bitcode file, returning the module.
 /// If an error occurs, return null and fill in *ErrMsg if non-null.
-Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, const LLVMContext& Context, 
+Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, LLVMContext& Context, 
                                std::string *ErrMsg){
   BitcodeReader *R;
   R = static_cast<BitcodeReader*>(getBitcodeModuleProvider(Buffer, Context, 
diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h
index dd12375..662631b 100644
--- a/lib/Bitcode/Reader/BitcodeReader.h
+++ b/lib/Bitcode/Reader/BitcodeReader.h
@@ -86,7 +86,7 @@
 };
 
 class BitcodeReader : public ModuleProvider {
-  const LLVMContext& Context;
+  LLVMContext& Context;
   MemoryBuffer *Buffer;
   BitstreamReader StreamFile;
   BitstreamCursor Stream;
@@ -125,7 +125,7 @@
   /// stream) and what linkage the original function had.
   DenseMap<Function*, std::pair<uint64_t, unsigned> > DeferredFunctionInfo;
 public:
-  explicit BitcodeReader(MemoryBuffer *buffer, const LLVMContext& C)
+  explicit BitcodeReader(MemoryBuffer *buffer, LLVMContext& C)
       : Context(C), Buffer(buffer), ErrorString(0) {
     HasReversedFunctionsWithBodies = false;
   }
diff --git a/lib/Debugger/Debugger.cpp b/lib/Debugger/Debugger.cpp
index 61d8358..77fd2ac 100644
--- a/lib/Debugger/Debugger.cpp
+++ b/lib/Debugger/Debugger.cpp
@@ -47,7 +47,7 @@
 
 static Module *
 getMaterializedModuleProvider(const std::string &Filename,
-                              const LLVMContext& C) {
+                              LLVMContext& C) {
   std::auto_ptr<MemoryBuffer> Buffer;
   Buffer.reset(MemoryBuffer::getFileOrSTDIN(Filename.c_str()));
   if (Buffer.get())
@@ -59,7 +59,7 @@
 /// the PATH for the specified program, loading it when found.  If the
 /// specified program cannot be found, an exception is thrown to indicate the
 /// error.
-void Debugger::loadProgram(const std::string &Filename, const LLVMContext& C) {
+void Debugger::loadProgram(const std::string &Filename, LLVMContext& C) {
   if ((Program = getMaterializedModuleProvider(Filename, C)) ||
       (Program = getMaterializedModuleProvider(Filename+".bc", C)))
     return;   // Successfully loaded the program.
diff --git a/lib/Linker/Linker.cpp b/lib/Linker/Linker.cpp
index 42d4e72..6e0b760 100644
--- a/lib/Linker/Linker.cpp
+++ b/lib/Linker/Linker.cpp
@@ -20,7 +20,7 @@
 using namespace llvm;
 
 Linker::Linker(const std::string& progname, const std::string& modname,
-               const LLVMContext& C, unsigned flags): 
+               LLVMContext& C, unsigned flags): 
   Context(C),
   Composite(new Module(modname, C)),
   LibPaths(),
diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp
index d29b758..24df598 100644
--- a/lib/VMCore/LLVMContext.cpp
+++ b/lib/VMCore/LLVMContext.cpp
@@ -22,7 +22,7 @@
 
 static ManagedStatic<LLVMContext> GlobalContext;
 
-const LLVMContext& llvm::getGlobalContext() {
+LLVMContext& llvm::getGlobalContext() {
   return *GlobalContext;
 }
 
diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp
index 5ccd7cc..f057e81 100644
--- a/lib/VMCore/Module.cpp
+++ b/lib/VMCore/Module.cpp
@@ -55,7 +55,7 @@
 // Primitive Module methods.
 //
 
-Module::Module(const std::string &MID, const LLVMContext& C)
+Module::Module(const std::string &MID, LLVMContext& C)
   : Context(C), ModuleID(MID), DataLayout("")  {
   ValSymTab = new ValueSymbolTable();
   TypeSymTab = new TypeSymbolTable();
diff --git a/tools/bugpoint/BugDriver.cpp b/tools/bugpoint/BugDriver.cpp
index 93b09fb..847de1f 100644
--- a/tools/bugpoint/BugDriver.cpp
+++ b/tools/bugpoint/BugDriver.cpp
@@ -65,7 +65,7 @@
 
 BugDriver::BugDriver(const char *toolname, bool as_child, bool find_bugs,
                      unsigned timeout, unsigned memlimit,
-                     const LLVMContext& ctxt)
+                     LLVMContext& ctxt)
   : Context(ctxt), ToolName(toolname), ReferenceOutputFile(OutputFile),
     Program(0), Interpreter(0), SafeInterpreter(0), gcc(0),
     run_as_child(as_child), run_find_bugs(find_bugs), Timeout(timeout), 
@@ -76,7 +76,7 @@
 /// return it, or return null if not possible.
 ///
 Module *llvm::ParseInputFile(const std::string &Filename,
-                             const LLVMContext& Ctxt) {
+                             LLVMContext& Ctxt) {
   std::auto_ptr<MemoryBuffer> Buffer(MemoryBuffer::getFileOrSTDIN(Filename));
   Module *Result = 0;
   if (Buffer.get())
diff --git a/tools/bugpoint/BugDriver.h b/tools/bugpoint/BugDriver.h
index 34267d5..d637c24 100644
--- a/tools/bugpoint/BugDriver.h
+++ b/tools/bugpoint/BugDriver.h
@@ -43,7 +43,7 @@
 extern bool BugpointIsInterrupted;
 
 class BugDriver {
-  const LLVMContext& Context;
+  LLVMContext& Context;
   const std::string ToolName;  // Name of bugpoint
   std::string ReferenceOutputFile; // Name of `good' output file
   Module *Program;             // The raw program, linked together
@@ -62,11 +62,11 @@
 
 public:
   BugDriver(const char *toolname, bool as_child, bool find_bugs,
-            unsigned timeout, unsigned memlimit, const LLVMContext& ctxt);
+            unsigned timeout, unsigned memlimit, LLVMContext& ctxt);
 
   const std::string &getToolName() const { return ToolName; }
 
-  const LLVMContext& getContext() { return Context; }
+  LLVMContext& getContext() { return Context; }
 
   // Set up methods... these methods are used to copy information about the
   // command line arguments into instance variables of BugDriver.
@@ -295,7 +295,7 @@
 /// return it, or return null if not possible.
 ///
 Module *ParseInputFile(const std::string &InputFilename,
-                       const LLVMContext& ctxt);
+                       LLVMContext& ctxt);
 
 
 /// getPassesString - Turn a list of passes into a string which indicates the
diff --git a/tools/llvm-db/CLIDebugger.cpp b/tools/llvm-db/CLIDebugger.cpp
index 3caa2e6..31476f7 100644
--- a/tools/llvm-db/CLIDebugger.cpp
+++ b/tools/llvm-db/CLIDebugger.cpp
@@ -22,7 +22,7 @@
 /// CLIDebugger constructor - This initializes the debugger to its default
 /// state, and initializes the command table.
 ///
-CLIDebugger::CLIDebugger(const LLVMContext& ctxt)
+CLIDebugger::CLIDebugger(LLVMContext& ctxt)
   : Context(ctxt), TheProgramInfo(0), TheRuntimeInfo(0),
     Prompt("(llvm-db) "), ListSize(10) {
   // Initialize instance variables
diff --git a/tools/llvm-db/CLIDebugger.h b/tools/llvm-db/CLIDebugger.h
index a5c73bd..9904559 100644
--- a/tools/llvm-db/CLIDebugger.h
+++ b/tools/llvm-db/CLIDebugger.h
@@ -29,7 +29,7 @@
   /// CLIDebugger - This class implements the command line interface for the
   /// LLVM debugger.
   class CLIDebugger {
-    const LLVMContext& Context;
+    LLVMContext& Context;
     
     /// Dbg - The low-level LLVM debugger object that we use to do our dirty
     /// work.
@@ -82,7 +82,7 @@
     const SourceLanguage *CurrentLanguage;
 
   public:
-    CLIDebugger(const LLVMContext& ctxt);
+    CLIDebugger(LLVMContext& ctxt);
 
     /// getDebugger - Return the current LLVM debugger implementation being
     /// used.
diff --git a/tools/llvm-link/llvm-link.cpp b/tools/llvm-link/llvm-link.cpp
index 818df14..f65e602 100644
--- a/tools/llvm-link/llvm-link.cpp
+++ b/tools/llvm-link/llvm-link.cpp
@@ -49,7 +49,7 @@
 // searches the link path for the specified file to try to find it...
 //
 static inline std::auto_ptr<Module> LoadFile(const std::string &FN, 
-                                             const LLVMContext& Context) {
+                                             LLVMContext& Context) {
   sys::Path Filename;
   if (!Filename.set(FN)) {
     cerr << "Invalid file name: '" << FN << "'\n";
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index faac33b..6f5e6bc 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -69,7 +69,7 @@
 }
 
 
-LTOCodeGenerator::LTOCodeGenerator(const LLVMContext& Context) 
+LTOCodeGenerator::LTOCodeGenerator(LLVMContext& Context) 
     : _context(Context),
       _linker("LinkTimeOptimizer", "ld-temp.o", _context), _target(NULL),
       _emitDwarfDebugInfo(false), _scopeRestrictionsDone(false),
diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h
index 4603c35..7b0c284 100644
--- a/tools/lto/LTOCodeGenerator.h
+++ b/tools/lto/LTOCodeGenerator.h
@@ -31,7 +31,7 @@
 public:
     static const char*        getVersionString();
     
-                            LTOCodeGenerator(const llvm::LLVMContext& Context);
+                            LTOCodeGenerator(llvm::LLVMContext& Context);
                             ~LTOCodeGenerator();
                             
     bool                addModule(class LTOModule*, std::string& errMsg);
@@ -54,7 +54,7 @@
     
     typedef llvm::StringMap<uint8_t> StringSet;
 
-    const llvm::LLVMContext&          _context;
+    llvm::LLVMContext&          _context;
     llvm::Linker                _linker;
     llvm::TargetMachine*        _target;
     bool                        _emitDwarfDebugInfo;
diff --git a/tools/lto/LTOModule.cpp b/tools/lto/LTOModule.cpp
index 3da095d..157928c 100644
--- a/tools/lto/LTOModule.cpp
+++ b/tools/lto/LTOModule.cpp
@@ -87,7 +87,7 @@
 }
 
 LTOModule* LTOModule::makeLTOModule(const char* path,
-                                    const LLVMContext& Context,
+                                    LLVMContext& Context,
                                     std::string& errMsg)
 {
     OwningPtr<MemoryBuffer> buffer(MemoryBuffer::getFile(path, &errMsg));
@@ -113,7 +113,7 @@
 
 
 LTOModule* LTOModule::makeLTOModule(const void* mem, size_t length, 
-                                    const LLVMContext& Context,
+                                    LLVMContext& Context,
                                     std::string& errMsg)
 {
     OwningPtr<MemoryBuffer> buffer(makeBuffer(mem, length));
@@ -142,7 +142,7 @@
 }
 
 LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer,
-                                    const LLVMContext& Context,
+                                    LLVMContext& Context,
                                     std::string& errMsg)
 {
     // parse bitcode buffer
diff --git a/tools/lto/LTOModule.h b/tools/lto/LTOModule.h
index d7b992f..367ad10 100644
--- a/tools/lto/LTOModule.h
+++ b/tools/lto/LTOModule.h
@@ -52,10 +52,10 @@
                                                     const char* triplePrefix);
 
     static LTOModule*        makeLTOModule(const char* path,
-                                          const llvm::LLVMContext& Context,
+                                          llvm::LLVMContext& Context,
                                           std::string& errMsg);
     static LTOModule*        makeLTOModule(const void* mem, size_t length,
-                                           const llvm::LLVMContext& Context,
+                                           llvm::LLVMContext& Context,
                                            std::string& errMsg);
 
     const char*              getTargetTriple();
@@ -91,7 +91,7 @@
                                                     const char* triplePrefix);
 
     static LTOModule*       makeLTOModule(llvm::MemoryBuffer* buffer,
-                                          const llvm::LLVMContext& Context,
+                                          llvm::LLVMContext& Context,
                                                         std::string& errMsg);
     static llvm::MemoryBuffer* makeBuffer(const void* mem, size_t length);