rustc_codegen_llvm: use safe references for Pass.

This commit is contained in:
Irina Popa 2018-07-12 18:00:49 +03:00
parent e9546601a1
commit 55af020194
3 changed files with 9 additions and 12 deletions

View file

@ -468,8 +468,7 @@ fn run_pass_manager(cgcx: &CodegenContext,
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
@ -503,8 +502,7 @@ fn run_pass_manager(cgcx: &CodegenContext,
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", ||

View file

@ -522,10 +522,10 @@ unsafe fn optimize(cgcx: &CodegenContext,
// 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,

View file

@ -397,7 +397,6 @@ extern { pub type ObjectFile; }
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; }
@ -1414,9 +1413,9 @@ extern "C" {
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;