The generic engine pointer from pinned rustc mir/interpret/pointer.rs and
the concrete Miri provenance from machine.rs are kept separate. In Miri the
offset field is an absolute address; with CTFE provenance it is relative.
None of these constructors or wrapping operations establishes dereference
validity, liveness, alignment, permission, or initialization.
- offset : ABI.Size
- provenance : Prov
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
- Miri.Memory.instReprPointer = { reprPrec := Miri.Memory.instReprPointer.repr }
Errors corresponding to source assertion/try_into failures, not UB.
- sourceSizeError (reason : ABI.SizeError) : PointerError
- unsignedConversionOverflow : PointerError
- signedConversionOverflow : PointerError
- relativeProvenanceHasNoAbsoluteAddress : PointerError
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Miri.Memory.instDecidableEqPointerError.decEq (Miri.Memory.PointerError.sourceSizeError a) (Miri.Memory.PointerError.sourceSizeError b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq (Miri.Memory.PointerError.sourceSizeError reason) Miri.Memory.PointerError.unsignedConversionOverflow = isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq (Miri.Memory.PointerError.sourceSizeError reason) Miri.Memory.PointerError.signedConversionOverflow = isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq (Miri.Memory.PointerError.sourceSizeError reason) Miri.Memory.PointerError.relativeProvenanceHasNoAbsoluteAddress = isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq Miri.Memory.PointerError.unsignedConversionOverflow (Miri.Memory.PointerError.sourceSizeError reason) = isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq Miri.Memory.PointerError.unsignedConversionOverflow Miri.Memory.PointerError.unsignedConversionOverflow = isTrue ⋯
- Miri.Memory.instDecidableEqPointerError.decEq Miri.Memory.PointerError.signedConversionOverflow (Miri.Memory.PointerError.sourceSizeError reason) = isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq Miri.Memory.PointerError.signedConversionOverflow Miri.Memory.PointerError.signedConversionOverflow = isTrue ⋯
- Miri.Memory.instDecidableEqPointerError.decEq Miri.Memory.PointerError.relativeProvenanceHasNoAbsoluteAddress (Miri.Memory.PointerError.sourceSizeError reason) = isFalse ⋯
- Miri.Memory.instDecidableEqPointerError.decEq Miri.Memory.PointerError.relativeProvenanceHasNoAbsoluteAddress Miri.Memory.PointerError.relativeProvenanceHasNoAbsoluteAddress = isTrue ⋯
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Target-size operations from PointerArithmetic. Assertions and narrowing
conversion failures remain explicit. No target triple is selected here.
- pointerSize : ABI.Size
Instances For
Equations
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- cx.targetUsizeMax = do let __do_lift ← Miri.Memory.PointerArithmetic.sizeResult✝ cx.pointerSize.unsignedIntMax Miri.Memory.PointerArithmetic.toUInt64Checked✝ __do_lift
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
- cx.targetIsizeMax = do let __do_lift ← Miri.Memory.PointerArithmetic.sizeResult✝ cx.pointerSize.signedIntMax Miri.Memory.PointerArithmetic.toInt64Checked✝ __do_lift
Instances For
Equations
- cx.targetIsizeMin = do let __do_lift ← Miri.Memory.PointerArithmetic.sizeResult✝ cx.pointerSize.signedIntMin Miri.Memory.PointerArithmetic.toInt64Checked✝ __do_lift
Instances For
Pinned PointerArithmetic::max_size_of_val, independent of the ABI object-size bound (which is smaller for 64-bit LLVM layouts).
Equations
- cx.maxSizeOfVal = do let maximum ← cx.targetIsizeMax pure (Miri.ABI.Size.ofBytes (UInt64.ofNat maximum.toInt.toNat))
Instances For
Equations
- Miri.Memory.Pointer.new provenance offset = { offset := offset, provenance := provenance }
Instances For
Equations
- ptr.intoRawParts = (ptr.provenance, ptr.offset)
Instances For
Equations
- ptr.mapProvenance f = { offset := ptr.offset, provenance := f ptr.provenance }
Instances For
Equations
- ptr.withOptionalProvenance = { offset := ptr.offset, provenance := some ptr.provenance }
Instances For
Equations
- Miri.Memory.Pointer.withoutProvenance addr = { offset := Miri.ABI.Size.ofBytes addr, provenance := none }
Instances For
Instances For
Rust Result<Pointer<Prov>, Size>: an address without provenance goes
through the error branch, not a fabricated allocation.
Equations
- ptr.intoPointerOrAddr = match ptr.provenance with | some prov => Except.ok (Miri.Memory.Pointer.new prov ptr.offset) | none => Except.error ptr.offset
Instances For
Source addr assertion depends on the provenance representation.
Equations
Instances For
Source wraps u64 addition before truncating to the target pointer size.
Equations
- ptr.wrappingOffset offset cx = do let result ← cx.truncateToTargetUsize (ptr.offset.bytes + offset.bytes) pure { offset := Miri.ABI.Size.ofBytes result, provenance := ptr.provenance }
Instances For
Equations
- ptr.wrappingSignedOffset offset cx = ptr.wrappingOffset (Miri.ABI.Size.ofBytes offset.toUInt64) cx