From 55af02019433f20c53c61d490e651ca968264c7e Mon Sep 17 00:00:00 2001 From: Irina Popa Date: Thu, 12 Jul 2018 18:00:49 +0300 Subject: [PATCH] rustc_codegen_llvm: use safe references for Pass. --- src/librustc_codegen_llvm/back/lto.rs | 6 ++---- src/librustc_codegen_llvm/back/write.rs | 8 ++++---- src/librustc_codegen_llvm/llvm/ffi.rs | 7 +++---- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/librustc_codegen_llvm/back/lto.rs b/src/librustc_codegen_llvm/back/lto.rs index fce34710b814..c30a436449da 100644 --- a/src/librustc_codegen_llvm/back/lto.rs +++ b/src/librustc_codegen_llvm/back/lto.rs @@ -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", || diff --git a/src/librustc_codegen_llvm/back/write.rs b/src/librustc_codegen_llvm/back/write.rs index c54ce29b4629..9f99adc34a8c 100644 --- a/src/librustc_codegen_llvm/back/write.rs +++ b/src/librustc_codegen_llvm/back/write.rs @@ -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, diff --git a/src/librustc_codegen_llvm/llvm/ffi.rs b/src/librustc_codegen_llvm/llvm/ffi.rs index 8d982303614f..ebbb8549b126 100644 --- a/src/librustc_codegen_llvm/llvm/ffi.rs +++ b/src/librustc_codegen_llvm/llvm/ffi.rs @@ -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;