Data-race clock state from pinned Miri #
This module ports the pure ordering, thread-clock, and per-memory-cell clock
transitions in src/concurrency/data_race.rs at the pinned Miri revision.
The allocation-level interpreter hooks, MIR integration, DedupRangeMap,
diagnostic construction, and weak-memory store buffers are not modeled here.
In particular, these definitions are source-backed state operations, not a
standalone claim that a Rust program has been checked by Miri.
Miri Span values occur only in diagnostic attribution for the transitions
ported here. They do not affect the vector-clock ordering or race decision,
and are omitted from the Lean state. Atomic access sizes are represented as
the exact u64 byte counts used by rustc_abi::Size.
The five orderings accepted for read/write atomic operations.
- Relaxed : AtomicOrdering
- Acquire : AtomicOrdering
- Release : AtomicOrdering
- AcqRel : AtomicOrdering
- SeqCst : AtomicOrdering
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
An atomic ordering accepted by either a read or a write.
- Relaxed : AtomicRwOrd
- Acquire : AtomicRwOrd
- Release : AtomicRwOrd
- AcqRel : AtomicRwOrd
- SeqCst : AtomicRwOrd
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
The ordering subset accepted by atomic loads.
- Relaxed : AtomicReadOrd
- Acquire : AtomicReadOrd
- SeqCst : AtomicReadOrd
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
The ordering subset accepted by atomic stores.
- Relaxed : AtomicWriteOrd
- Release : AtomicWriteOrd
- SeqCst : AtomicWriteOrd
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
The ordering subset accepted by atomic fences.
- Acquire : AtomicFenceOrd
- Release : AtomicFenceOrd
- AcqRel : AtomicFenceOrd
- SeqCst : AtomicFenceOrd
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
A source-invalid ordering is made explicit where pinned Miri panics.
- invalidRead (ordering : AtomicOrdering) : AtomicOrderingError
- invalidWrite (ordering : AtomicOrdering) : AtomicOrderingError
- invalidFence (ordering : AtomicOrdering) : AtomicOrderingError
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Miri.Concurrency.instDecidableEqAtomicOrderingError.decEq (Miri.Concurrency.AtomicOrderingError.invalidRead ordering) (Miri.Concurrency.AtomicOrderingError.invalidWrite ordering_1) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicOrderingError.decEq (Miri.Concurrency.AtomicOrderingError.invalidRead ordering) (Miri.Concurrency.AtomicOrderingError.invalidFence ordering_1) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicOrderingError.decEq (Miri.Concurrency.AtomicOrderingError.invalidWrite ordering) (Miri.Concurrency.AtomicOrderingError.invalidRead ordering_1) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicOrderingError.decEq (Miri.Concurrency.AtomicOrderingError.invalidWrite ordering) (Miri.Concurrency.AtomicOrderingError.invalidFence ordering_1) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicOrderingError.decEq (Miri.Concurrency.AtomicOrderingError.invalidFence ordering) (Miri.Concurrency.AtomicOrderingError.invalidRead ordering_1) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicOrderingError.decEq (Miri.Concurrency.AtomicOrderingError.invalidFence ordering) (Miri.Concurrency.AtomicOrderingError.invalidWrite ordering_1) = isFalse ⋯
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Total conversion corresponding to AtomicRwOrd::from.
Equations
- Miri.Concurrency.AtomicRwOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Relaxed = Miri.Concurrency.AtomicRwOrd.Relaxed
- Miri.Concurrency.AtomicRwOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Acquire = Miri.Concurrency.AtomicRwOrd.Acquire
- Miri.Concurrency.AtomicRwOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Release = Miri.Concurrency.AtomicRwOrd.Release
- Miri.Concurrency.AtomicRwOrd.ofOrdering Miri.Concurrency.AtomicOrdering.AcqRel = Miri.Concurrency.AtomicRwOrd.AcqRel
- Miri.Concurrency.AtomicRwOrd.ofOrdering Miri.Concurrency.AtomicOrdering.SeqCst = Miri.Concurrency.AtomicRwOrd.SeqCst
Instances For
Checked conversion corresponding to AtomicReadOrd::from.
Release and AcqRel are explicit invalid-ordering outcomes, matching the
source panic rather than accepting or weakening them.
Equations
- Miri.Concurrency.AtomicReadOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Relaxed = Except.ok Miri.Concurrency.AtomicReadOrd.Relaxed
- Miri.Concurrency.AtomicReadOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Acquire = Except.ok Miri.Concurrency.AtomicReadOrd.Acquire
- Miri.Concurrency.AtomicReadOrd.ofOrdering Miri.Concurrency.AtomicOrdering.SeqCst = Except.ok Miri.Concurrency.AtomicReadOrd.SeqCst
- Miri.Concurrency.AtomicReadOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Release = Except.error (Miri.Concurrency.AtomicOrderingError.invalidRead Miri.Concurrency.AtomicOrdering.Release)
- Miri.Concurrency.AtomicReadOrd.ofOrdering Miri.Concurrency.AtomicOrdering.AcqRel = Except.error (Miri.Concurrency.AtomicOrderingError.invalidRead Miri.Concurrency.AtomicOrdering.AcqRel)
Instances For
Checked conversion corresponding to AtomicWriteOrd::from.
Acquire and AcqRel are explicit invalid-ordering outcomes.
Equations
- Miri.Concurrency.AtomicWriteOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Relaxed = Except.ok Miri.Concurrency.AtomicWriteOrd.Relaxed
- Miri.Concurrency.AtomicWriteOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Release = Except.ok Miri.Concurrency.AtomicWriteOrd.Release
- Miri.Concurrency.AtomicWriteOrd.ofOrdering Miri.Concurrency.AtomicOrdering.SeqCst = Except.ok Miri.Concurrency.AtomicWriteOrd.SeqCst
- Miri.Concurrency.AtomicWriteOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Acquire = Except.error (Miri.Concurrency.AtomicOrderingError.invalidWrite Miri.Concurrency.AtomicOrdering.Acquire)
- Miri.Concurrency.AtomicWriteOrd.ofOrdering Miri.Concurrency.AtomicOrdering.AcqRel = Except.error (Miri.Concurrency.AtomicOrderingError.invalidWrite Miri.Concurrency.AtomicOrdering.AcqRel)
Instances For
Checked conversion corresponding to AtomicFenceOrd::from.
Relaxed is an explicit invalid-ordering outcome.
Equations
- Miri.Concurrency.AtomicFenceOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Acquire = Except.ok Miri.Concurrency.AtomicFenceOrd.Acquire
- Miri.Concurrency.AtomicFenceOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Release = Except.ok Miri.Concurrency.AtomicFenceOrd.Release
- Miri.Concurrency.AtomicFenceOrd.ofOrdering Miri.Concurrency.AtomicOrdering.AcqRel = Except.ok Miri.Concurrency.AtomicFenceOrd.AcqRel
- Miri.Concurrency.AtomicFenceOrd.ofOrdering Miri.Concurrency.AtomicOrdering.SeqCst = Except.ok Miri.Concurrency.AtomicFenceOrd.SeqCst
- Miri.Concurrency.AtomicFenceOrd.ofOrdering Miri.Concurrency.AtomicOrdering.Relaxed = Except.error (Miri.Concurrency.AtomicOrderingError.invalidFence Miri.Concurrency.AtomicOrdering.Relaxed)
Instances For
Per-thread vector-clock state, including all Miri fence and SC metadata.
- clock : VClock
The increasing happens-before clock.
- fenceAcquire : VClock
Clock to acquire on a later acquire fence.
- fenceRelease : VClock
Clock released by the most recent release fence.
- writeSeqCst : VClock
Per-thread SC-write metadata used by weak-memory emulation.
- readSeqCst : VClock
Per-thread SC-fence metadata used by weak-memory emulation.
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
The source Default state: all five clocks are zero.
Equations
Instances For
Apply Miri's release-fence effect by copying the happens-before clock.
Equations
- state.applyReleaseFence = { clock := state.clock, fenceAcquire := state.fenceAcquire, fenceRelease := state.clock, writeSeqCst := state.writeSeqCst, readSeqCst := state.readSeqCst }
Instances For
Apply Miri's acquire-fence effect by joining the accumulated acquire clock.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Increment the known thread coordinate; timestamp overflow remains explicit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Join another thread's happens-before clock, leaving fence/SC metadata intact.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Byte size from rustc_abi::Size, whose stored representation is u64.
- value : Fin 18446744073709551616
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Result used for the source's Result<(), DataRace> cell transitions.
- ok : DataRaceResult
- race : DataRaceResult
- invalidClockUpdate (error : ClockError) : DataRaceResult
- internalInvariantViolation : DataRaceResult
- outOfBounds : DataRaceResult
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.ok Miri.Concurrency.DataRaceResult.ok = isTrue ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.ok (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.race Miri.Concurrency.DataRaceResult.race = isTrue ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.race (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) Miri.Concurrency.DataRaceResult.ok = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) Miri.Concurrency.DataRaceResult.race = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) Miri.Concurrency.DataRaceResult.internalInvariantViolation = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) Miri.Concurrency.DataRaceResult.outOfBounds = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.internalInvariantViolation (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.internalInvariantViolation Miri.Concurrency.DataRaceResult.internalInvariantViolation = isTrue ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.outOfBounds (Miri.Concurrency.DataRaceResult.invalidClockUpdate error) = isFalse ⋯
- Miri.Concurrency.instDecidableEqDataRaceResult.decEq Miri.Concurrency.DataRaceResult.outOfBounds Miri.Concurrency.DataRaceResult.outOfBounds = isTrue ⋯
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Per-byte metadata attached to atomic memory.
- readVector : VClock
Most recent atomic reads by thread.
- writeVector : VClock
Most recent atomic writes by thread.
- syncVector : VClock
Clock released by the current modification/release sequence.
One uniform size, or
noneafter concurrent differently-sized reads.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Initialize atomic metadata for the first access of a given size.
Equations
- Miri.Concurrency.AtomicMemoryCellClocks.new size = { size := some size }
Instances For
Non-atomic write kinds counted by the detector, including lifetime writes.
- Allocate : NaWriteType
- Write : NaWriteType
- Retag : NaWriteType
- Deallocate : NaWriteType
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Atomic accesses tracked by one memory cell.
- Load (ordering : AtomicReadOrd) : AtomicAccessType
- Store : AtomicAccessType
- Rmw : AtomicAccessType
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq (Miri.Concurrency.AtomicAccessType.Load a) (Miri.Concurrency.AtomicAccessType.Load b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq (Miri.Concurrency.AtomicAccessType.Load ordering) Miri.Concurrency.AtomicAccessType.Store = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq (Miri.Concurrency.AtomicAccessType.Load ordering) Miri.Concurrency.AtomicAccessType.Rmw = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq Miri.Concurrency.AtomicAccessType.Store (Miri.Concurrency.AtomicAccessType.Load ordering) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq Miri.Concurrency.AtomicAccessType.Store Miri.Concurrency.AtomicAccessType.Store = isTrue ⋯
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq Miri.Concurrency.AtomicAccessType.Rmw (Miri.Concurrency.AtomicAccessType.Load ordering) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAtomicAccessType.decEq Miri.Concurrency.AtomicAccessType.Rmw Miri.Concurrency.AtomicAccessType.Rmw = isTrue ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Access category used by Miri's race classifier.
- NaRead (readType : NaReadType) : AccessType
- NaWrite (writeType : NaWriteType) : AccessType
- AtomicLoad : AccessType
- AtomicStore : AccessType
- AtomicRmw : AccessType
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaRead a) (Miri.Concurrency.AccessType.NaRead b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaRead readType) (Miri.Concurrency.AccessType.NaWrite writeType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaRead readType) Miri.Concurrency.AccessType.AtomicLoad = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaRead readType) Miri.Concurrency.AccessType.AtomicStore = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaRead readType) Miri.Concurrency.AccessType.AtomicRmw = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaWrite writeType) (Miri.Concurrency.AccessType.NaRead readType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaWrite a) (Miri.Concurrency.AccessType.NaWrite b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaWrite writeType) Miri.Concurrency.AccessType.AtomicLoad = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaWrite writeType) Miri.Concurrency.AccessType.AtomicStore = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq (Miri.Concurrency.AccessType.NaWrite writeType) Miri.Concurrency.AccessType.AtomicRmw = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicLoad (Miri.Concurrency.AccessType.NaRead readType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicLoad (Miri.Concurrency.AccessType.NaWrite writeType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicLoad Miri.Concurrency.AccessType.AtomicLoad = isTrue ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicStore (Miri.Concurrency.AccessType.NaRead readType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicStore (Miri.Concurrency.AccessType.NaWrite writeType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicStore Miri.Concurrency.AccessType.AtomicStore = isTrue ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicRmw (Miri.Concurrency.AccessType.NaRead readType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicRmw (Miri.Concurrency.AccessType.NaWrite writeType) = isFalse ⋯
- Miri.Concurrency.instDecidableEqAccessType.decEq Miri.Concurrency.AccessType.AtomicRmw Miri.Concurrency.AccessType.AtomicRmw = isTrue ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
Instances For
Equations
Instances For
Equations
- (Miri.Concurrency.AccessType.NaRead Miri.Concurrency.NaReadType.Retag).isRetag = true
- (Miri.Concurrency.AccessType.NaWrite Miri.Concurrency.NaWriteType.Retag).isRetag = true
- (Miri.Concurrency.AccessType.NaRead Miri.Concurrency.NaReadType.Read).isRetag = false
- (Miri.Concurrency.AccessType.NaWrite Miri.Concurrency.NaWriteType.Allocate).isRetag = false
- (Miri.Concurrency.AccessType.NaWrite Miri.Concurrency.NaWriteType.Write).isRetag = false
- (Miri.Concurrency.AccessType.NaWrite Miri.Concurrency.NaWriteType.Deallocate).isRetag = false
- Miri.Concurrency.AccessType.AtomicLoad.isRetag = false
- Miri.Concurrency.AccessType.AtomicStore.isRetag = false
- Miri.Concurrency.AccessType.AtomicRmw.isRetag = false
Instances For
Per-byte vector-clock state exactly corresponding to MemoryCellClocks fields.
Last non-atomic write thread and timestamp.
- writeType : NaWriteType
Kind of the most recent non-atomic write.
- read : VClock
Vector clock of non-atomic reads since the last write.
- atomicOps : Option AtomicMemoryCellClocks
Additional metadata, lazily created for atomic accesses.
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Initialize one byte as a newly allocated non-atomic location.
Equations
- Miri.Concurrency.MemoryCellClocks.new allocationTimestamp allocationIndex = { write := (allocationIndex, allocationTimestamp), writeType := Miri.Concurrency.NaWriteType.Allocate }
Instances For
Materialize the singleton write clock used by diagnostics.
Equations
- cell.writeClock = Miri.Concurrency.VClock.newWithIndex cell.write.fst cell.write.snd
Instances For
The source's size-state transition for an atomic access.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A cell operation returns mutated states even when a race is detected. This matches the source's mutation-before-check order; execution then terminates at the caller.
- cell : MemoryCellClocks
- thread : ThreadClockSet
- result : DataRaceResult
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Record an atomic load, then check whether the non-atomic write is ordered.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Record an atomic write, then check prior non-atomic writes and reads.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Atomic load-acquire: detect the access and then acquire either the supplied weak-memory synchronization clock or the cell's release-sequence clock.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Atomic load-relaxed: it accumulates the synchronization clock for a later acquire fence instead of joining the happens-before clock immediately.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Atomic release store publishes the thread's happens-before clock.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Atomic relaxed store breaks the previous release sequence, replacing it with the thread's release-fence clock.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Release RMW extends (rather than replaces) the prior release sequence.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Relaxed RMW extends the release sequence with the current release-fence clock.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Non-atomic read: mark the current thread timestamp with the exact read kind, check non-atomic and atomic writes, and record the read clock.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Non-atomic write: check prior writes, reads, and atomic accesses; on success replace the write timestamp, reset read clocks, and remove atomic metadata.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A memory byte range, using the exact rustc_abi Size byte counts.
Instances For
Equations
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Sparse representation of DedupRangeMap<MemoryCellClocks>.
Unmodified bytes share the allocation's initial cell; changed bytes are stored
as overrides. Range boundaries and deduplication are storage details, while
this representation preserves the per-byte values that the detector reads.
- length : ByteSize
- initialCell : MemoryCellClocks
- overrides : List (Nat × MemoryCellClocks)
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Read one byte; an absent override denotes its original allocation state.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Replace one byte, preserving an explicit bounds failure.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Allocation-level vector-clock state (AllocState in pinned Miri).
The construction input is the allocation timestamp already selected by Miri's
MemoryKind classification; that interpreter classification is outside this
pure clock-state module.
- allocRanges : AllocationRanges
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
Initialize every byte with the allocation write state, represented lazily.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Read one byte's effective clock state.
Equations
- allocation.cellAt offset = allocation.allocRanges.cellAt offset
Instances For
Replace one byte's clock state.
Equations
Instances For
Result of applying a per-cell race-detection hook to a byte range.
- allocation : VClockAlloc
- thread : ThreadClockSet
- result : DataRaceResult
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply a source per-byte operation over a validated allocation range. Earlier bytes remain updated if a later byte reports a race, matching Miri's mutable range iteration order.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Allocation-level non-atomic read hook, applying the exact per-byte read detector and preserving regular-read versus retag-read categorization.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Allocation-level non-atomic write hook.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Allocation-level atomic-read race hook. Atomic ordering synchronization is applied by the corresponding per-cell load transition.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Allocation-level atomic-write race hook.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply the source's ordering-specific atomic-load transition to every byte in a range. The optional clock overrides the cell's release-sequence clock, as it does when a weak-memory load selects a particular store.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply Miri's atomic-store ordering to every byte in a range.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply one atomic read-modify-write per byte, performing the read half before the write half and extending the release sequence according to the source ordering.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Join the release-sequence clocks attached to every byte in a memory range,
matching VClockAlloc::sync_clock. Uninitialized atomic metadata contributes
the zero clock.
Equations
- One or more equations did not get rendered due to their size.