rustc: Dispose of LLVM passes in test cases

This commit is contained in:
Brian Anderson 2013-06-19 15:18:25 -07:00
parent 1120f8c1e5
commit b7a6919899
4 changed files with 21 additions and 3 deletions

View file

@ -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()) }
}
}

View file

@ -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);

View file

@ -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;
}

View file

@ -588,6 +588,7 @@ LLVMInlineAsm
LLVMInitializePasses
LLVMAddPass
LLVMCreatePass
LLVMDestroyPass
LLVMDIBuilderCreate
LLVMDIBuilderDispose
LLVMDIBuilderFinalize