diff options
| author | bors <bors@rust-lang.org> | 2023-07-08 10:46:29 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-07-08 10:46:29 +0000 |
| commit | ce519c5945c90596cf429dc2a91c846daeb75cd1 (patch) | |
| tree | 0973cdb39243f1c1f624b362a5a68d210ab6fdb4 /src | |
| parent | d4096e0412ac5de785d739a0aa2b1c1c7b9d3b7d (diff) | |
| parent | 7a22c7e6f4a18e0dd3427ce2c3c8bf4cda882ad3 (diff) | |
| download | rust-ce519c5945c90596cf429dc2a91c846daeb75cd1.tar.gz rust-ce519c5945c90596cf429dc2a91c846daeb75cd1.zip | |
Auto merge of #113474 - compiler-errors:rollup-07x1up7, r=compiler-errors
Rollup of 8 pull requests Successful merges: - #113413 (Add needs-triage to all new issues) - #113426 (Don't ICE in `resolve_bound_vars` when associated return-type bounds are in bad positions) - #113427 (Remove `variances_of` on RPITIT GATs, remove its one use-case) - #113441 (miri: check that assignments do not self-overlap) - #113453 (Remove unused from_method from rustc_on_unimplemented) - #113456 (Avoid calling report_forbidden_specialization for RPITITs) - #113466 (Update cargo) - #113467 (Fix comment of `fn_can_unwind`) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'src')
| m--------- | src/tools/cargo | 0 | ||||
| -rw-r--r-- | src/tools/miri/tests/fail/overlapping_assignment.rs | 23 | ||||
| -rw-r--r-- | src/tools/miri/tests/fail/overlapping_assignment.stderr | 20 |
3 files changed, 43 insertions, 0 deletions
diff --git a/src/tools/cargo b/src/tools/cargo -Subproject 5b377cece0e0dd0af686cf53ce4637d5d85c2a1 +Subproject 45782b6b8afd1da042d45c2daeec9c0744f72cc diff --git a/src/tools/miri/tests/fail/overlapping_assignment.rs b/src/tools/miri/tests/fail/overlapping_assignment.rs new file mode 100644 index 00000000000..84994c179f9 --- /dev/null +++ b/src/tools/miri/tests/fail/overlapping_assignment.rs @@ -0,0 +1,23 @@ +#![feature(core_intrinsics)] +#![feature(custom_mir)] + +use std::intrinsics::mir::*; + +// It's not that easy to fool the MIR validity check +// which wants to prevent overlapping assignments... +// So we use two separate pointer arguments, and then arrange for them to alias. +#[custom_mir(dialect = "runtime", phase = "optimized")] +pub fn self_copy(ptr1: *mut [i32; 4], ptr2: *mut [i32; 4]) { + mir! { + { + *ptr1 = *ptr2; //~ERROR: overlapping ranges + Return() + } + } +} + +pub fn main() { + let mut x = [0; 4]; + let ptr = std::ptr::addr_of_mut!(x); + self_copy(ptr, ptr); +} diff --git a/src/tools/miri/tests/fail/overlapping_assignment.stderr b/src/tools/miri/tests/fail/overlapping_assignment.stderr new file mode 100644 index 00000000000..42a000dfcc6 --- /dev/null +++ b/src/tools/miri/tests/fail/overlapping_assignment.stderr @@ -0,0 +1,20 @@ +error: Undefined Behavior: `copy_nonoverlapping` called on overlapping ranges + --> $DIR/overlapping_assignment.rs:LL:CC + | +LL | *ptr1 = *ptr2; + | ^^^^^^^^^^^^^ `copy_nonoverlapping` called on overlapping ranges + | + = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior + = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information + = note: BACKTRACE: + = note: inside `self_copy` at $DIR/overlapping_assignment.rs:LL:CC +note: inside `main` + --> $DIR/overlapping_assignment.rs:LL:CC + | +LL | self_copy(ptr, ptr); + | ^^^^^^^^^^^^^^^^^^^ + +note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace + +error: aborting due to previous error + |
