Module rustc_const_eval::interpret

source ยท
Expand description

An interpreter for MIR used in CTFE and by miri

Re-exportsยง

Modulesยง

  • 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.
  • step ๐Ÿ”’
    This module contains the InterpCx methods for executing a single step of the interpreter.
  • terminator ๐Ÿ”’
  • 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ยง

  • 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ยง

  • A reference to some allocation that was already bounds-checked for the given region and had the on-access machine hooks run.
  • A reference to some allocation that was already bounds-checked for the given region and had the on-access machine hooks run.
  • A stack frame.
  • What we store about a frame in an interpreter backtrace.
  • A MemPlace with its layout. Constructing it is only possible in this module.
  • An evaluated place, together with its type.
  • State for tracking recursive validation of references

Enumsยง

  • The return value of get_alloc_info indicates the โ€œkindโ€ of the allocation.
  • Extra things to check for during validation of CTFE results.
  • An argment passed to a function.
  • The value of a function pointer.
  • An Immediate represents a single immediate self-contained Rust value.
  • How a constant value should be interned.
  • Information required for the sound usage of a MemPlace.
  • Describes the constraints placed on offset-projections.
  • Data returned by Machine::stack_pop, to provide further control over the popping of the stack frame

Traitsยง

  • The functionality needed by memory to manage its allocations
  • Methods of this trait signifies a point where CTFE evaluation would fail and some use case dependent behaviour can instead be applied.
  • Whether this kind of memory is allowed to leak
  • A thing that we can project into, and that has a layout.
  • The Readable trait describes interpreter values that one can read from.
  • How to traverse a value and what to do when we are at the leaves.
  • The Weiteable trait describes interpreter values that can be written to.

Functionsยง