The state and per-location update layer from pinned Miri
tree_borrows/tree.rs. This is below the allocation-wide range map and tree
visitor: it keeps the initialization/accessed bit, permission, SIFA cache,
and the exact permission/protector error ordering for one tree node at one
location.
Transition errors emitted by the per-location layer. ProtectedDealloc
belongs to the later tree-wide deallocation check.
- ChildAccessForbidden (permission : Permission) : TransitionError
- ProtectedDisabled (permission : Permission) : TransitionError
- ProtectedDealloc : TransitionError
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The two continuation results used by Miri's tree visitor.
- Recurse : ContinueTraversal
- SkipSelfAndChildren : ContinueTraversal
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Per-node state at one allocation location. A false accessed bit stores
the future initial permission for a location that has not yet been reached by
a child pointer.
- permission : Permission
- accessed : Bool
- idempotentForeignAccess : IdempotentForeignAccess
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Construction failures corresponding to the source assert!s.
- Constructed (state : LocationState) : ConstructionResult
- PermissionNotInitialOrDisabled : ConstructionResult
- UniquePermissionNotAccessed : ConstructionResult
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Source new_non_accessed, with its assertions retained as explicit
outcomes.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Source new_accessed has no validity assertions.
Equations
- Miri.TreeBorrows.Tree.LocationState.newAccessed permission sifa = { permission := permission, accessed := true, idempotentForeignAccess := sifa }
Instances For
A lazy Unique state is unreachable; every other permission is possible
regardless of whether its location has been accessed.
Instances For
Check whether any child pointer has accessed this location.
Equations
- state.isAccessed = state.accessed
Instances For
Current permission or future initial permission.
Equations
- state.currentPermission = state.permission
Instances For
Result of the tree traversal's per-node skip predicate.
Equations
- One or more equations did not get rendered due to their size.
Instances For
SIFA update with the source debug-assert precondition represented as a separate result.
- Recorded (state : LocationState) : RecordAccessResult
- DebugAssertion : RecordAccessResult
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Source record_new_access; callers must only record accesses whose
skip-check result is Recurse.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Result of applying one access to one location, including the resulting
state on source Err results. Miri mutates the state before returning a
ProtectedDisabled error.
- Success (state : LocationState) (transition : PermTransition) : AccessResult
- Error (state : LocationState) (error : Diagnostics.TransitionError) : AccessResult
- PermissionInvariantFailure (state : LocationState) : AccessResult
- TransitionApplicationInvariantFailure (state : LocationState) : AccessResult
- PossibleInvariantFailure (state : LocationState) : AccessResult
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
The location state after a call, including state retained on source errors.
Equations
- (Miri.TreeBorrows.Tree.LocationState.AccessResult.Success a a_1).resultingState = a
- (Miri.TreeBorrows.Tree.LocationState.AccessResult.Error a a_1).resultingState = a
- (Miri.TreeBorrows.Tree.LocationState.AccessResult.PermissionInvariantFailure a).resultingState = a
- (Miri.TreeBorrows.Tree.LocationState.AccessResult.TransitionApplicationInvariantFailure a).resultingState = a
- (Miri.TreeBorrows.Tree.LocationState.AccessResult.PossibleInvariantFailure a).resultingState = a
Instances For
Apply LocationState::perform_access in source order.
Permission failure leaves the old location untouched. Otherwise the access
bit and permission are updated before the protector check; thus a protected
transition to Disabled is an error only if the location is now accessed.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A forbidden child access leaves every part of the location state intact.