Module flowistry_pdg::rustc::mir
source · Expand description
MIR datatypes and passes. See the rustc dev guide for more info.
Modules
- Metadata from source code coverage analysis and instrumentation.
- An interpreter for MIR used in CTFE and by miri.
- Methods for the various MIR types. These are intended for use after building is complete.
- The MIR Visitor
Structs
- A node in the MIR control-flow graph.
- Data for a basic block, including a list of its statements.
BlockTailInfo
is attached to theLocalDecl
for temporaries created during evaluation of expressions in a block tail expression; that is, a block like{ STMT_1; STMT_2; EXPR }
.- The lowered representation of a single function.
- Indicates an outlives-constraint between a type or between two free regions declared on the closure.
- Represents a
ty::Ty
for use inClosureOutlivesSubject
. - After we borrow check a closure, we are left with various requirements that we have inferred between the free regions that appear in the closure’s signature or on its field types. These requirements are then verified and proved by the closure’s creating function. This struct encodes those requirements.
- The result of the
mir_const_qualif
query. - Constants
- Coverage information summarized from a MIR if instrumented for source code coverage (see compiler option
-Cinstrument-coverage
). This information is generated by theInstrumentCoverage
MIR pass and can be retrieved via thecoverageinfo
query. - The constituent parts of a mir constant of kind ADT or array.
- The layout of generator state.
- A MIR local.
Location
represents the position of the start of the statement; or, ifstatement_index
equals the number of statements, then the start of the terminator.- Where a specific
mir::Body
comes from. - Places roughly correspond to a “location in memory.” Places in MIR are the same mathematical object as places in Rust. This of course means that what exactly they are is undecided and part of the Rust memory model. However, they will likely contain at least the following pieces of information in some form:
- Grouped information about the source code origin of a MIR entity. Intended to be inspected by diagnostics and debuginfo. Most passes can work with it as a whole, within a single function.
- A statement in a basic block, including information about its source code.
- An unevaluated (potentially generic) constant used in MIR.
- Encodes the effect of a user-supplied type annotation on the subcomponents of a pattern. The effect is determined by applying the given list of projections to some underlying base type. Often, the projection element list
projs
is empty, in which case this directly encodes a type inbase
. But in the case of complex patterns with subpatterns and bindings, we want to apply only a part of the type to a variable, in which case theprojs
vector is used. - A collection of projections into user types.
- Debug information pertaining to a user variable.
Enums
- See
MirPhase::Analysis
. - Information about an assertion failure.
- List of places that are written to after a successful (non-unwind) return from a
Call
,Yield
orInlineAsm
. - Represents how a
TerminatorKind::Call
was constructed, used for diagnostics - The subject of a
ClosureOutlivesRequirement
– that is, the thing that must outlive some region. - Outlives-constraints can be categorized to determine whether and why they are interesting (for error reporting). Order of variants indicates sort order of the category, thereby influencing diagnostic output.
- The
FakeReadCause
describes the type of pattern why a FakeRead statement exists. - Extra information about a some locals that’s used for diagnostics and for classifying variables into local variables, statics, etc, which is needed e.g. for unsafety checking.
- Classifies locals into categories. See
Body::local_kind
. - Represents the “flavors” of MIR.
- An operand in MIR represents a “value” in Rust, the definition of which is undecided and part of the memory model. One proposal for a definition of values can be found on UCG.
- An indication of where we are in the control flow graph. Used for printing extra information in
dump_mir
- Describes what kind of retag is to be performed.
- See
MirPhase::Runtime
. - The various kinds of rvalues that can appear in MIR.
- The various kinds of statements that can appear in MIR.
- The various kinds of terminators, representing ways of exiting from a basic block.
- Action to be taken when a stack unwind happens.
Constants
Traits
- A streamlined trait that you can implement to create a pass; the pass will be named after the type, and it will consist of a main loop that goes over each available MIR and applies
run_pass
.
Functions
- Attempts to open a file where we should dump a given MIR or other bit of MIR-related data. Used by
mir-dump
, but also by other bits of code (e.g., NLL inference) that dump graphviz data or other things, and hence takes the extension as an argument. - Dumps the size and metadata and content of an allocation to the given writer. The expectation is that the caller first prints other relevant metadata, so the exact format of this function is (without leading or trailing newline):
- If the session is properly configured, dumps a human-readable representation of the mir into:
- Write a graphviz DOT graph of a list of MIRs.
- Write out a human-readable textual representation for the given MIR.
Type Aliases
- Type for MIR
Assert
terminator error messages. - Types for locals
- Alias for projections as they appear in places, where the base is a place and the index is a local.
- Alias for projections as they appear in
UserTypeProjection
, where we need neither theV
parameter forIndex
nor theT
forField
.