Skip to content

Commit

Permalink
Merge pull request #4190 from rust-lang/rustup-2025-02-13
Browse files Browse the repository at this point in the history
Automatic Rustup
  • Loading branch information
RalfJung authored Feb 13, 2025
2 parents eb531bf + 133078c commit 87ffe65
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 4 deletions.
2 changes: 1 addition & 1 deletion rust-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
6171d944aea415a3023d4262e0895aa3b18c771f
6dce9f8c2d8dde4c9ea20bab981cd70229c37fdc
2 changes: 1 addition & 1 deletion src/intrinsics/atomic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ trait EvalContextPrivExt<'tcx>: MiriInterpCxExt<'tcx> {
let place = this.deref_pointer(place)?;
let rhs = this.read_immediate(rhs)?;

if !place.layout.ty.is_integral() && !place.layout.ty.is_unsafe_ptr() {
if !place.layout.ty.is_integral() && !place.layout.ty.is_raw_ptr() {
span_bug!(
this.cur_span(),
"atomic arithmetic operations only work on integer and raw pointer types",
Expand Down
4 changes: 2 additions & 2 deletions src/operator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> {
// Some more operations are possible with atomics.
// The return value always has the provenance of the *left* operand.
Add | Sub | BitOr | BitAnd | BitXor => {
assert!(left.layout.ty.is_unsafe_ptr());
assert!(right.layout.ty.is_unsafe_ptr());
assert!(left.layout.ty.is_raw_ptr());
assert!(right.layout.ty.is_raw_ptr());
let ptr = left.to_scalar().to_pointer(this)?;
// We do the actual operation with usize-typed scalars.
let left = ImmTy::from_uint(ptr.addr().bytes(), this.machine.layouts.usize);
Expand Down
15 changes: 15 additions & 0 deletions tests/fail/ptr_swap_nonoverlapping.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
//! This is a regression test for <https://github.com/rust-lang/miri/issues/4188>: The precondition
//! check in `ptr::swap_nonoverlapping` was incorrectly disabled in Miri.
//@normalize-stderr-test: "unsafe \{ libc::abort\(\) \}|crate::intrinsics::abort\(\);" -> "ABORT();"
//@normalize-stderr-test: "\| +\^+" -> "| ^"
//@normalize-stderr-test: "\n +[0-9]+:[^\n]+" -> ""
//@normalize-stderr-test: "\n +at [^\n]+" -> ""
//@error-in-other-file: aborted execution

fn main() {
let mut data = 0usize;
let ptr = std::ptr::addr_of_mut!(data);
unsafe {
std::ptr::swap_nonoverlapping(ptr, ptr, 1);
}
}
31 changes: 31 additions & 0 deletions tests/fail/ptr_swap_nonoverlapping.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

thread 'main' panicked at RUSTLIB/core/src/panicking.rs:LL:CC:
unsafe precondition(s) violated: ptr::swap_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
note: in Miri, you may have to set `MIRIFLAGS=-Zmiri-env-forward=RUST_BACKTRACE` for the environment variable to have an effect
thread caused non-unwinding panic. aborting.
error: abnormal termination: the program aborted execution
--> RUSTLIB/std/src/sys/pal/PLATFORM/mod.rs:LL:CC
|
LL | ABORT();
| ^ the program aborted execution
|
= note: BACKTRACE:
= note: inside `std::sys::pal::PLATFORM::abort_internal` at RUSTLIB/std/src/sys/pal/PLATFORM/mod.rs:LL:CC
= note: inside `std::panicking::rust_panic_with_hook` at RUSTLIB/std/src/panicking.rs:LL:CC
= note: inside closure at RUSTLIB/std/src/panicking.rs:LL:CC
= note: inside `std::sys::backtrace::__rust_end_short_backtrace::<{closure@std::panicking::begin_panic_handler::{closure#0}}, !>` at RUSTLIB/std/src/sys/backtrace.rs:LL:CC
= note: inside `std::panicking::begin_panic_handler` at RUSTLIB/std/src/panicking.rs:LL:CC
= note: inside `core::panicking::panic_nounwind` at RUSTLIB/core/src/panicking.rs:LL:CC
= note: inside `std::ptr::swap_nonoverlapping::precondition_check` at RUSTLIB/core/src/ub_checks.rs:LL:CC
= note: inside `std::ptr::swap_nonoverlapping::<usize>` at RUSTLIB/core/src/ub_checks.rs:LL:CC
note: inside `main`
--> tests/fail/ptr_swap_nonoverlapping.rs:LL:CC
|
LL | std::ptr::swap_nonoverlapping(ptr, ptr, 1);
| ^

note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace

error: aborting due to 1 previous error

0 comments on commit 87ffe65

Please sign in to comment.