rustc_const_eval

Module interpret

source
Expand description

An interpreter for MIR used in CTFE and by miri

Re-exports§

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§

  • 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.
  • State of a local variable including a memoized layout
  • A MemPlace with its layout. Constructing it is only possible in this module.
  • An evaluated place, together with its type.
  • Represents a set of Size values as a sorted list of ranges.
  • State for tracking recursive validation of references

Enums§

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.
  • 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§