Auto merge of #111506 - RalfJung:miri, r=oli-obk

update Miri

and run mir-opt-level=4 tests in rustc CI so issues like https://github.com/rust-lang/rust/issues/111422 are caught before they land.

r? `@oli-obk` due to the bootstrap changes
This commit is contained in:
bors 2023-05-12 21:49:06 +00:00
commit 7d59fa3d23
6 changed files with 26 additions and 6 deletions

View File

@ -613,6 +613,21 @@ impl Step for Miri {
builder.run(&mut cargo);
}
// Run it again for mir-opt-level 4 to catch some miscompilations.
if builder.config.test_args().is_empty() {
cargo.env("MIRIFLAGS", "-O -Zmir-opt-level=4 -Cdebug-assertions=yes");
// Optimizations can change backtraces
cargo.env("MIRI_SKIP_UI_CHECKS", "1");
// Optimizations can change error locations and remove UB so don't run `fail` tests.
cargo.args(&["tests/pass", "tests/panic"]);
let mut cargo = prepare_cargo_test(cargo, &[], &[], "miri", compiler, target, builder);
{
let _time = util::timeit(&builder);
builder.run(&mut cargo);
}
}
// # Run `cargo miri test`.
// This is just a smoke test (Miri's own CI invokes this in a bunch of different ways and ensures
// that we get the desired output), but that is sufficient to make sure that the libtest harness
@ -644,8 +659,10 @@ impl Step for Miri {
cargo.env("RUST_BACKTRACE", "1");
let mut cargo = Command::from(cargo);
let _time = util::timeit(&builder);
builder.run(&mut cargo);
{
let _time = util::timeit(&builder);
builder.run(&mut cargo);
}
}
}

View File

@ -45,8 +45,7 @@ function run_tests {
# them. Also error locations change so we don't run the failing tests.
# We explicitly enable debug-assertions here, they are disabled by -O but we have tests
# which exist to check that we panic on debug assertion failures.
#FIXME: Disabled due to <https://github.com/rust-lang/rust/issues/111422>.
#MIRIFLAGS="${MIRIFLAGS:-} -O -Zmir-opt-level=4 -Cdebug-assertions=yes" MIRI_SKIP_UI_CHECKS=1 ./miri test -- tests/{pass,panic}
MIRIFLAGS="${MIRIFLAGS:-} -O -Zmir-opt-level=4 -Cdebug-assertions=yes" MIRI_SKIP_UI_CHECKS=1 ./miri test -- tests/{pass,panic}
# Also run some many-seeds tests. 64 seeds means this takes around a minute per test.
for FILE in tests/many-seeds/*.rs; do

View File

@ -1 +1 @@
65dfca8488d635552eb246eb8e15df646e987cff
0b795044c6f0854445f1f2bb6443e87848e150d1

View File

@ -140,6 +140,8 @@ fn run_tests(mode: Mode, path: &str, target: &str, with_dependencies: bool) -> R
"run".into(), // There is no `cargo miri build` so we just use `cargo miri run`.
];
}
eprintln!(" Compiler: {}", config.program.display());
ui_test::run_tests_generic(
config,
// The files we're actually interested in (all `.rs` files).

View File

@ -5,7 +5,8 @@ fn main() {
unsafe {
let mut vec: Vec<i8> = vec![10, 11, 12, 13, 14, 15, 16, 17, 18];
let idxs = Simd::from_array([9, 3, 0, 17]);
Simd::from_array([-27, 82, -41, 124]).scatter_select_unchecked( //~ERROR: pointer to 1 byte starting at offset 9 is out-of-bounds
Simd::from_array([-27, 82, -41, 124]).scatter_select_unchecked(
//~^ERROR: pointer to 1 byte starting at offset 9 is out-of-bounds
&mut vec,
Mask::splat(true),
idxs,

View File

@ -2,6 +2,7 @@ error: Undefined Behavior: dereferencing pointer failed: ALLOC has size 9, so po
--> $DIR/simd-scatter.rs:LL:CC
|
LL | / Simd::from_array([-27, 82, -41, 124]).scatter_select_unchecked(
LL | |
LL | | &mut vec,
LL | | Mask::splat(true),
LL | | idxs,