remove handle_unsupported_foreign_item helper

This commit is contained in:
Ralf Jung 2024-10-08 08:46:14 +02:00
parent 66fda4a846
commit 7e21dce98c
5 changed files with 10 additions and 36 deletions

View file

@ -14,7 +14,6 @@ use rustc_index::IndexVec;
use rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrFlags;
use rustc_middle::middle::dependency_format::Linkage;
use rustc_middle::middle::exported_symbols::ExportedSymbol;
use rustc_middle::mir;
use rustc_middle::ty::layout::{FnAbiOf, LayoutOf, MaybeResult, TyAndLayout};
use rustc_middle::ty::{self, FloatTy, IntTy, Ty, TyCtxt, UintTy};
use rustc_session::config::CrateType;
@ -949,21 +948,6 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
crate_name == "std" || crate_name == "std_miri_test"
}
/// Handler that should be called when an unsupported foreign item is encountered.
/// This function will either panic within the context of the emulated application
/// or return an error in the Miri process context
fn handle_unsupported_foreign_item(&mut self, error_msg: String) -> InterpResult<'tcx, ()> {
let this = self.eval_context_mut();
if this.machine.panic_on_unsupported {
// message is slightly different here to make automated analysis easier
let error_msg = format!("unsupported Miri functionality: {error_msg}");
this.start_panic(error_msg.as_ref(), mir::UnwindAction::Continue)?;
interp_ok(())
} else {
throw_machine_stop!(TerminationInfo::UnsupportedForeignItem(error_msg));
}
}
fn check_abi_and_shim_symbol_clash(
&mut self,
abi: Abi,

View file

@ -83,11 +83,17 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
return interp_ok(Some(body));
}
this.handle_unsupported_foreign_item(format!(
let error_msg = format!(
"can't call foreign function `{link_name}` on OS `{os}`",
os = this.tcx.sess.target.os,
))?;
return interp_ok(None);
);
if this.machine.panic_on_unsupported {
// message is slightly different here to make automated analysis easier
let error_msg = format!("unsupported Miri functionality: {error_msg}");
this.start_panic(error_msg.as_ref(), mir::UnwindAction::Continue)?;
} else {
throw_machine_stop!(TerminationInfo::UnsupportedForeignItem(error_msg));
}
}
}

View file

@ -168,10 +168,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
this.write_int(result.to_i32()?, dest)?;
}
id => {
this.handle_unsupported_foreign_item(format!(
"can't execute syscall with ID {id}"
))?;
return interp_ok(EmulateItemResult::AlreadyJumped);
throw_unsup_format!("can't execute syscall with ID {id}");
}
}
}

View file

@ -1,9 +0,0 @@
//@ignore-target: windows # no `syscall` on Windows
//@ignore-target: apple # `syscall` is not supported on macOS
//@compile-flags: -Zmiri-panic-on-unsupported
fn main() {
unsafe {
libc::syscall(0);
}
}

View file

@ -1,4 +0,0 @@
thread 'main' panicked at tests/panic/unsupported_syscall.rs:LL:CC:
unsupported Miri functionality: can't execute syscall with ID 0
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
note: in Miri, you may have to set `MIRIFLAGS=-Zmiri-env-forward=RUST_BACKTRACE` for the environment variable to have an effect