diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-02-16 01:54:47 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-02-16 01:54:47 +0000 |
commit | 42e9f8e4983d50f896ec716207817b9d96e7e79c (patch) | |
tree | f1f24e590c66b80b2bff852ba4dd1c88c6850187 | |
parent | f25491dd27f188afe083dbbdf028c87a2daba359 (diff) |
CompilerInstance: Move LLVMContext member out of constructor.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96314 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/Frontend/CompilerInstance.h | 17 | ||||
-rw-r--r-- | lib/Frontend/CompilerInstance.cpp | 13 | ||||
-rw-r--r-- | tools/driver/cc1_main.cpp | 4 |
3 files changed, 16 insertions, 18 deletions
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<llvm::LLVMContext> LLVMContext; /// The options used in this compiler instance. llvm::OwningPtr<CompilerInvocation> Invocation; @@ -97,11 +96,10 @@ class CompilerInstance { /// The list of active output files. std::list< std::pair<std::string, llvm::raw_ostream*> > 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") { |