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);
fx.bcx.ins().jump(ret_ebb, &[]);
} 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 {
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 } => {

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

View File

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

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