Skip to content

Commit 2833b54

Browse files
authored
Merge pull request #503 from RalfJung/atomic-arith
Reject atomic arithmetic on non-integer types
2 parents 75f667e + 1fe925e commit 2833b54

File tree

2 files changed

+12
-0
lines changed

2 files changed

+12
-0
lines changed

src/intrinsic.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ impl<'a, 'mir, 'tcx> EvalContextExt<'tcx> for super::MiriEvalContext<'a, 'mir, '
126126
"atomic_xsub_acqrel" |
127127
"atomic_xsub_relaxed" => {
128128
let ptr = self.ref_to_mplace(self.read_value(args[0])?)?;
129+
if !ptr.layout.ty.is_integral() {
130+
return err!(Unimplemented(format!("Atomic arithmetic operations only work on integer types")));
131+
}
129132
let rhs = self.read_value(args[1])?;
130133
let old = self.read_value(ptr.into())?;
131134
self.write_value(*old, dest)?; // old value is returned
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#![feature(core_intrinsics)]
2+
3+
pub fn main() {
4+
let mut z: f64 = 1.0;
5+
unsafe {
6+
::std::intrinsics::atomic_xadd(&mut z, 2.0);
7+
//~^ ERROR: Atomic arithmetic operations only work on integer types
8+
}
9+
}

0 commit comments

Comments
 (0)