about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTyler Mandry <tmandry@gmail.com>2019-09-17 14:10:55 -0700
committerGitHub <noreply@github.com>2019-09-17 14:10:55 -0700
commitf8b6e26cfbd301bbced3e4cab2c25b0164a39c81 (patch)
tree05f1d6f3cf979f4a65776806de02cb7772da726e
parentd782f09ae0b88a73a69e2fa3169222cdbc47d4ec (diff)
parentdaafeb35b731a599fc8b6c4cf37b81f838dae319 (diff)
downloadrust-f8b6e26cfbd301bbced3e4cab2c25b0164a39c81.tar.gz
rust-f8b6e26cfbd301bbced3e4cab2c25b0164a39c81.zip
Rollup merge of #64541 - RalfJung:miri-errors, r=oli-obk
document Miri error categories

r? @oli-obk
-rw-r--r--src/librustc/mir/interpret/error.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/librustc/mir/interpret/error.rs b/src/librustc/mir/interpret/error.rs
index 67b3ce0e63f..ac99ccd45ea 100644
--- a/src/librustc/mir/interpret/error.rs
+++ b/src/librustc/mir/interpret/error.rs
@@ -322,6 +322,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.
@@ -351,6 +354,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!
@@ -373,12 +377,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>),
@@ -545,6 +556,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.