]> git.lizzy.rs Git - rust.git/commitdiff
rustc_codegen_llvm: use safe references for Pass.
authorIrina Popa <irinagpopa@gmail.com>
Thu, 12 Jul 2018 15:00:49 +0000 (18:00 +0300)
committerIrina Popa <irinagpopa@gmail.com>
Mon, 30 Jul 2018 17:10:30 +0000 (20:10 +0300)
src/librustc_codegen_llvm/back/lto.rs
src/librustc_codegen_llvm/back/write.rs
src/librustc_codegen_llvm/llvm/ffi.rs

index fce34710b814302a94a2c24eb0225ee9705ac07e..c30a436449da4bfc428e520ed4ef95f7b3d7d54a 100644 (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", ||
index c54ce29b4629cb131b7b37303ba3aa1e622f858f..9f99adc34a8c11fb63913eeabb92a7e9c2881b69 100644 (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,
index 8d982303614fa9af4b05b1f08c5b5a42ae3efb28..ebbb8549b126c210716beaacb24c82dd9e28338d 100644 (file)
@@ -397,7 +397,6 @@ pub enum ThreadLocalMode {
 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 @@ pub fn LLVMRustDIBuilderCreateDebugLocation(Context: &'a Context,
     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;