Module rustc_middle::mir::interpret
source · Expand description
An interpreter for MIR used in CTFE and by miri.
Modules
Structs
AllocMap 🔒
The information that makes up a memory access: offset and size.
This type represents an Allocation in the Miri/CTFE core engine.
Represents the result of const evaluation via the
eval_to_allocation
query.Interned types generally have an
Outer
type and an Inner
type, where
Outer
is a newtype around Interned<Inner>
, and all the operations are
done on Outer
, because all occurrences are interned. E.g. Ty
is an
outer type and TyKind
is its inner type.Uniquely identifies one of the following:
Yields
InitChunk
s. See InitMask::range_as_init_chunks
.Packages the kind of error we got from the const code interpreter
up with a Rust-level backtrace of where the error occurred.
These should always be constructed by calling
.into()
on
an InterpError
. In rustc_mir::interpret
, we have throw_err_*
macros for this.Input argument for
tcx.lit_to_const
.Represents a pointer in the Miri engine.
Information about a size mismatch.
Details of an access to uninitialized bytes where it is not allowed.
Enums
We have our own error type that does not know about the
AllocId
; that information
is added when converting to InterpError
.Details of why a pointer had to be in-bounds.
Represents a constant value in Rust.
Scalar
and Slice
are optimizations for
array length computations, enum discriminants and the pattern matching logic.An allocation in the global (tcx-managed) memory can be either a function pointer,
a static, or a “real” allocation with some data in it.
A contiguous chunk of initialized or uninitialized memory.
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.
Error type for
tcx.lit_to_const
.Error information for when the program exhausted the resources granted to it
by the interpreter.
A
Scalar
represents an immediate, primitive value existing outside of a
memory::Allocation
. It is in many ways like a small chunk of an Allocation
, up to 16 bytes in
size. Like a range of bytes in an Allocation
, a Scalar
can either represent the raw bytes
of a simple value or a pointer into another Allocation
State 🔒
Error information for when the program caused Undefined Behavior.
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 dereferencing pointers at integral addresses.
Traits
A trait for machine-specific errors (or other “machine stop” conditions).
This trait abstracts over the kind of provenance that is associated with a
Pointer
. It is
mostly opaque; the Machine
trait extends it with some more operations that also have access to
some global state.
The Debug
rendering is used to distplay bare provenance, and for the default impl of fmt
.Functions
Free-starting constructor for less syntactic overhead.
Gets the bytes of a constant slice value.