1
Fork 0

Move trapping to trap_code.rs

This commit is contained in:
bjorn3 2018-11-16 17:35:47 +01:00
parent cf287e3a05
commit e83da7533c
5 changed files with 21 additions and 7 deletions

View file

@ -504,7 +504,7 @@ pub fn codegen_terminator_call<'a, 'tcx: 'a>(
let ret_ebb = fx.get_ebb(dest); let ret_ebb = fx.get_ebb(dest);
fx.bcx.ins().jump(ret_ebb, &[]); fx.bcx.ins().jump(ret_ebb, &[]);
} else { } else {
fx.bcx.ins().trap(TrapCode::User(!0)); trap_unreachable(&mut fx.bcx);
} }
} }

View file

@ -202,7 +202,7 @@ fn codegen_fn_content<'a, 'tcx: 'a>(fx: &mut FunctionCx<'a, 'tcx, impl Backend>)
} else { } else {
fx.bcx.ins().brz(cond, target, &[]); fx.bcx.ins().brz(cond, target, &[]);
}; };
fx.bcx.ins().trap(TrapCode::User(!0)); trap_panic(&mut fx.bcx);
} }
TerminatorKind::SwitchInt { 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); crate::abi::codegen_terminator_call(fx, func, args, destination);
} }
TerminatorKind::Resume | TerminatorKind::Abort | TerminatorKind::Unreachable => { TerminatorKind::Resume | TerminatorKind::Abort | TerminatorKind::Unreachable => {
fx.bcx.ins().trap(TrapCode::User(!0)); trap_unreachable(&mut fx.bcx);
} }
TerminatorKind::Yield { .. } TerminatorKind::Yield { .. }
| TerminatorKind::FalseEdges { .. } | TerminatorKind::FalseEdges { .. }
@ -680,7 +680,7 @@ pub fn trans_get_discriminant<'a, 'tcx: 'a>(
let layout = value.layout(); let layout = value.layout();
if layout.abi == layout::Abi::Uninhabited { if layout.abi == layout::Abi::Uninhabited {
fx.bcx.ins().trap(TrapCode::User(!0)); trap_unreachable(&mut fx.bcx);
} }
match layout.variants { match layout.variants {
layout::Variants::Single { index } => { layout::Variants::Single { index } => {

View file

@ -101,10 +101,10 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
// Insert non returning intrinsics here // Insert non returning intrinsics here
match intrinsic { match intrinsic {
"abort" => { "abort" => {
fx.bcx.ins().trap(TrapCode::User(!0 - 1)); trap_panic(&mut fx.bcx);
} }
"unreachable" => { "unreachable" => {
fx.bcx.ins().trap(TrapCode::User(!0 - 1)); trap_unreachable(&mut fx.bcx);
} }
_ => unimplemented!("unsupported instrinsic {}", intrinsic), _ => unimplemented!("unsupported instrinsic {}", intrinsic),
} }
@ -423,6 +423,6 @@ pub fn codegen_intrinsic_call<'a, 'tcx: 'a>(
let ret_ebb = fx.get_ebb(dest); let ret_ebb = fx.get_ebb(dest);
fx.bcx.ins().jump(ret_ebb, &[]); fx.bcx.ins().jump(ret_ebb, &[]);
} else { } else {
fx.bcx.ins().trap(TrapCode::User(!0)); trap_unreachable(&mut fx.bcx);
} }
} }

View file

@ -81,6 +81,7 @@ mod link_copied;
mod main_shim; mod main_shim;
mod metadata; mod metadata;
mod pretty_clif; mod pretty_clif;
mod trap;
mod vtable; mod vtable;
mod prelude { mod prelude {
@ -121,6 +122,7 @@ mod prelude {
pub use crate::abi::*; pub use crate::abi::*;
pub use crate::base::{trans_operand, trans_place}; pub use crate::base::{trans_operand, trans_place};
pub use crate::common::*; pub use crate::common::*;
pub use crate::trap::*;
pub use crate::{Caches, CodegenResults, CrateInfo}; pub use crate::{Caches, CodegenResults, CrateInfo};
} }

12
src/trap.rs Normal file
View file

@ -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));
}