Skip to content

Commit 4033358

Browse files
committed
make miri_start_panic intrinsic an FFI function
1 parent 592b140 commit 4033358

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

src/shims/foreign_items.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
111111
def_id: DefId,
112112
args: &[OpTy<'tcx, Tag>],
113113
ret: Option<(PlaceTy<'tcx, Tag>, mir::BasicBlock)>,
114-
_unwind: Option<mir::BasicBlock>,
114+
unwind: Option<mir::BasicBlock>,
115115
) -> InterpResult<'tcx, Option<&'mir mir::Body<'tcx>>> {
116116
let this = self.eval_context_mut();
117117
let attrs = this.tcx.get_attrs(def_id);
@@ -126,6 +126,10 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
126126
// First: functions that diverge.
127127
let (dest, ret) = match ret {
128128
None => match link_name {
129+
"miri_start_panic" => {
130+
this.handle_miri_start_panic(args, unwind)?;
131+
return Ok(None);
132+
}
129133
// This matches calls to the foreign item `panic_impl`.
130134
// The implementation is provided by the function with the `#[panic_handler]` attribute.
131135
"panic_impl" => {

src/shims/intrinsics.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
1818
instance: ty::Instance<'tcx>,
1919
args: &[OpTy<'tcx, Tag>],
2020
ret: Option<(PlaceTy<'tcx, Tag>, mir::BasicBlock)>,
21-
unwind: Option<mir::BasicBlock>,
21+
_unwind: Option<mir::BasicBlock>,
2222
) -> InterpResult<'tcx> {
2323
let this = self.eval_context_mut();
2424
let intrinsic_name = this.tcx.item_name(instance.def_id());
@@ -32,13 +32,10 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
3232
return Ok(());
3333
}
3434

35-
// First handle intrinsics without return place.
35+
// All supported intrinsics have a return place.
3636
let intrinsic_name = &*intrinsic_name.as_str();
3737
let (dest, ret) = match ret {
38-
None => match intrinsic_name {
39-
"miri_start_panic" => return this.handle_miri_start_panic(args, unwind),
40-
_ => throw_unsup_format!("unimplemented (diverging) intrinsic: {}", intrinsic_name),
41-
},
38+
None => throw_unsup_format!("unimplemented (diverging) intrinsic: {}", intrinsic_name),
4239
Some(p) => p,
4340
};
4441

0 commit comments

Comments
 (0)