Skip to main content

Module interpret

Module interpret 

Source
Expand description

An interpreter for MIR used in CTFE and by miri

Re-exportsยง

pub use rustc_middle::mir::interpret::*;

Modulesยง

call ๐Ÿ”’
Manages calling a concrete function (with known MIR body) with argument passing, and returning the return value to the caller.
cast ๐Ÿ”’
discriminant ๐Ÿ”’
Functions for reading and writing discriminants of multi-variant layouts (enums and coroutines).
eval_context ๐Ÿ”’
intern ๐Ÿ”’
This module specifies the type based interner for constants.
intrinsics ๐Ÿ”’
Intrinsics and other functions that the interpreter executes without looking at their MIR. Intrinsics/functions supported here are shared by CTFE and miri.
machine ๐Ÿ”’
This module contains everything needed to instantiate an interpreter. This separation exists to ensure that no fancy miri features like interpreting common C functions leak into CTFE.
memory ๐Ÿ”’
The memory subsystem.
operand ๐Ÿ”’
Functions concerning immediate values and operands, and reading from operands. All high-level functions to read from memory work on operands as sources.
operator ๐Ÿ”’
place ๐Ÿ”’
Computations on places โ€“ field projections, going from mir::Place, and writing into a place. All high-level functions to write to memory work on places as destinations.
projection ๐Ÿ”’
This file implements โ€œplace projectionsโ€; basically a symmetric API for 3 types: MPlaceTy, OpTy, PlaceTy.
stack ๐Ÿ”’
Manages the low-level pushing and popping of stack frames and the (de)allocation of local variables. For handling of argument passing and return values, see the call module.
step ๐Ÿ”’
This module contains the InterpCx methods for executing a single step of the interpreter.
traits ๐Ÿ”’
util ๐Ÿ”’
validity ๐Ÿ”’
Check the validity invariant of a given value, and tell the user where in the value it got violated. In const context, this goes even further and tries to approximate const safety. Thatโ€™s useful because it means other passes (e.g. promotion) can rely on consts to be const-safe.
visitor ๐Ÿ”’
Visitor for a run-time value with a given layout: Traverse enums, structs and other compound types until we arrive at the leaves, with custom handling for primitive types.

Macrosยง

compile_time_machine
A lot of the flexibility above is just needed for Miri, but all โ€œcompile-timeโ€ machines (CTFE and ConstProp) use the same instance. Here, we share that code.

Structsยง

AllocInfo
Metadata about an AllocId.
AllocRef
A reference to some allocation that was already bounds-checked for the given region and had the on-access machine hooks run.
AllocRefMut
A reference to some allocation that was already bounds-checked for the given region and had the on-access machine hooks run.
Frame
A stack frame.
FrameInfo
What we store about a frame in an interpreter backtrace.
ImmTy
InterpCx
LocalState
State of a local variable including a memoized layout
MPlaceTy
A MemPlace with its layout. Constructing it is only possible in this module.
Memory
OpTy
PlaceTy
An evaluated place, together with its type.
RefTracking
State for tracking recursive validation of references

Enumsยง

AllocKind
The return value of get_alloc_info indicates the โ€œkindโ€ of the allocation.
CtfeValidationMode
Extra things to check for during validation of CTFE results.
FnArg
An argument passed to a function.
FnVal
The value of a function pointer.
Immediate
An Immediate represents a single immediate self-contained Rust value.
InternError
InternKind
How a constant value should be interned.
MemPlaceMeta
Information required for the sound usage of a MemPlace.
MemoryKind
OffsetMode
Describes the constraints placed on offset-projections.
RetagMode
The currently active retagging mode.
ReturnAction
Data returned by Machine::after_stack_pop, and consumed by InterpCx::return_from_current_stack_frame to determine what actions should be done when returning from a stack frame.
ReturnContinuation
Where and how to continue when returning/unwinding from the current function.

Traitsยง

AllocMap
The functionality needed by memory to manage its allocations
EnteredTraceSpan
A marker trait returned by crate::interpret::Machine::enter_trace_span, identifying either a real tracing::span::EnteredSpan in case tracing is enabled, or the dummy type () when tracing is disabled. Also see crate::enter_trace_span! below.
HasStaticRootDefId
Machine
Methods of this trait signifies a point where CTFE evaluation would fail and some use case dependent behaviour can instead be applied.
MayLeak
Whether this kind of memory is allowed to leak
Projectable
A thing that we can project into, and that has a layout.
ValueVisitor
How to traverse a value and what to do when we are at the leaves.
Writeable
The Weiteable trait describes interpreter values that can be written to.

Functionsยง

format_interp_error
Turn the given error into a human-readable string. Expects the string to be printed, so if RUSTC_CTFE_BACKTRACE is set this will show a backtrace of the rustc internals that triggered the error.
intern_const_alloc_for_constprop
Intern ret. This function assumes that ret references no other allocation.
intern_const_alloc_recursive
Intern ret and everything it references.

Type Aliasesยง

RangeSet