Skip to content

Commit d0c223e

Browse files
fix ci
1 parent 350e02b commit d0c223e

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

src/data_race.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -546,27 +546,26 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: MiriEvalContextExt<'mir, 'tcx> {
546546
/// scalar value, the old value is returned.
547547
fn atomic_min_max_scalar(
548548
&mut self,
549-
place: MPlaceTy<'tcx, Tag>,
549+
place: &MPlaceTy<'tcx, Tag>,
550550
rhs: ImmTy<'tcx, Tag>,
551551
min: bool,
552552
atomic: AtomicRwOp,
553553
) -> InterpResult<'tcx, ImmTy<'tcx, Tag>> {
554554
let this = self.eval_context_mut();
555555

556-
let old = this.allow_data_races_mut(|this| this.read_immediate(place.into()))?;
556+
let old = this.allow_data_races_mut(|this| this.read_immediate(&place.into()))?;
557+
let lt = this.overflowing_binary_op(mir::BinOp::Lt, &old, &rhs)?.0.to_bool()?;
557558

558-
// `binary_op` will bail if either of them is not a scalar.
559-
let cond = if min {
560-
this.overflowing_binary_op(mir::BinOp::Lt, &old, &rhs)?.0
559+
let new_val = if min {
560+
if lt { &old } else { &rhs }
561561
} else {
562-
this.overflowing_binary_op(mir::BinOp::Gt, &old, &rhs)?.0
562+
if lt { &rhs } else { &old }
563563
};
564564

565-
if cond.to_bool()? {
566-
this.allow_data_races_mut(|this| this.write_immediate(*rhs, place.into()))?;
567-
}
565+
this.allow_data_races_mut(|this| this.write_immediate_to_mplace(**new_val, place))?;
568566

569567
this.validate_atomic_rmw(&place, atomic)?;
568+
570569
// Return the old value.
571570
Ok(old)
572571
}

src/shims/intrinsics.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use rustc_target::abi::{Align, Integer, LayoutOf};
1010
use crate::*;
1111
use helpers::check_arg_count;
1212

13-
enum AtomicOp {
13+
pub enum AtomicOp {
1414
MirOp(mir::BinOp, bool),
1515
Max,
1616
Min,
@@ -605,15 +605,15 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
605605
"atomic_umin_relaxed" =>
606606
this.atomic_op_min_max(args, dest, AtomicOp::Min, AtomicRwOp::Relaxed)?,
607607
"atomic_umax" =>
608-
this.atomic_op_min_max(args, dest, AtomicOp::Min, AtomicRwOp::SeqCst)?,
608+
this.atomic_op_min_max(args, dest, AtomicOp::Max, AtomicRwOp::SeqCst)?,
609609
"atomic_umax_acq" =>
610-
this.atomic_op_min_max(args, dest, AtomicOp::Min, AtomicRwOp::Acquire)?,
610+
this.atomic_op_min_max(args, dest, AtomicOp::Max, AtomicRwOp::Acquire)?,
611611
"atomic_umax_rel" =>
612-
this.atomic_op_min_max(args, dest, AtomicOp::Min, AtomicRwOp::Release)?,
612+
this.atomic_op_min_max(args, dest, AtomicOp::Max, AtomicRwOp::Release)?,
613613
"atomic_umax_acqrel" =>
614-
this.atomic_op_min_max(args, dest, AtomicOp::Min, AtomicRwOp::AcqRel)?,
614+
this.atomic_op_min_max(args, dest, AtomicOp::Max, AtomicRwOp::AcqRel)?,
615615
"atomic_umax_relaxed" =>
616-
this.atomic_op_min_max(args, dest, AtomicOp::Min, AtomicRwOp::Relaxed)?,
616+
this.atomic_op_min_max(args, dest, AtomicOp::Max, AtomicRwOp::Relaxed)?,
617617

618618
// Query type information
619619
"assert_zero_valid" | "assert_uninit_valid" => {
@@ -754,12 +754,12 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
754754

755755
match atomic_op {
756756
AtomicOp::Min => {
757-
let old = this.atomic_min_max_scalar(place, rhs, true, atomic)?;
757+
let old = this.atomic_min_max_scalar(&place, rhs, true, atomic)?;
758758
this.write_immediate(*old, &dest)?; // old value is returned
759759
Ok(())
760760
}
761761
AtomicOp::Max => {
762-
let old = this.atomic_min_max_scalar(place, rhs, false, atomic)?;
762+
let old = this.atomic_min_max_scalar(&place, rhs, false, atomic)?;
763763
this.write_immediate(*old, &dest)?; // old value is returned
764764
Ok(())
765765
}

0 commit comments

Comments
 (0)