aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-02-16 01:54:47 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-02-16 01:54:47 +0000
commit42e9f8e4983d50f896ec716207817b9d96e7e79c (patch)
treef1f24e590c66b80b2bff852ba4dd1c88c6850187
parentf25491dd27f188afe083dbbdf028c87a2daba359 (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.h17
-rw-r--r--lib/Frontend/CompilerInstance.cpp13
-rw-r--r--tools/driver/cc1_main.cpp4
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") {