diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2013-06-13 21:25:18 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2013-06-13 21:25:18 -0700 |
| commit | a90fffe3671cb70c37d493efe8cebafab2a4705d (patch) | |
| tree | 5bb2e0792bfc5292452ffd0f6d9e929d14cffbb7 /src/rustllvm/RustWrapper.cpp | |
| parent | 1a3edecbf21eef7f39bbf3a7bf38fb72fdc6af61 (diff) | |
| download | rust-a90fffe3671cb70c37d493efe8cebafab2a4705d.tar.gz rust-a90fffe3671cb70c37d493efe8cebafab2a4705d.zip | |
Revert "Revert "Have JIT execution take ownership of the LLVMContextRef""
This reverts commit 19adece68b00bd1873499cca6f1537750608d769.
Diffstat (limited to 'src/rustllvm/RustWrapper.cpp')
| -rw-r--r-- | src/rustllvm/RustWrapper.cpp | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 17eb0f50b9b..30e01b53ab7 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -329,12 +329,12 @@ LLVMRustLoadCrate(void* mem, const char* crate) { return true; } -extern "C" void* -LLVMRustExecuteJIT(void* mem, - LLVMPassManagerRef PMR, - LLVMModuleRef M, - CodeGenOpt::Level OptLevel, - bool EnableSegmentedStacks) { +extern "C" LLVMExecutionEngineRef +LLVMRustBuildJIT(void* mem, + LLVMPassManagerRef PMR, + LLVMModuleRef M, + CodeGenOpt::Level OptLevel, + bool EnableSegmentedStacks) { InitializeNativeTarget(); InitializeNativeTargetAsmPrinter(); @@ -371,21 +371,15 @@ LLVMRustExecuteJIT(void* mem, if(!EE || Err != "") { LLVMRustError = Err.c_str(); - return 0; + // The EngineBuilder only takes ownership of these two structures if the + // create() call is successful, but here it wasn't successful. + LLVMDisposeModule(M); + delete MM; + return NULL; } MM->invalidateInstructionCache(); - Function* func = EE->FindFunctionNamed("_rust_main"); - - if(!func || Err != "") { - LLVMRustError = Err.c_str(); - return 0; - } - - void* entry = EE->getPointerToFunction(func); - assert(entry); - - return entry; + return wrap(EE); } extern "C" bool |
