Auto merge of #60116 - RalfJung:miri-exit, r=oli-obk

add Miri error variant for process exit

This is to support https://github.com/rust-lang/miri/pull/702

r? @oli-obk
This commit is contained in:
bors 2019-04-21 02:38:15 +00:00
commit 9224be5fa3
2 changed files with 9 additions and 0 deletions

View file

@ -229,6 +229,10 @@ pub enum InterpError<'tcx, O> {
/// match an existing variant.
MachineError(String),
/// Not actually an interpreter error -- used to signal that execution has exited
/// with the given status code. Used by Miri, but not by CTFE.
Exit(i32),
FunctionAbiMismatch(Abi, Abi),
FunctionArgMismatch(Ty<'tcx>, Ty<'tcx>),
FunctionRetMismatch(Ty<'tcx>, Ty<'tcx>),
@ -317,6 +321,8 @@ impl<'tcx, O> InterpError<'tcx, O> {
use self::InterpError::*;
match *self {
MachineError(ref inner) => inner,
Exit(..) =>
"exited",
FunctionAbiMismatch(..) | FunctionArgMismatch(..) | FunctionRetMismatch(..)
| FunctionArgCountMismatch =>
"tried to call a function through a function pointer of incompatible type",
@ -515,6 +521,8 @@ impl<'tcx, O: fmt::Debug> fmt::Debug for InterpError<'tcx, O> {
write!(f, "the evaluated program panicked at '{}', {}:{}:{}", msg, file, line, col),
InvalidDiscriminant(val) =>
write!(f, "encountered invalid enum discriminant {}", val),
Exit(code) =>
write!(f, "exited with status code {}", code),
_ => write!(f, "{}", self.description()),
}
}

View file

@ -148,6 +148,7 @@ impl<'a, 'mir, 'tcx> ConstPropagator<'a, 'mir, 'tcx> {
match diagnostic.error {
// don't report these, they make no sense in a const prop context
| MachineError(_)
| Exit(_)
// at runtime these transformations might make sense
// FIXME: figure out the rules and start linting
| FunctionAbiMismatch(..)