Trait miri::concurrency::weak_memory::EvalContextExt
source · [−]pub(super) trait EvalContextExt<'mir, 'tcx: 'mir>: MiriEvalContextExt<'mir, 'tcx> {
fn validate_overlapping_atomic(
&self,
place: &MPlaceTy<'tcx, Tag>
) -> InterpResult<'tcx> { ... }
fn buffered_atomic_rmw(
&mut self,
new_val: ScalarMaybeUninit<Tag>,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicRwOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx> { ... }
fn buffered_atomic_read(
&self,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicReadOrd,
latest_in_mo: ScalarMaybeUninit<Tag>,
validate: impl FnOnce() -> InterpResult<'tcx>
) -> InterpResult<'tcx, ScalarMaybeUninit<Tag>> { ... }
fn buffered_atomic_write(
&mut self,
val: ScalarMaybeUninit<Tag>,
dest: &MPlaceTy<'tcx, Tag>,
atomic: AtomicWriteOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx> { ... }
fn perform_read_on_buffered_latest(
&self,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicReadOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx> { ... }
}Provided Methods
fn validate_overlapping_atomic(
&self,
place: &MPlaceTy<'tcx, Tag>
) -> InterpResult<'tcx>
fn buffered_atomic_rmw(
&mut self,
new_val: ScalarMaybeUninit<Tag>,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicRwOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx>
fn buffered_atomic_read(
&self,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicReadOrd,
latest_in_mo: ScalarMaybeUninit<Tag>,
validate: impl FnOnce() -> InterpResult<'tcx>
) -> InterpResult<'tcx, ScalarMaybeUninit<Tag>>
fn buffered_atomic_write(
&mut self,
val: ScalarMaybeUninit<Tag>,
dest: &MPlaceTy<'tcx, Tag>,
atomic: AtomicWriteOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx>
fn perform_read_on_buffered_latest(
&self,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicReadOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx>
fn perform_read_on_buffered_latest(
&self,
place: &MPlaceTy<'tcx, Tag>,
atomic: AtomicReadOrd,
init: ScalarMaybeUninit<Tag>
) -> InterpResult<'tcx>
Caller should never need to consult the store buffer for the latest value. This function is used exclusively for failed atomic_compare_exchange_scalar to perform load_impl on the latest store element