if config.verify_llvm_ir {
let pass = llvm::LLVMRustFindAndCreatePass("verify\0".as_ptr() as *const _);
- assert!(!pass.is_null());
- llvm::LLVMRustAddPass(pm, pass);
+ llvm::LLVMRustAddPass(pm, pass.unwrap());
}
// When optimizing for LTO we don't actually pass in `-O0`, but we force
if config.verify_llvm_ir {
let pass = llvm::LLVMRustFindAndCreatePass("verify\0".as_ptr() as *const _);
- assert!(!pass.is_null());
- llvm::LLVMRustAddPass(pm, pass);
+ llvm::LLVMRustAddPass(pm, pass.unwrap());
}
time_ext(cgcx.time_passes, None, "LTO passes", ||
// manager.
let addpass = |pass_name: &str| {
let pass_name = CString::new(pass_name).unwrap();
- let pass = llvm::LLVMRustFindAndCreatePass(pass_name.as_ptr());
- if pass.is_null() {
- return false;
- }
+ let pass = match llvm::LLVMRustFindAndCreatePass(pass_name.as_ptr()) {
+ Some(pass) => pass,
+ None => return false,
+ };
let pass_manager = match llvm::LLVMRustPassKind(pass) {
llvm::PassKind::Function => fpm,
llvm::PassKind::Module => mpm,
extern { pub type SectionIterator; }
pub type SectionIteratorRef = *mut SectionIterator;
extern { pub type Pass; }
-pub type PassRef = *mut Pass;
extern { pub type TargetMachine; }
pub type TargetMachineRef = *const TargetMachine;
extern { pub type Archive; }
pub fn LLVMIsAConstantInt(value_ref: &Value) -> Option<&Value>;
pub fn LLVMIsAConstantFP(value_ref: &Value) -> Option<&Value>;
- pub fn LLVMRustPassKind(Pass: PassRef) -> PassKind;
- pub fn LLVMRustFindAndCreatePass(Pass: *const c_char) -> PassRef;
- pub fn LLVMRustAddPass(PM: PassManagerRef, Pass: PassRef);
+ pub fn LLVMRustPassKind(Pass: &Pass) -> PassKind;
+ pub fn LLVMRustFindAndCreatePass(Pass: *const c_char) -> Option<&'static mut Pass>;
+ pub fn LLVMRustAddPass(PM: PassManagerRef, Pass: &'static mut Pass);
pub fn LLVMRustHasFeature(T: TargetMachineRef, s: *const c_char) -> bool;