From 6ff7c8fa047f98bfc6f1d7c9abdd64bc557add32 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 31 Jul 2017 13:20:37 -0700 Subject: [PATCH] more documentation --- src/librustc/mir/mod.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/librustc/mir/mod.rs b/src/librustc/mir/mod.rs index 3ee86dbdc846..f7ef542544cc 100644 --- a/src/librustc/mir/mod.rs +++ b/src/librustc/mir/mod.rs @@ -825,7 +825,9 @@ pub enum StatementKind<'tcx> { inputs: Vec> }, - /// Assert the given lvalues to be valid inhabitants of their type. + /// Assert the given lvalues to be valid inhabitants of their type. These statements are + /// currently only interpreted by miri and only generated when "-Z mir-emit-validate" is passed. + /// See for more details. Validate(ValidationOp, Vec>>), /// Mark one terminating point of an extent (i.e. static region). @@ -836,10 +838,19 @@ pub enum StatementKind<'tcx> { Nop, } +/// The `ValidationOp` describes what happens with each of the operands of a +/// `Validate` statement. #[derive(Copy, Clone, RustcEncodable, RustcDecodable, PartialEq, Eq)] pub enum ValidationOp { + /// Recursively traverse the lvalue following the type and validate that all type + /// invariants are maintained. Furthermore, acquire exclusive/read-only access to the + /// memory reachable from the lvalue. Acquire, + /// Recursive traverse the *mutable* part of the type and relinquish all exclusive + /// access. Release, + /// Recursive traverse the *mutable* part of the type and relinquish all exclusive + /// access *until* the given region ends. Then, access will be recovered. Suspend(CodeExtent), }