From a9aed8a427cd2a5b43c724e30f730c71d22ec448 Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Thu, 23 Jan 2025 04:55:17 +0000 Subject: [PATCH 01/12] Preparing for merge from rustc --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index fa5dbb99e8170..65d5408883338 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -01706e1a34c87656fcbfce198608f4cd2ac6461a +3cd8fcbf87bd28a1f31be000ca906fb66f4d451d From 35c1a86f57ddb584c6a2e11168e5f41bfdd537f5 Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Thu, 23 Jan 2025 05:03:23 +0000 Subject: [PATCH 02/12] fmt --- src/tools/miri/src/bin/miri.rs | 3 ++- src/tools/miri/tests/fail/intrinsics/cttz_nonzero.rs | 1 - src/tools/miri/tests/fail/intrinsics/float_to_int_32_nanneg.rs | 1 - .../miri/tests/fail/intrinsics/float_to_int_64_infneg1.rs | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/tools/miri/src/bin/miri.rs b/src/tools/miri/src/bin/miri.rs index 22c15c8405fdf..9cd8433220481 100644 --- a/src/tools/miri/src/bin/miri.rs +++ b/src/tools/miri/src/bin/miri.rs @@ -33,7 +33,8 @@ use std::sync::atomic::{AtomicI32, Ordering}; use std::sync::{Arc, Once}; use miri::{ - BacktraceStyle, BorrowTrackerMethod, MiriConfig, MiriEntryFnType,ProvenanceMode, RetagFields, ValidationMode, + BacktraceStyle, BorrowTrackerMethod, MiriConfig, MiriEntryFnType, ProvenanceMode, RetagFields, + ValidationMode, }; use rustc_abi::ExternAbi; use rustc_data_structures::sync; diff --git a/src/tools/miri/tests/fail/intrinsics/cttz_nonzero.rs b/src/tools/miri/tests/fail/intrinsics/cttz_nonzero.rs index a1f7a5881d40f..e046a30e73424 100644 --- a/src/tools/miri/tests/fail/intrinsics/cttz_nonzero.rs +++ b/src/tools/miri/tests/fail/intrinsics/cttz_nonzero.rs @@ -1,4 +1,3 @@ - #![feature(intrinsics)] mod rusti { diff --git a/src/tools/miri/tests/fail/intrinsics/float_to_int_32_nanneg.rs b/src/tools/miri/tests/fail/intrinsics/float_to_int_32_nanneg.rs index a1c307efc9390..ee8b45c0aaee0 100644 --- a/src/tools/miri/tests/fail/intrinsics/float_to_int_32_nanneg.rs +++ b/src/tools/miri/tests/fail/intrinsics/float_to_int_32_nanneg.rs @@ -4,7 +4,6 @@ #[rustc_intrinsic] unsafe fn float_to_int_unchecked(_value: Float) -> Int; - fn main() { unsafe { float_to_int_unchecked::(-f32::NAN); //~ ERROR: cannot be represented in target type `u32` diff --git a/src/tools/miri/tests/fail/intrinsics/float_to_int_64_infneg1.rs b/src/tools/miri/tests/fail/intrinsics/float_to_int_64_infneg1.rs index 284b429230d09..93236bf4874b6 100644 --- a/src/tools/miri/tests/fail/intrinsics/float_to_int_64_infneg1.rs +++ b/src/tools/miri/tests/fail/intrinsics/float_to_int_64_infneg1.rs @@ -4,7 +4,6 @@ #[rustc_intrinsic] unsafe fn float_to_int_unchecked(_value: Float) -> Int; - fn main() { unsafe { float_to_int_unchecked::(f64::NEG_INFINITY); //~ ERROR: cannot be represented in target type `u128` From ee7b83a3b3a98888ef1d73381f923050a19c0c79 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Wed, 22 Jan 2025 22:49:26 -0700 Subject: [PATCH 03/12] fix no-std-smoke test --- src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs b/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs index d9f1b27bf553e..aa3faf83f920a 100644 --- a/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs +++ b/src/tools/miri/test-cargo-miri/no-std-smoke/src/main.rs @@ -1,6 +1,7 @@ // Copied from tests/pass/no-std.rs #![no_std] +#![no_main] // Plumbing to let us use `writeln!` to host stdout: From b3f1996cef3243b882558d2456db672f615265ee Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Fri, 24 Jan 2025 04:55:52 +0000 Subject: [PATCH 04/12] Preparing for merge from rustc --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index 65d5408883338..8bbded32c3ed0 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -3cd8fcbf87bd28a1f31be000ca906fb66f4d451d +1c9837df1dde9b234229709e89b3672bd3cf04a4 From d22ba488f066532993592e01417f2612c3dbf3b3 Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Fri, 24 Jan 2025 05:03:56 +0000 Subject: [PATCH 05/12] fmt --- src/tools/miri/src/bin/miri.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/src/bin/miri.rs b/src/tools/miri/src/bin/miri.rs index af7c9956eb9c0..26a9836a3aed8 100644 --- a/src/tools/miri/src/bin/miri.rs +++ b/src/tools/miri/src/bin/miri.rs @@ -29,8 +29,8 @@ use std::num::NonZero; use std::ops::Range; use std::path::PathBuf; use std::str::FromStr; -use std::sync::atomic::{AtomicI32, Ordering}; use std::sync::Once; +use std::sync::atomic::{AtomicI32, Ordering}; use miri::{ BacktraceStyle, BorrowTrackerMethod, MiriConfig, MiriEntryFnType, ProvenanceMode, RetagFields, From 99d29633863bbabe2cf516fac126365d73fca026 Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Sat, 25 Jan 2025 05:04:45 +0000 Subject: [PATCH 06/12] Preparing for merge from rustc --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index 8bbded32c3ed0..b645227e7996a 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -1c9837df1dde9b234229709e89b3672bd3cf04a4 +814ebca2931bd25384ade5018e1cbc403b13ec11 From 7209ae6dd021747401f6228318a10c8e7708efa0 Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Sun, 26 Jan 2025 05:04:59 +0000 Subject: [PATCH 07/12] Preparing for merge from rustc --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index b645227e7996a..0d405f532fcd8 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -814ebca2931bd25384ade5018e1cbc403b13ec11 +2f0ad2a71e4a4528bb80bcb24bf8fa4e50cb87c2 From c688ecf4680b18734690159de7ba1ebf0c7e4026 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 26 Jan 2025 07:11:43 -0700 Subject: [PATCH 08/12] prevent weird macOS linker errors from breaking the build --- src/tools/miri/ci/ci.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tools/miri/ci/ci.sh b/src/tools/miri/ci/ci.sh index 5583030b490ae..fb3fc621565e3 100755 --- a/src/tools/miri/ci/ci.sh +++ b/src/tools/miri/ci/ci.sh @@ -14,7 +14,9 @@ function endgroup { begingroup "Building Miri" # Global configuration -export RUSTFLAGS="-D warnings" +# We are getting some odd linker warnings on macOS, make sure they do not fail the build. +# (See .) +export RUSTFLAGS="-D warnings -A linker-messages" export CARGO_INCREMENTAL=0 export CARGO_EXTRA_FLAGS="--locked" From 4ce50a3977483fd8287d47e19e62f4368e5a9183 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 26 Jan 2025 09:40:16 -0700 Subject: [PATCH 09/12] many-seeds: in keep-going mode, print how many tests failed --- src/tools/miri/src/bin/miri.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/tools/miri/src/bin/miri.rs b/src/tools/miri/src/bin/miri.rs index 26a9836a3aed8..97fcdddf93c7b 100644 --- a/src/tools/miri/src/bin/miri.rs +++ b/src/tools/miri/src/bin/miri.rs @@ -30,7 +30,7 @@ use std::ops::Range; use std::path::PathBuf; use std::str::FromStr; use std::sync::Once; -use std::sync::atomic::{AtomicI32, Ordering}; +use std::sync::atomic::{AtomicI32, AtomicU32, Ordering}; use miri::{ BacktraceStyle, BorrowTrackerMethod, MiriConfig, MiriEntryFnType, ProvenanceMode, RetagFields, @@ -183,7 +183,8 @@ impl rustc_driver::Callbacks for MiriCompilerCalls { if let Some(many_seeds) = self.many_seeds.take() { assert!(config.seed.is_none()); let exit_code = sync::IntoDynSyncSend(AtomicI32::new(rustc_driver::EXIT_SUCCESS)); - sync::par_for_each_in(many_seeds.seeds, |seed| { + let num_failed = sync::IntoDynSyncSend(AtomicU32::new(0)); + sync::par_for_each_in(many_seeds.seeds.clone(), |seed| { let mut config = config.clone(); config.seed = Some(seed.into()); eprintln!("Trying seed: {seed}"); @@ -197,8 +198,13 @@ impl rustc_driver::Callbacks for MiriCompilerCalls { std::process::exit(return_code); } exit_code.store(return_code, Ordering::Relaxed); + num_failed.fetch_add(1, Ordering::Relaxed); } }); + let num_failed = num_failed.0.into_inner(); + if num_failed > 0 { + eprintln!("{num_failed}/{total} SEEDS FAILED", total = many_seeds.seeds.count()); + } std::process::exit(exit_code.0.into_inner()); } else { let return_code = miri::eval_entry(tcx, entry_def_id, entry_type, config) From d7f165690b5e7cc58ad8942bc82812cea84bec4c Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 26 Jan 2025 09:41:57 -0700 Subject: [PATCH 10/12] many-seeds: do not use more than 8 threads --- src/tools/miri/src/bin/miri.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/tools/miri/src/bin/miri.rs b/src/tools/miri/src/bin/miri.rs index 97fcdddf93c7b..988a0be632774 100644 --- a/src/tools/miri/src/bin/miri.rs +++ b/src/tools/miri/src/bin/miri.rs @@ -723,10 +723,9 @@ fn main() { // Ensure we have parallelism for many-seeds mode. if many_seeds.is_some() && !rustc_args.iter().any(|arg| arg.starts_with("-Zthreads=")) { - rustc_args.push(format!( - "-Zthreads={}", - std::thread::available_parallelism().map_or(1, |n| n.get()) - )); + // Clamp to 8 threads; things get a lot less efficient beyond that due to lock contention. + let threads = std::thread::available_parallelism().map_or(1, |n| n.get()).min(8); + rustc_args.push(format!("-Zthreads={threads}")); } let many_seeds = many_seeds.map(|seeds| ManySeedsConfig { seeds, keep_going: many_seeds_keep_going }); From 07de7a4bf932a229f1a9116c80d9a859a6d4a9fc Mon Sep 17 00:00:00 2001 From: Mark Rousskov Date: Sun, 26 Jan 2025 14:28:15 -0500 Subject: [PATCH 11/12] Pre-intern name when searching module children This avoids a good deal of work, since each module child can now just be compared via u32 comparison, rather than fetching the raw &str (requiring locking and indexing into the interner) and then comparing the two strings (also relatively expensive). --- src/tools/miri/src/helpers.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tools/miri/src/helpers.rs b/src/tools/miri/src/helpers.rs index ca8dbdac125d0..c5538351d7dd1 100644 --- a/src/tools/miri/src/helpers.rs +++ b/src/tools/miri/src/helpers.rs @@ -38,9 +38,10 @@ fn try_resolve_did(tcx: TyCtxt<'_>, path: &[&str], namespace: Option) item: DefId, name: &'a str, ) -> impl Iterator + 'a { + let name = Symbol::intern(name); tcx.module_children(item) .iter() - .filter(move |item| item.ident.name.as_str() == name) + .filter(move |item| item.ident.name == name) .map(move |item| item.res.def_id()) } From 37030ac2793e53fc25ab4443f4bd494775bab56e Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 26 Jan 2025 12:32:47 -0700 Subject: [PATCH 12/12] make linux-futex test less flaky --- src/tools/miri/tests/pass-dep/concurrency/linux-futex.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/tools/miri/tests/pass-dep/concurrency/linux-futex.rs b/src/tools/miri/tests/pass-dep/concurrency/linux-futex.rs index 3adeb89ecec72..0ca13b5039dde 100644 --- a/src/tools/miri/tests/pass-dep/concurrency/linux-futex.rs +++ b/src/tools/miri/tests/pass-dep/concurrency/linux-futex.rs @@ -235,7 +235,7 @@ fn concurrent_wait_wake() { static mut DATA: i32 = 0; static WOKEN: AtomicI32 = AtomicI32::new(0); - let rounds = 50; + let rounds = 64; for _ in 0..rounds { unsafe { DATA = 0 }; // Reset // Suppose the main thread is holding a lock implemented using futex... @@ -267,8 +267,7 @@ fn concurrent_wait_wake() { } }); // Increase the chance that the other thread actually goes to sleep. - // (5 yields in a loop seem to make that happen around 40% of the time.) - for _ in 0..5 { + for _ in 0..6 { thread::yield_now(); }