Skip to content

Commit

Permalink
document Miri error categories
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed Sep 17, 2019
1 parent 5670d04 commit daafeb3
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion src/librustc/mir/interpret/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,9 @@ impl<O: fmt::Debug> fmt::Debug for PanicInfo<O> {
}
}

/// Error information for when the program we executed turned out not to actually be a valid
/// program. This cannot happen in stand-alone Miri, but it can happen during CTFE/ConstProp
/// where we work on generic code or execution does not have all information available.
#[derive(Clone, RustcEncodable, RustcDecodable, HashStable)]
pub enum InvalidProgramInfo<'tcx> {
/// Resolution can fail if we are in a too generic context.
Expand Down Expand Up @@ -342,6 +345,7 @@ impl fmt::Debug for InvalidProgramInfo<'tcx> {
}
}

/// Error information for when the program caused Undefined Behavior.
#[derive(Clone, RustcEncodable, RustcDecodable, HashStable)]
pub enum UndefinedBehaviorInfo {
/// Free-form case. Only for errors that are never caught!
Expand All @@ -364,12 +368,19 @@ impl fmt::Debug for UndefinedBehaviorInfo {
}
}

/// Error information for when the program did something that might (or might not) be correct
/// to do according to the Rust spec, but due to limitations in the interpreter, the
/// operation could not be carried out. These limitations can differ between CTFE and the
/// Miri engine, e.g., CTFE does not support casting pointers to "real" integers.
///
/// Currently, we also use this as fall-back error kind for errors that have not been
/// categorized yet.
#[derive(Clone, RustcEncodable, RustcDecodable, HashStable)]
pub enum UnsupportedOpInfo<'tcx> {
/// Free-form case. Only for errors that are never caught!
Unsupported(String),

// -- Everything below is not classified yet --
// -- Everything below is not categorized yet --
FunctionAbiMismatch(Abi, Abi),
FunctionArgMismatch(Ty<'tcx>, Ty<'tcx>),
FunctionRetMismatch(Ty<'tcx>, Ty<'tcx>),
Expand Down Expand Up @@ -536,6 +547,8 @@ impl fmt::Debug for UnsupportedOpInfo<'tcx> {
}
}

/// Error information for when the program exhausted the resources granted to it
/// by the interpreter.
#[derive(Clone, RustcEncodable, RustcDecodable, HashStable)]
pub enum ResourceExhaustionInfo {
/// The stack grew too big.
Expand Down

0 comments on commit daafeb3

Please sign in to comment.