-
Notifications
You must be signed in to change notification settings - Fork 414
Description
The following test should always pass with -Zmiri-fixed-schedule:
use std::thread;
fn main() {
thread::scope(|s| {
s.spawn(|| {
thread::yield_now();
std::process::abort();
});
s.spawn(|| {
std::process::exit(0);
});
});
}We will always run the first thread, yield, go to the second thread, and exit, therefore never reaching the abort (which would fail the test). On x86_64-unknown-linux-gnu, i686-unknown-linux-gnu, and armv7-unknown-linux-gnueabihf, this indeed behaves as expected.
However, on mips-unknown-linux-gnu, the test sometimes (for around 33% of the seeds) does hit the abort and fail. I have no idea how that is possible. This behavior also only very recently started with a rustup covering this upstream diff: rust-lang/rust@1eb0657...3ff30e7. That includes rust-lang/rust#148765 which is described as merely moving code around but maybe something changed somewhere...? It also includes rust-lang/rust#144465 which is more likely to be the culprit as that mips target does not have 64bit atomics. Cc @joboet @orlp