Expand description
Symbolic VM state types.
The data structures that represent the symbolic execution state: symbolic values and their invariants, memory allocations, and the full execution state at a program point.
StructsΒ§
- Alloc
Facts π - Per-allocation lifecycle facts (
dead/liveness/for_each), kept apart from the allocationβs shape metadata andparentedge so identity/layout and facts are separated at the type level. The content facts (readability, C-string/UTF-8 trust) live onContentFactsinstead. - AllocId π
- Unique identifier for a heap or stack allocation.
- Allocation π
- A memory allocation: a stack local, a heap object (
Box/Vec), or an external raw-pointer placeholder. - Constraints π
- Accumulated solver state for the current path.
- Content
Facts π - Per-allocation content facts: whether the allocationβs contents are
readable, and whether they were asserted to be a valid C string / UTF-8.
These describe the stored bytes/values, so they live on
MemoryContentnext to that data, rather than onAllocFacts(lifecycle). - ForEach
Facts π - Uniform facts about the pointer elements of a container, established by
x.iter()for_each invariants. - Frame
State π - The frame-scoped subset of
VmState: the name β allocation binding keyed by MIRLocal, which the callee reuses, so it must be swapped out for the duration of an inlined callee and swapped back afterwards. - Inline
Ctx π - Scratch state for the recursive inlined-callee mechanism
([
crate::verify::vm::call::exec_inline_call]), which unwinds via the Rust call stack, is bounded byinline_depth, and stashes its per-call bindings inarg_referents/deferred_field_writes. - Memory
Content π - The per-allocation contents: the byte layer, the typed-value layer, and the content facts.
- Memory
Unit π - A single allocation: its shape metadata (
Allocation) plus its contents (MemoryContent). Splitting the two keeps the identity/layout facts apart from the mutable memory the values live in, while colocating them in one unit so no parallel table can drift out of sync. Facts live in three anchored layers β lifecycle (AllocFacts), content (ContentFacts), and value (ValueFactson eachVmValue) β see each typeβs doc. - Path
Facts π - Per-path facts, read afterwards by the property checker.
- Provenance π
- Pointer provenance: which allocation, at what byte offset, and (when known) what structure that offset has.
- Term
Caches π - Term-provenance caches, one per phenomenon the VM must shape by hand.
- Value
Facts π - Value-level facts about a single symbolic value (nullness, alignment,
bounds, and whether it has been written). These travel with the value β a
VmValueleaves its allocation when passed as an operand or stashed inInlineCtx::deferred_field_writesβ so they live on the value, not the allocation. The allocation-level counterpart toinitisContentFacts::initialized, kept in sync byVmState::mark_initialized. - VmState π
- The full symbolic execution state at a program point.
- VmValue π
- A symbolic value tracked by the VM.
EnumsΒ§
- Alloc
Kind π - The shape of an allocation: a single object, a slice/array buffer, or an
external raw-pointer parameter.
element_ty(typed vs untyped) and theparentsub-view edge stay separate fields. - Element
Ty π - The element type of an allocationβs contents, either a concrete [
Ty] or symbolic (Generic). - Offset
Kind π - The structure of a pointerβs byte offset, when it has one.
- Value
Source π - The extra semantics attached to a value, beyond its term/type/provenance.