use binary_op over overflowing_binary_op
This commit is contained in:
parent
80c3f424b9
commit
0147b88ce5
@ -553,7 +553,7 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: MiriEvalContextExt<'mir, 'tcx> {
|
|||||||
let this = self.eval_context_mut();
|
let this = self.eval_context_mut();
|
||||||
|
|
||||||
let old = this.allow_data_races_mut(|this| this.read_immediate(&place.into()))?;
|
let old = this.allow_data_races_mut(|this| this.read_immediate(&place.into()))?;
|
||||||
let lt = this.overflowing_binary_op(mir::BinOp::Lt, &old, &rhs)?.0.to_bool()?;
|
let lt = this.binary_op(mir::BinOp::Lt, &old, &rhs)?.to_scalar()?.to_bool()?;
|
||||||
|
|
||||||
let new_val = if min {
|
let new_val = if min {
|
||||||
if lt { &old } else { &rhs }
|
if lt { &old } else { &rhs }
|
||||||
@ -593,11 +593,11 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: MiriEvalContextExt<'mir, 'tcx> {
|
|||||||
// Read as immediate for the sake of `binary_op()`
|
// Read as immediate for the sake of `binary_op()`
|
||||||
let old = this.allow_data_races_mut(|this| this.read_immediate(&(place.into())))?;
|
let old = this.allow_data_races_mut(|this| this.read_immediate(&(place.into())))?;
|
||||||
// `binary_op` will bail if either of them is not a scalar.
|
// `binary_op` will bail if either of them is not a scalar.
|
||||||
let eq = this.overflowing_binary_op(mir::BinOp::Eq, &old, expect_old)?.0;
|
let eq = this.binary_op(mir::BinOp::Eq, &old, expect_old)?;
|
||||||
// If the operation would succeed, but is "weak", fail some portion
|
// If the operation would succeed, but is "weak", fail some portion
|
||||||
// of the time, based on `rate`.
|
// of the time, based on `rate`.
|
||||||
let rate = this.memory.extra.cmpxchg_weak_failure_rate;
|
let rate = this.memory.extra.cmpxchg_weak_failure_rate;
|
||||||
let cmpxchg_success = eq.to_bool()?
|
let cmpxchg_success = eq.to_scalar()?.to_bool()?
|
||||||
&& (!can_fail_spuriously || this.memory.extra.rng.get_mut().gen::<f64>() < rate);
|
&& (!can_fail_spuriously || this.memory.extra.rng.get_mut().gen::<f64>() < rate);
|
||||||
let res = Immediate::ScalarPair(
|
let res = Immediate::ScalarPair(
|
||||||
old.to_scalar_or_uninit(),
|
old.to_scalar_or_uninit(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user