Skip to content

Commit b7a6919

Browse files
committed
rustc: Dispose of LLVM passes in test cases
1 parent 1120f8c commit b7a6919

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

src/librustc/back/passes.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -299,18 +299,27 @@ fn passes_exist() {
299299
let mut failed = ~[];
300300
unsafe { llvm::LLVMInitializePasses(); }
301301
for analysis_passes.each() |&(name,_)| {
302-
if !create_pass(name).is_some() {
302+
let pass = create_pass(name);
303+
if !pass.is_some() {
303304
failed.push(name);
305+
} else {
306+
unsafe { llvm::LLVMDestroyPass(pass.get()) }
304307
}
305308
}
306309
for transform_passes.each() |&(name,_)| {
307-
if !create_pass(name).is_some() {
310+
let pass = create_pass(name);
311+
if !pass.is_some() {
308312
failed.push(name);
313+
} else {
314+
unsafe { llvm::LLVMDestroyPass(pass.get()) }
309315
}
310316
}
311317
for utility_passes.each() |&(name,_)| {
312-
if !create_pass(name).is_some() {
318+
let pass = create_pass(name);
319+
if !pass.is_some() {
313320
failed.push(name);
321+
} else {
322+
unsafe { llvm::LLVMDestroyPass(pass.get()) }
314323
}
315324
}
316325

src/librustc/lib/llvm.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,6 +1684,9 @@ pub mod llvm {
16841684
#[fast_ffi]
16851685
pub unsafe fn LLVMCreatePass(PassName:*c_char) -> PassRef;
16861686

1687+
#[fast_ffi]
1688+
pub unsafe fn LLVMDestroyPass(P: PassRef);
1689+
16871690
/** Adds a verification pass. */
16881691
#[fast_ffi]
16891692
pub unsafe fn LLVMAddVerifierPass(PM: PassManagerRef);

src/rustllvm/PassWrapper.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,8 @@ extern "C" LLVMPassRef LLVMCreatePass(const char * PassName) {
6363
return (LLVMPassRef)0;
6464
}
6565
}
66+
67+
extern "C" void LLVMDestroyPass(LLVMPassRef PassRef) {
68+
Pass *p = unwrap(PassRef);
69+
delete p;
70+
}

src/rustllvm/rustllvm.def.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ LLVMInlineAsm
588588
LLVMInitializePasses
589589
LLVMAddPass
590590
LLVMCreatePass
591+
LLVMDestroyPass
591592
LLVMDIBuilderCreate
592593
LLVMDIBuilderDispose
593594
LLVMDIBuilderFinalize

0 commit comments

Comments
 (0)