]> git.lizzy.rs Git - rust.git/commitdiff
Move trapping to trap_code.rs
authorbjorn3 <bjorn3@users.noreply.github.com>
Fri, 16 Nov 2018 16:35:47 +0000 (17:35 +0100)
committerbjorn3 <bjorn3@users.noreply.github.com>
Fri, 16 Nov 2018 16:35:47 +0000 (17:35 +0100)
src/abi.rs
src/base.rs
src/intrinsics.rs
src/lib.rs
src/trap.rs [new file with mode: 0644]

index e50aa9ff63d48dd1db30e1bd716de611ba86e539..ea00dd790eba2136af466a4449e620e9083c8c51 100644 (file)
@@ -504,7 +504,7 @@ pub fn codegen_terminator_call<'a, 'tcx: 'a>(
         let ret_ebb = fx.get_ebb(dest);
         fx.bcx.ins().jump(ret_ebb, &[]);
     } else {
-        fx.bcx.ins().trap(TrapCode::User(!0));
+        trap_unreachable(&mut fx.bcx);
     }
 }
 
index b40c38390037fc3c0bb2418d02835343b907f259..ab3dc7aa5bab9ae29e57097c83902b8047005e85 100644 (file)
@@ -202,7 +202,7 @@ fn codegen_fn_content<'a, 'tcx: 'a>(fx: &mut FunctionCx<'a, 'tcx, impl Backend>)
                 } else {
                     fx.bcx.ins().brz(cond, target, &[]);
                 };
-                fx.bcx.ins().trap(TrapCode::User(!0));
+                trap_panic(&mut fx.bcx);
             }
 
             TerminatorKind::SwitchInt {
@@ -230,7 +230,7 @@ fn codegen_fn_content<'a, 'tcx: 'a>(fx: &mut FunctionCx<'a, 'tcx, impl Backend>)
                 crate::abi::codegen_terminator_call(fx, func, args, destination);
             }
             TerminatorKind::Resume | TerminatorKind::Abort | TerminatorKind::Unreachable => {
-                fx.bcx.ins().trap(TrapCode::User(!0));
+                trap_unreachable(&mut fx.bcx);
             }
             TerminatorKind::Yield { .. }
             | TerminatorKind::FalseEdges { .. }
@@ -680,7 +680,7 @@ pub fn trans_get_discriminant<'a, 'tcx: 'a>(
     let layout = value.layout();
 
     if layout.abi == layout::Abi::Uninhabited {
-        fx.bcx.ins().trap(TrapCode::User(!0));
+        trap_unreachable(&mut fx.bcx);
     }
     match layout.variants {
         layout::Variants::Single { index } => {
index 1efc6936498b8664da88485a47388335cd222ca7..fde28eb3e36d9e9350954311aa0bd63a1c4916ed 100644 (file)
@@ -101,10 +101,10 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
             // Insert non returning intrinsics here
             match intrinsic {
                 "abort" => {
-                    fx.bcx.ins().trap(TrapCode::User(!0 - 1));
+                    trap_panic(&mut fx.bcx);
                 }
                 "unreachable" => {
-                    fx.bcx.ins().trap(TrapCode::User(!0 - 1));
+                    trap_unreachable(&mut fx.bcx);
                 }
                 _ => unimplemented!("unsupported instrinsic {}", intrinsic),
             }
@@ -423,6 +423,6 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
         let ret_ebb = fx.get_ebb(dest);
         fx.bcx.ins().jump(ret_ebb, &[]);
     } else {
-        fx.bcx.ins().trap(TrapCode::User(!0));
+        trap_unreachable(&mut fx.bcx);
     }
 }
index b4d7d0e2f46d23766c6652ad2bd1e37807997ae5..95cd7704e20c7462e30d89025b1b1be9a1084f6f 100644 (file)
@@ -81,6 +81,7 @@ macro_rules! unimpl {
 mod main_shim;
 mod metadata;
 mod pretty_clif;
+mod trap;
 mod vtable;
 
 mod prelude {
@@ -121,6 +122,7 @@ mod prelude {
     pub use crate::abi::*;
     pub use crate::base::{trans_operand, trans_place};
     pub use crate::common::*;
+    pub use crate::trap::*;
     pub use crate::{Caches, CodegenResults, CrateInfo};
 }
 
diff --git a/src/trap.rs b/src/trap.rs
new file mode 100644 (file)
index 0000000..1d264b2
--- /dev/null
@@ -0,0 +1,12 @@
+use cranelift::prelude::*;
+use cranelift::codegen::ir::TrapCode;
+
+/// Trap code: user0
+pub fn trap_panic(bcx: &mut FunctionBuilder) {
+    bcx.ins().trap(TrapCode::User(0));
+}
+
+/// Trap code: user65535
+pub fn trap_unreachable(bcx: &mut FunctionBuilder) {
+    bcx.ins().trap(TrapCode::User(!0));
+}