diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-06-19 15:18:25 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-06-19 15:18:25 -0700 |
| commit | b7a69198992fceb7b2c6affb5e0a7ed862ebc090 (patch) | |
| tree | 226006913791b6edbc424a7f948757212845bf8e /src | |
| parent | 1120f8c1e57b7b30134d670dd1dfc18c6444c15f (diff) | |
| download | rust-b7a69198992fceb7b2c6affb5e0a7ed862ebc090.tar.gz rust-b7a69198992fceb7b2c6affb5e0a7ed862ebc090.zip | |
rustc: Dispose of LLVM passes in test cases
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/back/passes.rs | 15 | ||||
| -rw-r--r-- | src/librustc/lib/llvm.rs | 3 | ||||
| -rw-r--r-- | src/rustllvm/PassWrapper.cpp | 5 | ||||
| -rw-r--r-- | src/rustllvm/rustllvm.def.in | 1 |
4 files changed, 21 insertions, 3 deletions
diff --git a/src/librustc/back/passes.rs b/src/librustc/back/passes.rs index 07e5d9e4f25..987c76dccb4 100644 --- a/src/librustc/back/passes.rs +++ b/src/librustc/back/passes.rs @@ -299,18 +299,27 @@ fn passes_exist() { let mut failed = ~[]; unsafe { llvm::LLVMInitializePasses(); } for analysis_passes.each() |&(name,_)| { - if !create_pass(name).is_some() { + let pass = create_pass(name); + if !pass.is_some() { failed.push(name); + } else { + unsafe { llvm::LLVMDestroyPass(pass.get()) } } } for transform_passes.each() |&(name,_)| { - if !create_pass(name).is_some() { + let pass = create_pass(name); + if !pass.is_some() { failed.push(name); + } else { + unsafe { llvm::LLVMDestroyPass(pass.get()) } } } for utility_passes.each() |&(name,_)| { - if !create_pass(name).is_some() { + let pass = create_pass(name); + if !pass.is_some() { failed.push(name); + } else { + unsafe { llvm::LLVMDestroyPass(pass.get()) } } } diff --git a/src/librustc/lib/llvm.rs b/src/librustc/lib/llvm.rs index 835dd55711b..2b2c1e27cbc 100644 --- a/src/librustc/lib/llvm.rs +++ b/src/librustc/lib/llvm.rs @@ -1684,6 +1684,9 @@ pub mod llvm { #[fast_ffi] pub unsafe fn LLVMCreatePass(PassName:*c_char) -> PassRef; + #[fast_ffi] + pub unsafe fn LLVMDestroyPass(P: PassRef); + /** Adds a verification pass. */ #[fast_ffi] pub unsafe fn LLVMAddVerifierPass(PM: PassManagerRef); diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp index 53b291ff470..32b6df4e1dd 100644 --- a/src/rustllvm/PassWrapper.cpp +++ b/src/rustllvm/PassWrapper.cpp @@ -63,3 +63,8 @@ extern "C" LLVMPassRef LLVMCreatePass(const char * PassName) { return (LLVMPassRef)0; } } + +extern "C" void LLVMDestroyPass(LLVMPassRef PassRef) { + Pass *p = unwrap(PassRef); + delete p; +} diff --git a/src/rustllvm/rustllvm.def.in b/src/rustllvm/rustllvm.def.in index 2a3f7de9bf5..d5f03ac604b 100644 --- a/src/rustllvm/rustllvm.def.in +++ b/src/rustllvm/rustllvm.def.in @@ -588,6 +588,7 @@ LLVMInlineAsm LLVMInitializePasses LLVMAddPass LLVMCreatePass +LLVMDestroyPass LLVMDIBuilderCreate LLVMDIBuilderDispose LLVMDIBuilderFinalize |
