From e83da7533cdabb4ac99e53495686135233b23f9d Mon Sep 17 00:00:00 2001 From: bjorn3 Date: Fri, 16 Nov 2018 17:35:47 +0100 Subject: [PATCH] Move trapping to trap_code.rs --- src/abi.rs | 2 +- src/base.rs | 6 +++--- src/intrinsics.rs | 6 +++--- src/lib.rs | 2 ++ src/trap.rs | 12 ++++++++++++ 5 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 src/trap.rs diff --git a/src/abi.rs b/src/abi.rs index e50aa9ff63d..ea00dd790eb 100644 --- a/src/abi.rs +++ b/src/abi.rs @@ -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); } } diff --git a/src/base.rs b/src/base.rs index b40c3839003..ab3dc7aa5ba 100644 --- a/src/base.rs +++ b/src/base.rs @@ -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 } => { diff --git a/src/intrinsics.rs b/src/intrinsics.rs index 1efc6936498..fde28eb3e36 100644 --- a/src/intrinsics.rs +++ b/src/intrinsics.rs @@ -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); } } diff --git a/src/lib.rs b/src/lib.rs index b4d7d0e2f46..95cd7704e20 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -81,6 +81,7 @@ mod link_copied; 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 index 00000000000..1d264b20998 --- /dev/null +++ b/src/trap.rs @@ -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)); +}