diff --git a/examples/BrainF/BrainF.cpp b/examples/BrainF/BrainF.cpp index 0caff13e81e..fa6d6675e77 100644 --- a/examples/BrainF/BrainF.cpp +++ b/examples/BrainF/BrainF.cpp @@ -37,7 +37,7 @@ const char *BrainF::label = "brainf"; const char *BrainF::testreg = "test"; Module *BrainF::parse(std::istream *in1, int mem, CompileFlags cf, - LLVMContext* Context) { + const LLVMContext& Context) { in = in1; memtotal = mem; comflag = cf; @@ -48,7 +48,7 @@ Module *BrainF::parse(std::istream *in1, int mem, CompileFlags cf, return module; } -void BrainF::header(LLVMContext* C) { +void BrainF::header(const LLVMContext& C) { module = new Module("BrainF", C); //Function prototypes diff --git a/examples/BrainF/BrainF.h b/examples/BrainF/BrainF.h index d0fb1b1de0e..d21d3bb8913 100644 --- a/examples/BrainF/BrainF.h +++ b/examples/BrainF/BrainF.h @@ -39,7 +39,8 @@ class BrainF { /// containing the resulting code. /// On error, it calls abort. /// The caller must delete the returned module. - Module *parse(std::istream *in1, int mem, CompileFlags cf, LLVMContext* C); + Module *parse(std::istream *in1, int mem, CompileFlags cf, + const LLVMContext& C); protected: /// The different symbols in the BrainF language @@ -65,7 +66,7 @@ class BrainF { static const char *testreg; /// Put the brainf function preamble and other fixed pieces of code - void header(LLVMContext* C); + void header(const LLVMContext& C); /// The main loop for parsing. It calls itself recursively /// to handle the depth of nesting of "[]". diff --git a/examples/BrainF/BrainFDriver.cpp b/examples/BrainF/BrainFDriver.cpp index 0868d735066..4eaa4940e70 100644 --- a/examples/BrainF/BrainFDriver.cpp +++ b/examples/BrainF/BrainFDriver.cpp @@ -126,7 +126,7 @@ int main(int argc, char **argv) { //Read the BrainF program BrainF bf; - Module *mod = bf.parse(in, 65536, cf, &Context); //64 KiB + Module *mod = bf.parse(in, 65536, cf, Context); //64 KiB if (in != &std::cin) {delete in;} addMainFunction(mod); diff --git a/examples/Fibonacci/fibonacci.cpp b/examples/Fibonacci/fibonacci.cpp index 58c0dcdaf5c..c3431fc3527 100644 --- a/examples/Fibonacci/fibonacci.cpp +++ b/examples/Fibonacci/fibonacci.cpp @@ -94,7 +94,7 @@ int main(int argc, char **argv) { LLVMContext Context; // Create some module to put our function into it. - Module *M = new Module("test", &Context); + Module *M = new Module("test", Context); // We are about to create the "fib" function: Function *FibF = CreateFibFunction(M); diff --git a/examples/HowToUseJIT/HowToUseJIT.cpp b/examples/HowToUseJIT/HowToUseJIT.cpp index f11c3e256e6..67345479162 100644 --- a/examples/HowToUseJIT/HowToUseJIT.cpp +++ b/examples/HowToUseJIT/HowToUseJIT.cpp @@ -55,7 +55,7 @@ int main() { LLVMContext Context; // Create some module to put our function into it. - Module *M = new Module("test", &Context); + Module *M = new Module("test", Context); // Create the add1 function entry and insert this entry into module M. The // function will have a return type of "int" and take an argument of "int". diff --git a/examples/Kaleidoscope/toy.cpp b/examples/Kaleidoscope/toy.cpp index 9ca6035156c..612cfa547ca 100644 --- a/examples/Kaleidoscope/toy.cpp +++ b/examples/Kaleidoscope/toy.cpp @@ -1099,7 +1099,7 @@ int main() { getNextToken(); // Make the module, which holds all the code. - TheModule = new Module("my cool jit", &Context); + TheModule = new Module("my cool jit", Context); // Create the JIT. TheExecutionEngine = ExecutionEngine::create(TheModule); diff --git a/examples/ModuleMaker/ModuleMaker.cpp b/examples/ModuleMaker/ModuleMaker.cpp index 322835e04f2..59a86d031d2 100644 --- a/examples/ModuleMaker/ModuleMaker.cpp +++ b/examples/ModuleMaker/ModuleMaker.cpp @@ -27,7 +27,7 @@ int main() { // Create the "module" or "program" or "translation unit" to hold the // function - Module *M = new Module("test", &Context); + Module *M = new Module("test", Context); // Create the main function: first create the type 'int ()' FunctionType *FT = FunctionType::get(Type::Int32Ty, /*not vararg*/false); diff --git a/examples/ParallelJIT/ParallelJIT.cpp b/examples/ParallelJIT/ParallelJIT.cpp index 858cd52de6a..eadd0f58e5d 100644 --- a/examples/ParallelJIT/ParallelJIT.cpp +++ b/examples/ParallelJIT/ParallelJIT.cpp @@ -236,7 +236,7 @@ int main() { LLVMContext Context; // Create some module to put our function into it. - Module *M = new Module("test", &Context); + Module *M = new Module("test", Context); Function* add1F = createAdd1( M ); Function* fibF = CreateFibFunction( M ); diff --git a/include/llvm-c/lto.h b/include/llvm-c/lto.h index 5d92fc5af01..d9a2e5ce686 100644 --- a/include/llvm-c/lto.h +++ b/include/llvm-c/lto.h @@ -58,6 +58,7 @@ typedef struct LTOModule* lto_module_t; /** opaque reference to a code generator */ typedef struct LTOCodeGenerator* lto_code_gen_t; +typedef struct LTOContext* lto_context_t; #ifdef __cplusplus extern "C" { @@ -76,7 +77,6 @@ lto_get_version(void); extern const char* lto_get_error_message(void); - /** * Checks if a file is a loadable object file. */ diff --git a/include/llvm/Assembly/Parser.h b/include/llvm/Assembly/Parser.h index 2a5bac7a704..616750ae3ef 100644 --- a/include/llvm/Assembly/Parser.h +++ b/include/llvm/Assembly/Parser.h @@ -32,7 +32,7 @@ class LLVMContext; Module *ParseAssemblyFile( const std::string &Filename, ///< The name of the file to parse ParseError &Error, ///< If not null, an object to return errors in. - LLVMContext* Context ///< Context in which to allocate globals info. + const 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 @@ Module *ParseAssemblyString( 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. - LLVMContext* Context + const LLVMContext& Context ); //===------------------------------------------------------------------------=== diff --git a/include/llvm/Bitcode/Archive.h b/include/llvm/Bitcode/Archive.h index c188df88241..85b918ed32e 100644 --- a/include/llvm/Bitcode/Archive.h +++ b/include/llvm/Bitcode/Archive.h @@ -280,7 +280,7 @@ class Archive { /// @brief Create an empty Archive. static Archive* CreateEmpty( const sys::Path& Filename,///< Name of the archive to (eventually) create. - LLVMContext* C ///< Context to use for global information + const LLVMContext& C ///< Context to use for global information ); /// Open an existing archive and load its contents in preparation for @@ -291,7 +291,7 @@ class Archive { /// @brief Open and load an archive file static Archive* OpenAndLoad( const sys::Path& filePath, ///< The file path to open and load - LLVMContext* C, ///< The context to use for global information + const LLVMContext& C, ///< The context to use for global information std::string* ErrorMessage ///< An optional error string ); @@ -313,7 +313,7 @@ class Archive { /// @brief Open an existing archive and load its symbols. static Archive* OpenAndLoadSymbols( const sys::Path& Filename, ///< Name of the archive file to open - LLVMContext* C, ///< The context to use for global info + const LLVMContext& C, ///< The context to use for global info std::string* ErrorMessage=0 ///< An optional error string ); @@ -453,7 +453,7 @@ class Archive { protected: /// @brief Construct an Archive for \p filename and optionally map it /// into memory. - explicit Archive(const sys::Path& filename, LLVMContext* C); + explicit Archive(const sys::Path& filename, const LLVMContext& C); /// @param data The symbol table data to be parsed /// @param len The length of the symbol table data @@ -534,7 +534,7 @@ class Archive { unsigned firstFileOffset; ///< Offset to first normal file. ModuleMap modules; ///< The modules loaded via symbol lookup. ArchiveMember* foreignST; ///< This holds the foreign symbol table. - LLVMContext* Context; ///< This holds global data. + const LLVMContext& Context; ///< This holds global data. /// @} /// @name Hidden /// @{ diff --git a/include/llvm/Bitcode/ReaderWriter.h b/include/llvm/Bitcode/ReaderWriter.h index a7811876ff6..3cde47bf77e 100644 --- a/include/llvm/Bitcode/ReaderWriter.h +++ b/include/llvm/Bitcode/ReaderWriter.h @@ -32,13 +32,13 @@ namespace llvm { /// 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, - LLVMContext* Context, + const 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, LLVMContext* Context, + Module *ParseBitcodeFile(MemoryBuffer *Buffer, const 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 ed04ed533ad..d003539e7e2 100644 --- a/include/llvm/Debugger/Debugger.h +++ b/include/llvm/Debugger/Debugger.h @@ -96,7 +96,7 @@ namespace llvm { /// 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, LLVMContext* Context); + void loadProgram(const std::string &Path, const 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 1d95502bcd6..f0c2200c7a3 100644 --- a/include/llvm/LLVMContext.h +++ b/include/llvm/LLVMContext.h @@ -198,7 +198,7 @@ public: }; /// FOR BACKWARDS COMPATIBILITY - Returns a global context. -LLVMContext* getGlobalContext(); +extern const LLVMContext& getGlobalContext(); } diff --git a/include/llvm/LinkAllVMCore.h b/include/llvm/LinkAllVMCore.h index 3c4b9c447b9..e5a51971f16 100644 --- a/include/llvm/LinkAllVMCore.h +++ b/include/llvm/LinkAllVMCore.h @@ -16,6 +16,7 @@ #ifndef LLVM_LINKALLVMCORE_H #define LLVM_LINKALLVMCORE_H +#include "llvm/LLVMContext.h" #include "llvm/Module.h" #include "llvm/Instructions.h" #include "llvm/IntrinsicInst.h" @@ -44,7 +45,7 @@ namespace { // to know that getenv() never returns -1, this will do the job. if (std::getenv("bar") != (char*) -1) return; - llvm::Module* M = new llvm::Module("", 0); + llvm::Module* M = new llvm::Module("", llvm::getGlobalContext()); (void)new llvm::UnreachableInst(); (void) llvm::createVerifierPass(); (void) new llvm::Mangler(*M,""); diff --git a/include/llvm/Linker.h b/include/llvm/Linker.h index 8389dc770ef..2ab0ed47059 100644 --- a/include/llvm/Linker.h +++ b/include/llvm/Linker.h @@ -67,7 +67,7 @@ class Linker { Linker( const std::string& progname, ///< name of tool running linker const std::string& modulename, ///< name of linker's end-result module - LLVMContext* C, ///< Context for global info + const LLVMContext& C, ///< Context for global info unsigned Flags = 0 ///< ControlFlags (one or more |'d together) ); @@ -285,7 +285,7 @@ class Linker { /// @name Data /// @{ private: - LLVMContext* Context; ///< The context for global information + const LLVMContext& Context; ///< The context for global information Module* Composite; ///< The composite module linked together std::vector 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 8370ffb872c..8efa8e0e0eb 100644 --- a/include/llvm/Module.h +++ b/include/llvm/Module.h @@ -110,7 +110,7 @@ public: /// @name Member Variables /// @{ private: - LLVMContext* Context; ///< The LLVMContext from which types and + const 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 @@ private: 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, LLVMContext* C); + explicit Module(const std::string &ModuleID, const LLVMContext& C); /// The module destructor. This will dropAllReferences. ~Module(); @@ -162,7 +162,7 @@ public: /// Get the global data context. /// @returns LLVMContext - a container for LLVM's global information - LLVMContext* getContext() const { return Context; } + const 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 e6903b607fb..1a8b25ace25 100644 --- a/lib/Archive/Archive.cpp +++ b/lib/Archive/Archive.cpp @@ -138,7 +138,7 @@ bool ArchiveMember::replaceWith(const sys::Path& newFile, std::string* ErrMsg) { // 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, LLVMContext* C) +Archive::Archive(const sys::Path& filename, const LLVMContext& C) : archPath(filename), members(), mapfile(0), base(0), symTab(), strtab(), symTabSize(0), firstFileOffset(0), modules(), foreignST(0), Context(C) { } @@ -208,7 +208,7 @@ static void getSymbols(Module*M, std::vector& symbols) { // Get just the externally visible defined symbols from the bitcode bool llvm::GetBitcodeSymbols(const sys::Path& fName, - LLVMContext* Context, + const LLVMContext& Context, std::vector& symbols, std::string* ErrMsg) { std::auto_ptr Buffer( @@ -240,7 +240,7 @@ bool llvm::GetBitcodeSymbols(const sys::Path& fName, ModuleProvider* llvm::GetBitcodeSymbols(const unsigned char *BufPtr, unsigned Length, const std::string& ModuleID, - LLVMContext* Context, + const LLVMContext& Context, std::vector& symbols, std::string* ErrMsg) { // Get the module provider diff --git a/lib/Archive/ArchiveInternals.h b/lib/Archive/ArchiveInternals.h index cdd8e35ca0d..15f01b3690e 100644 --- a/lib/Archive/ArchiveInternals.h +++ b/lib/Archive/ArchiveInternals.h @@ -73,13 +73,13 @@ namespace llvm { // Get just the externally visible defined symbols from the bitcode bool GetBitcodeSymbols(const sys::Path& fName, - LLVMContext* Context, + const LLVMContext& Context, std::vector& symbols, std::string* ErrMsg); ModuleProvider* GetBitcodeSymbols(const unsigned char*Buffer,unsigned Length, const std::string& ModuleID, - LLVMContext* Context, + const LLVMContext& Context, std::vector& symbols, std::string* ErrMsg); } diff --git a/lib/Archive/ArchiveReader.cpp b/lib/Archive/ArchiveReader.cpp index 4e3e28166ca..2393554ede8 100644 --- a/lib/Archive/ArchiveReader.cpp +++ b/lib/Archive/ArchiveReader.cpp @@ -327,7 +327,7 @@ Archive::loadArchive(std::string* error) { // Open and completely load the archive file. Archive* -Archive::OpenAndLoad(const sys::Path& file, LLVMContext* C, +Archive::OpenAndLoad(const sys::Path& file, const LLVMContext& C, std::string* ErrorMessage) { std::auto_ptr result ( new Archive(file, C)); if (result->mapToMemory(ErrorMessage)) @@ -441,7 +441,8 @@ Archive::loadSymbolTable(std::string* ErrorMsg) { } // Open the archive and load just the symbol tables -Archive* Archive::OpenAndLoadSymbols(const sys::Path& file, LLVMContext* C, +Archive* Archive::OpenAndLoadSymbols(const sys::Path& file, + const LLVMContext& C, std::string* ErrorMessage) { std::auto_ptr result ( new Archive(file, C) ); if (result->mapToMemory(ErrorMessage)) diff --git a/lib/Archive/ArchiveWriter.cpp b/lib/Archive/ArchiveWriter.cpp index 641e3324d63..e84035404bf 100644 --- a/lib/Archive/ArchiveWriter.cpp +++ b/lib/Archive/ArchiveWriter.cpp @@ -64,7 +64,7 @@ static inline unsigned numVbrBytes(unsigned num) { } // Create an empty archive. -Archive* Archive::CreateEmpty(const sys::Path& FilePath, LLVMContext* C) { +Archive* Archive::CreateEmpty(const sys::Path& FilePath, const LLVMContext& C) { Archive* result = new Archive(FilePath, C); return result; } diff --git a/lib/AsmParser/Parser.cpp b/lib/AsmParser/Parser.cpp index 7759c70d73d..daf23fe748b 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, - LLVMContext* Context) { + const LLVMContext& Context) { Err.setFilename(Filename); std::string ErrorStr; @@ -39,7 +39,7 @@ Module *llvm::ParseAssemblyFile(const std::string &Filename, ParseError &Err, } Module *llvm::ParseAssemblyString(const char *AsmString, Module *M, - ParseError &Err, LLVMContext* Context) { + ParseError &Err, const LLVMContext& Context) { Err.setFilename(""); OwningPtr diff --git a/lib/Bitcode/Reader/BitReader.cpp b/lib/Bitcode/Reader/BitReader.cpp index 2baf71bb541..273975a59be 100644 --- a/lib/Bitcode/Reader/BitReader.cpp +++ b/lib/Bitcode/Reader/BitReader.cpp @@ -22,7 +22,7 @@ int LLVMParseBitcode(LLVMMemoryBufferRef MemBuf, LLVMContextRef ContextRef, LLVMModuleRef *OutModule, char **OutMessage) { std::string Message; - *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), unwrap(ContextRef), + *OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef), &Message)); if (!*OutModule) { if (OutMessage) @@ -42,7 +42,7 @@ int LLVMGetBitcodeModuleProvider(LLVMMemoryBufferRef MemBuf, char **OutMessage) { std::string Message; - *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), unwrap(ContextRef), + *OutMP = wrap(getBitcodeModuleProvider(unwrap(MemBuf), *unwrap(ContextRef), &Message)); if (!*OutMP) { if (OutMessage) diff --git a/lib/Bitcode/Reader/BitcodeReader.cpp b/lib/Bitcode/Reader/BitcodeReader.cpp index 7cf03242990..ce33de04f7e 100644 --- a/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/lib/Bitcode/Reader/BitcodeReader.cpp @@ -2090,7 +2090,7 @@ Module *BitcodeReader::releaseModule(std::string *ErrInfo) { /// getBitcodeModuleProvider - lazy function-at-a-time loading from a file. /// ModuleProvider *llvm::getBitcodeModuleProvider(MemoryBuffer *Buffer, - LLVMContext* Context, + const LLVMContext& Context, std::string *ErrMsg) { BitcodeReader *R = new BitcodeReader(Buffer, Context); if (R->ParseBitcode()) { @@ -2107,7 +2107,7 @@ ModuleProvider *llvm::getBitcodeModuleProvider(MemoryBuffer *Buffer, /// 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, LLVMContext* Context, +Module *llvm::ParseBitcodeFile(MemoryBuffer *Buffer, const LLVMContext& Context, std::string *ErrMsg){ BitcodeReader *R; R = static_cast(getBitcodeModuleProvider(Buffer, Context, diff --git a/lib/Bitcode/Reader/BitcodeReader.h b/lib/Bitcode/Reader/BitcodeReader.h index 498a34ae01b..dd12375cc43 100644 --- a/lib/Bitcode/Reader/BitcodeReader.h +++ b/lib/Bitcode/Reader/BitcodeReader.h @@ -86,7 +86,7 @@ public: }; class BitcodeReader : public ModuleProvider { - LLVMContext* Context; + const LLVMContext& Context; MemoryBuffer *Buffer; BitstreamReader StreamFile; BitstreamCursor Stream; @@ -125,7 +125,7 @@ class BitcodeReader : public ModuleProvider { /// stream) and what linkage the original function had. DenseMap > DeferredFunctionInfo; public: - explicit BitcodeReader(MemoryBuffer *buffer, LLVMContext* C) + explicit BitcodeReader(MemoryBuffer *buffer, const LLVMContext& C) : Context(C), Buffer(buffer), ErrorString(0) { HasReversedFunctionsWithBodies = false; } diff --git a/lib/Debugger/Debugger.cpp b/lib/Debugger/Debugger.cpp index dbfbbed1dc5..61d8358d08d 100644 --- a/lib/Debugger/Debugger.cpp +++ b/lib/Debugger/Debugger.cpp @@ -46,7 +46,8 @@ std::string Debugger::getProgramPath() const { } static Module * -getMaterializedModuleProvider(const std::string &Filename, LLVMContext* C) { +getMaterializedModuleProvider(const std::string &Filename, + const LLVMContext& C) { std::auto_ptr Buffer; Buffer.reset(MemoryBuffer::getFileOrSTDIN(Filename.c_str())); if (Buffer.get()) @@ -58,7 +59,7 @@ getMaterializedModuleProvider(const std::string &Filename, LLVMContext* C) { /// 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, LLVMContext* C) { +void Debugger::loadProgram(const std::string &Filename, const 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 d0d69d072c1..42d4e724db4 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, - LLVMContext* C, unsigned flags): + const LLVMContext& C, unsigned flags): Context(C), Composite(new Module(modname, C)), LibPaths(), diff --git a/lib/VMCore/Core.cpp b/lib/VMCore/Core.cpp index 1c0a8f7af25..9f92e6f2949 100644 --- a/lib/VMCore/Core.cpp +++ b/lib/VMCore/Core.cpp @@ -53,7 +53,7 @@ void LLVMContextDispose(LLVMContextRef C) { /*===-- Operations on modules ---------------------------------------------===*/ LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID, LLVMContextRef C) { - return wrap(new Module(ModuleID, unwrap(C))); + return wrap(new Module(ModuleID, *unwrap(C))); } void LLVMDisposeModule(LLVMModuleRef M) { diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index 09c7fcc8cf1..d29b758ea74 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/lib/VMCore/LLVMContext.cpp @@ -22,8 +22,8 @@ using namespace llvm; static ManagedStatic GlobalContext; -LLVMContext* getGlobalContext() { - return &*GlobalContext; +const LLVMContext& llvm::getGlobalContext() { + return *GlobalContext; } LLVMContext::LLVMContext() : pImpl(new LLVMContextImpl()) { } diff --git a/lib/VMCore/Module.cpp b/lib/VMCore/Module.cpp index 96a25a5d0d2..5ccd7ccfa35 100644 --- a/lib/VMCore/Module.cpp +++ b/lib/VMCore/Module.cpp @@ -55,7 +55,7 @@ template class SymbolTableListTraits; // Primitive Module methods. // -Module::Module(const std::string &MID, LLVMContext* C) +Module::Module(const std::string &MID, const 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 340522a4437..93b09fb381c 100644 --- a/tools/bugpoint/BugDriver.cpp +++ b/tools/bugpoint/BugDriver.cpp @@ -64,7 +64,8 @@ std::string llvm::getPassesString(const std::vector &Passes) { } BugDriver::BugDriver(const char *toolname, bool as_child, bool find_bugs, - unsigned timeout, unsigned memlimit, LLVMContext* ctxt) + unsigned timeout, unsigned memlimit, + const 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), @@ -74,7 +75,8 @@ BugDriver::BugDriver(const char *toolname, bool as_child, bool find_bugs, /// ParseInputFile - Given a bitcode or assembly input filename, parse and /// return it, or return null if not possible. /// -Module *llvm::ParseInputFile(const std::string &Filename, LLVMContext* Ctxt) { +Module *llvm::ParseInputFile(const std::string &Filename, + const LLVMContext& Ctxt) { std::auto_ptr Buffer(MemoryBuffer::getFileOrSTDIN(Filename)); Module *Result = 0; if (Buffer.get()) diff --git a/tools/bugpoint/BugDriver.h b/tools/bugpoint/BugDriver.h index 4c81cc2a2b6..34267d55a62 100644 --- a/tools/bugpoint/BugDriver.h +++ b/tools/bugpoint/BugDriver.h @@ -43,7 +43,7 @@ extern bool DisableSimplifyCFG; extern bool BugpointIsInterrupted; class BugDriver { - LLVMContext* Context; + const 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 @@ class BugDriver { public: BugDriver(const char *toolname, bool as_child, bool find_bugs, - unsigned timeout, unsigned memlimit, LLVMContext* ctxt); + unsigned timeout, unsigned memlimit, const LLVMContext& ctxt); const std::string &getToolName() const { return ToolName; } - LLVMContext* getContext() { return Context; } + const LLVMContext& getContext() { return Context; } // Set up methods... these methods are used to copy information about the // command line arguments into instance variables of BugDriver. @@ -294,7 +294,8 @@ private: /// ParseInputFile - Given a bitcode or assembly input filename, parse and /// return it, or return null if not possible. /// -Module *ParseInputFile(const std::string &InputFilename, LLVMContext* ctxt); +Module *ParseInputFile(const std::string &InputFilename, + const LLVMContext& ctxt); /// getPassesString - Turn a list of passes into a string which indicates the diff --git a/tools/bugpoint/bugpoint.cpp b/tools/bugpoint/bugpoint.cpp index 57007e035c4..3365b227b1f 100644 --- a/tools/bugpoint/bugpoint.cpp +++ b/tools/bugpoint/bugpoint.cpp @@ -76,7 +76,7 @@ int main(int argc, char **argv) { sys::SetInterruptFunction(BugpointInterruptFunction); LLVMContext Context; - BugDriver D(argv[0], AsChild, FindBugs, TimeoutValue, MemoryLimit, &Context); + BugDriver D(argv[0], AsChild, FindBugs, TimeoutValue, MemoryLimit, Context); if (D.addSources(InputFilenames)) return 1; D.addPasses(PassList.begin(), PassList.end()); diff --git a/tools/llc/llc.cpp b/tools/llc/llc.cpp index d0d88c505f7..ae03c1e0c03 100644 --- a/tools/llc/llc.cpp +++ b/tools/llc/llc.cpp @@ -227,7 +227,7 @@ int main(int argc, char **argv) { std::auto_ptr Buffer( MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage)); if (Buffer.get()) - M.reset(ParseBitcodeFile(Buffer.get(), &Context, &ErrorMessage)); + M.reset(ParseBitcodeFile(Buffer.get(), Context, &ErrorMessage)); if (M.get() == 0) { std::cerr << argv[0] << ": bitcode didn't read correctly.\n"; std::cerr << "Reason: " << ErrorMessage << "\n"; diff --git a/tools/lli/lli.cpp b/tools/lli/lli.cpp index 10b86382a45..e7c449efaa8 100644 --- a/tools/lli/lli.cpp +++ b/tools/lli/lli.cpp @@ -107,7 +107,7 @@ int main(int argc, char **argv, char * const *envp) { std::string ErrorMsg; ModuleProvider *MP = NULL; if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFile,&ErrorMsg)){ - MP = getBitcodeModuleProvider(Buffer, &Context, &ErrorMsg); + MP = getBitcodeModuleProvider(Buffer, Context, &ErrorMsg); if (!MP) delete Buffer; } diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index 960f8e371b8..fe58db1222b 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -719,11 +719,11 @@ int main(int argc, char **argv) { // Produce a warning if we should and we're creating the archive if (!Create) std::cerr << argv[0] << ": creating " << ArchivePath.toString() << "\n"; - TheArchive = Archive::CreateEmpty(ArchivePath, &Context); + TheArchive = Archive::CreateEmpty(ArchivePath, Context); TheArchive->writeToDisk(); } else { std::string Error; - TheArchive = Archive::OpenAndLoad(ArchivePath, &Context, &Error); + TheArchive = Archive::OpenAndLoad(ArchivePath, Context, &Error); if (TheArchive == 0) { std::cerr << argv[0] << ": error loading '" << ArchivePath << "': " << Error << "!\n"; diff --git a/tools/llvm-as/llvm-as.cpp b/tools/llvm-as/llvm-as.cpp index 06798cbd28a..53731b6c11e 100644 --- a/tools/llvm-as/llvm-as.cpp +++ b/tools/llvm-as/llvm-as.cpp @@ -65,7 +65,7 @@ int main(int argc, char **argv) { try { // Parse the file now... ParseError Err; - std::auto_ptr M(ParseAssemblyFile(InputFilename, Err, &Context)); + std::auto_ptr M(ParseAssemblyFile(InputFilename, Err, Context)); if (M.get() == 0) { Err.PrintError(argv[0], errs()); return 1; diff --git a/tools/llvm-db/CLIDebugger.cpp b/tools/llvm-db/CLIDebugger.cpp index c7aedd1006e..3caa2e6bd53 100644 --- a/tools/llvm-db/CLIDebugger.cpp +++ b/tools/llvm-db/CLIDebugger.cpp @@ -22,7 +22,7 @@ using namespace llvm; /// CLIDebugger constructor - This initializes the debugger to its default /// state, and initializes the command table. /// -CLIDebugger::CLIDebugger(LLVMContext* ctxt) +CLIDebugger::CLIDebugger(const 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 b1a31a4d91d..a5c73bd86a0 100644 --- a/tools/llvm-db/CLIDebugger.h +++ b/tools/llvm-db/CLIDebugger.h @@ -29,7 +29,7 @@ namespace llvm { /// CLIDebugger - This class implements the command line interface for the /// LLVM debugger. class CLIDebugger { - LLVMContext* Context; + const LLVMContext& Context; /// Dbg - The low-level LLVM debugger object that we use to do our dirty /// work. @@ -82,7 +82,7 @@ namespace llvm { const SourceLanguage *CurrentLanguage; public: - CLIDebugger(LLVMContext* ctxt); + CLIDebugger(const LLVMContext& ctxt); /// getDebugger - Return the current LLVM debugger implementation being /// used. diff --git a/tools/llvm-db/llvm-db.cpp b/tools/llvm-db/llvm-db.cpp index 62ee325bfd4..78dbf71df51 100644 --- a/tools/llvm-db/llvm-db.cpp +++ b/tools/llvm-db/llvm-db.cpp @@ -70,7 +70,7 @@ int main(int argc, char **argv, char * const *envp) { InputArgs.push_back(InputFile); // Create the CLI debugger... - CLIDebugger D(&Context); + CLIDebugger D(Context); // Initialize the debugger with the command line options we read... Debugger &Dbg = D.getDebugger(); diff --git a/tools/llvm-dis/llvm-dis.cpp b/tools/llvm-dis/llvm-dis.cpp index 3460f7e0fb7..901c8e9d3a9 100644 --- a/tools/llvm-dis/llvm-dis.cpp +++ b/tools/llvm-dis/llvm-dis.cpp @@ -63,7 +63,7 @@ int main(int argc, char **argv) { if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage)) { - M.reset(ParseBitcodeFile(Buffer, &Context, &ErrorMessage)); + M.reset(ParseBitcodeFile(Buffer, Context, &ErrorMessage)); delete Buffer; } diff --git a/tools/llvm-extract/llvm-extract.cpp b/tools/llvm-extract/llvm-extract.cpp index a9772116c9f..af0cf0705bf 100644 --- a/tools/llvm-extract/llvm-extract.cpp +++ b/tools/llvm-extract/llvm-extract.cpp @@ -73,7 +73,7 @@ int main(int argc, char **argv) { cerr << argv[0] << ": Error reading file '" + InputFilename + "'\n"; return 1; } else { - M.reset(ParseBitcodeFile(Buffer, &Context)); + M.reset(ParseBitcodeFile(Buffer, Context)); } delete Buffer; diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp index 435de0f4a36..2b9d2550dc2 100644 --- a/tools/llvm-ld/llvm-ld.cpp +++ b/tools/llvm-ld/llvm-ld.cpp @@ -517,7 +517,7 @@ int main(int argc, char **argv, char **envp) { cl::ParseCommandLineOptions(argc, argv, "llvm linker\n"); // Construct a Linker (now that Verbose is set) - Linker TheLinker(progname, OutputFilename, &Context, Verbose); + Linker TheLinker(progname, OutputFilename, Context, Verbose); // Keep track of the native link items (versus the bitcode items) Linker::ItemList NativeLinkItems; diff --git a/tools/llvm-link/llvm-link.cpp b/tools/llvm-link/llvm-link.cpp index ae5fa40ecba..818df14fd99 100644 --- a/tools/llvm-link/llvm-link.cpp +++ b/tools/llvm-link/llvm-link.cpp @@ -49,7 +49,7 @@ DumpAsm("d", cl::desc("Print assembly as linked"), cl::Hidden); // searches the link path for the specified file to try to find it... // static inline std::auto_ptr LoadFile(const std::string &FN, - LLVMContext* Context) { + const LLVMContext& Context) { sys::Path Filename; if (!Filename.set(FN)) { cerr << "Invalid file name: '" << FN << "'\n"; @@ -93,7 +93,7 @@ int main(int argc, char **argv) { unsigned BaseArg = 0; std::string ErrorMessage; - std::auto_ptr Composite(LoadFile(InputFilenames[BaseArg], &Context)); + std::auto_ptr Composite(LoadFile(InputFilenames[BaseArg], Context)); if (Composite.get() == 0) { cerr << argv[0] << ": error loading file '" << InputFilenames[BaseArg] << "'\n"; @@ -101,7 +101,7 @@ int main(int argc, char **argv) { } for (unsigned i = BaseArg+1; i < InputFilenames.size(); ++i) { - std::auto_ptr M(LoadFile(InputFilenames[i], &Context)); + std::auto_ptr M(LoadFile(InputFilenames[i], Context)); if (M.get() == 0) { cerr << argv[0] << ": error loading file '" < - AutoArchive(Archive::OpenAndLoad(ArchivePath, &Context, &err_msg)); + AutoArchive(Archive::OpenAndLoad(ArchivePath, Context, &err_msg)); Archive* TheArchive = AutoArchive.get(); if (!TheArchive) throw err_msg; diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp index 8ae196fe942..faac33b8cae 100644 --- a/tools/lto/LTOCodeGenerator.cpp +++ b/tools/lto/LTOCodeGenerator.cpp @@ -69,8 +69,8 @@ const char* LTOCodeGenerator::getVersionString() } -LTOCodeGenerator::LTOCodeGenerator() - : _context(new LLVMContext()), +LTOCodeGenerator::LTOCodeGenerator(const LLVMContext& Context) + : _context(Context), _linker("LinkTimeOptimizer", "ld-temp.o", _context), _target(NULL), _emitDwarfDebugInfo(false), _scopeRestrictionsDone(false), _codeModel(LTO_CODEGEN_PIC_MODEL_DYNAMIC), diff --git a/tools/lto/LTOCodeGenerator.h b/tools/lto/LTOCodeGenerator.h index d412626fbf4..4603c35870d 100644 --- a/tools/lto/LTOCodeGenerator.h +++ b/tools/lto/LTOCodeGenerator.h @@ -31,7 +31,7 @@ class LTOCodeGenerator { public: static const char* getVersionString(); - LTOCodeGenerator(); + LTOCodeGenerator(const llvm::LLVMContext& Context); ~LTOCodeGenerator(); bool addModule(class LTOModule*, std::string& errMsg); @@ -54,7 +54,7 @@ private: typedef llvm::StringMap StringSet; - llvm::LLVMContext* _context; + const llvm::LLVMContext& _context; llvm::Linker _linker; llvm::TargetMachine* _target; bool _emitDwarfDebugInfo; diff --git a/tools/lto/LTOModule.cpp b/tools/lto/LTOModule.cpp index 64e79509017..3da095d6c36 100644 --- a/tools/lto/LTOModule.cpp +++ b/tools/lto/LTOModule.cpp @@ -69,7 +69,7 @@ bool LTOModule::isBitcodeFileForTarget(const char* path, bool LTOModule::isTargetMatch(MemoryBuffer* buffer, const char* triplePrefix) { OwningPtr mp(getBitcodeModuleProvider(buffer, - new LLVMContext())); + *new LLVMContext())); // on success, mp owns buffer and both are deleted at end of this method if ( !mp ) { delete buffer; @@ -86,7 +86,8 @@ LTOModule::LTOModule(Module* m, TargetMachine* t) { } -LTOModule* LTOModule::makeLTOModule(const char* path, LLVMContext* Context, +LTOModule* LTOModule::makeLTOModule(const char* path, + const LLVMContext& Context, std::string& errMsg) { OwningPtr buffer(MemoryBuffer::getFile(path, &errMsg)); @@ -112,7 +113,7 @@ MemoryBuffer* LTOModule::makeBuffer(const void* mem, size_t length) LTOModule* LTOModule::makeLTOModule(const void* mem, size_t length, - LLVMContext* Context, + const LLVMContext& Context, std::string& errMsg) { OwningPtr buffer(makeBuffer(mem, length)); @@ -140,7 +141,8 @@ std::string getFeatureString(const char *TargetTriple) { return Features.getString(); } -LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, LLVMContext* Context, +LTOModule* LTOModule::makeLTOModule(MemoryBuffer* buffer, + const LLVMContext& Context, std::string& errMsg) { // parse bitcode buffer diff --git a/tools/lto/LTOModule.h b/tools/lto/LTOModule.h index bfdf6e7fd09..d7b992f71d4 100644 --- a/tools/lto/LTOModule.h +++ b/tools/lto/LTOModule.h @@ -52,10 +52,10 @@ public: const char* triplePrefix); static LTOModule* makeLTOModule(const char* path, - llvm::LLVMContext* Context, + const llvm::LLVMContext& Context, std::string& errMsg); static LTOModule* makeLTOModule(const void* mem, size_t length, - llvm::LLVMContext* Context, + const llvm::LLVMContext& Context, std::string& errMsg); const char* getTargetTriple(); @@ -91,7 +91,7 @@ private: const char* triplePrefix); static LTOModule* makeLTOModule(llvm::MemoryBuffer* buffer, - llvm::LLVMContext* Context, + const llvm::LLVMContext& Context, std::string& errMsg); static llvm::MemoryBuffer* makeBuffer(const void* mem, size_t length); diff --git a/tools/lto/lto.cpp b/tools/lto/lto.cpp index c25f87c3404..02034bbf846 100644 --- a/tools/lto/lto.cpp +++ b/tools/lto/lto.cpp @@ -88,7 +88,7 @@ bool lto_module_is_object_file_in_memory_for_target(const void* mem, // lto_module_t lto_module_create(const char* path, LLVMContextRef Ctxt) { - return LTOModule::makeLTOModule(path, llvm::unwrap(Ctxt), + return LTOModule::makeLTOModule(path, *llvm::unwrap(Ctxt), sLastErrorString); } @@ -100,7 +100,7 @@ lto_module_t lto_module_create(const char* path, LLVMContextRef Ctxt) lto_module_t lto_module_create_from_memory(const void* mem, size_t length, LLVMContextRef Ctxt) { - return LTOModule::makeLTOModule(mem, length, llvm::unwrap(Ctxt), + return LTOModule::makeLTOModule(mem, length, *llvm::unwrap(Ctxt), sLastErrorString); } @@ -158,9 +158,9 @@ lto_symbol_attributes lto_module_get_symbol_attribute(lto_module_t mod, // instantiates a code generator // returns NULL if there is an error // -lto_code_gen_t lto_codegen_create() +lto_code_gen_t lto_codegen_create(LLVMContextRef ContextRef) { - return new LTOCodeGenerator(); + return new LTOCodeGenerator(*llvm::unwrap(ContextRef)); } @@ -265,4 +265,4 @@ extern void lto_codegen_debug_options(lto_code_gen_t cg, const char * opt) { cg->setCodeGenDebugOptions(opt); -} +} \ No newline at end of file diff --git a/tools/opt/opt.cpp b/tools/opt/opt.cpp index b46960638d8..68916194024 100644 --- a/tools/opt/opt.cpp +++ b/tools/opt/opt.cpp @@ -327,7 +327,7 @@ int main(int argc, char **argv) { std::auto_ptr M; if (MemoryBuffer *Buffer = MemoryBuffer::getFileOrSTDIN(InputFilename, &ErrorMessage)) { - M.reset(ParseBitcodeFile(Buffer, &Context, &ErrorMessage)); + M.reset(ParseBitcodeFile(Buffer, Context, &ErrorMessage)); delete Buffer; } diff --git a/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp b/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp index 1bcf0ab1227..1007ae1cc58 100644 --- a/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp +++ b/unittests/ExecutionEngine/JIT/JITEventListenerTest.cpp @@ -65,7 +65,7 @@ struct RecordingJITEventListener : public JITEventListener { class JITEventListenerTest : public testing::Test { protected: JITEventListenerTest() - : M(new Module("module", new LLVMContext())), + : M(new Module("module", *new LLVMContext())), EE(ExecutionEngine::createJIT(new ExistingModuleProvider(M))) { } diff --git a/unittests/VMCore/PassManagerTest.cpp b/unittests/VMCore/PassManagerTest.cpp index fb26d52e553..8122e2cad9b 100644 --- a/unittests/VMCore/PassManagerTest.cpp +++ b/unittests/VMCore/PassManagerTest.cpp @@ -272,7 +272,7 @@ namespace llvm { char OnTheFlyTest::ID=0; TEST(PassManager, RunOnce) { - Module M("test-once", new LLVMContext()); + Module M("test-once", *new LLVMContext()); struct ModuleNDNM *mNDNM = new ModuleNDNM(); struct ModuleDNM *mDNM = new ModuleDNM(); struct ModuleNDM *mNDM = new ModuleNDM(); @@ -296,7 +296,7 @@ namespace llvm { } TEST(PassManager, ReRun) { - Module M("test-rerun", new LLVMContext()); + Module M("test-rerun", *new LLVMContext()); struct ModuleNDNM *mNDNM = new ModuleNDNM(); struct ModuleDNM *mDNM = new ModuleDNM(); struct ModuleNDM *mNDM = new ModuleNDM(); @@ -387,7 +387,7 @@ namespace llvm { Module* makeLLVMModule() { // Module Construction - Module* mod = new Module("test-mem", new LLVMContext()); + Module* mod = new Module("test-mem", *new LLVMContext()); mod->setDataLayout("e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-" "i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-" "a0:0:64-s0:64:64-f80:128:128");