From: Daniel Dunbar Date: Tue, 16 Feb 2010 01:54:47 +0000 (+0000) Subject: CompilerInstance: Move LLVMContext member out of constructor. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=42e9f8e4983d50f896ec716207817b9d96e7e79c;p=clang CompilerInstance: Move LLVMContext member out of constructor. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96314 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/CompilerInstance.h b/include/clang/Frontend/CompilerInstance.h index 8f12b54be9..1be4118e55 100644 --- a/include/clang/Frontend/CompilerInstance.h +++ b/include/clang/Frontend/CompilerInstance.h @@ -58,8 +58,7 @@ class TargetInfo; /// and a long form that takes explicit instances of any required objects. class CompilerInstance { /// The LLVM context used for this instance. - llvm::LLVMContext *LLVMContext; - bool OwnsLLVMContext; + llvm::OwningPtr LLVMContext; /// The options used in this compiler instance. llvm::OwningPtr Invocation; @@ -97,11 +96,10 @@ class CompilerInstance { /// The list of active output files. std::list< std::pair > OutputFiles; + void operator=(const CompilerInstance &); // DO NOT IMPLEMENT + CompilerInstance(const CompilerInstance&); // DO NOT IMPLEMENT public: - /// Create a new compiler instance with the given LLVM context, optionally - /// taking ownership of it. - CompilerInstance(llvm::LLVMContext *_LLVMContext = 0, - bool _OwnsLLVMContext = true); + CompilerInstance(); ~CompilerInstance(); /// @name High-Level Operations @@ -150,12 +148,11 @@ public: return *LLVMContext; } + llvm::LLVMContext *takeLLVMContext() { return LLVMContext.take(); } + /// setLLVMContext - Replace the current LLVM context and take ownership of /// \arg Value. - void setLLVMContext(llvm::LLVMContext *Value, bool TakeOwnership = true) { - LLVMContext = Value; - OwnsLLVMContext = TakeOwnership; - } + void setLLVMContext(llvm::LLVMContext *Value); /// } /// @name Compiler Invocation and Options diff --git a/lib/Frontend/CompilerInstance.cpp b/lib/Frontend/CompilerInstance.cpp index a630486688..917cbd711a 100644 --- a/lib/Frontend/CompilerInstance.cpp +++ b/lib/Frontend/CompilerInstance.cpp @@ -35,16 +35,15 @@ #include "llvm/System/Program.h" using namespace clang; -CompilerInstance::CompilerInstance(llvm::LLVMContext *_LLVMContext, - bool _OwnsLLVMContext) - : LLVMContext(_LLVMContext), - OwnsLLVMContext(_OwnsLLVMContext), - Invocation(new CompilerInvocation) { +CompilerInstance::CompilerInstance() + : Invocation(new CompilerInvocation()) { } CompilerInstance::~CompilerInstance() { - if (OwnsLLVMContext) - delete LLVMContext; +} + +void CompilerInstance::setLLVMContext(llvm::LLVMContext *Value) { + LLVMContext.reset(Value); } void CompilerInstance::setInvocation(CompilerInvocation *Value) { diff --git a/tools/driver/cc1_main.cpp b/tools/driver/cc1_main.cpp index 30d2a21c93..05fb6984d4 100644 --- a/tools/driver/cc1_main.cpp +++ b/tools/driver/cc1_main.cpp @@ -195,7 +195,9 @@ static int cc1_test(Diagnostic &Diags, int cc1_main(const char **ArgBegin, const char **ArgEnd, const char *Argv0, void *MainAddr) { - CompilerInstance Clang(new llvm::LLVMContext, true); + CompilerInstance Clang; + + Clang.setLLVMContext(new llvm::LLVMContext); // Run clang -cc1 test. if (ArgBegin != ArgEnd && llvm::StringRef(ArgBegin[0]) == "-cc1test") {