rust_stable: stable
rust_nightly: nightly-2025-10-12
# Pin a specific miri version
- rust_miri_nightly: nightly-2025-11-09
+ rust_miri_nightly: nightly-2025-11-13
rust_clippy: '1.88'
# When updating this, also update:
# - README.md
cargo miri nextest run --features full --lib --no-fail-fast
working-directory: tokio
env:
- MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance -Zmiri-retag-fields
+ MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance
miri-test:
name: miri-test
cargo miri nextest run --features full --test '*' --no-fail-fast
working-directory: tokio
env:
- MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance -Zmiri-retag-fields
+ MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance
miri-doc:
name: miri-doc
cargo miri test --doc --features $TOKIO_STABLE_FEATURES --no-fail-fast
working-directory: tokio
env:
- MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance -Zmiri-retag-fields
+ MIRIFLAGS: -Zmiri-disable-isolation -Zmiri-strict-provenance
asan:
name: asan
You can run miri tests with
```
-MIRIFLAGS="-Zmiri-disable-isolation -Zmiri-strict-provenance -Zmiri-retag-fields" \
+MIRIFLAGS="-Zmiri-disable-isolation -Zmiri-strict-provenance" \
cargo +nightly miri test --features full --lib --tests
```
}
#[test]
- #[cfg_attr(miri, ignore)]
+ #[cfg_attr(miri, ignore)] // takes a really long time with miri
fn test_splitter() {
let data = str::repeat("█", DEFAULT_MAX_BUF_SIZE);
let mut wr = super::SplitByUtf8BoundaryIfWindows::new(TextMockWriter);
}
#[test]
- #[cfg_attr(miri, ignore)]
+ #[cfg_attr(miri, ignore)] // takes a really long time with miri
fn test_pseudo_text() {
// In this test we write a piece of binary data, whose beginning is
// text though. We then validate that even in this corner case buffer
// internal use. Note however that some are not _currently_ named by
// consuming code.
+ // Not using parking_lot in Miri due to <https://github.com/Amanieu/parking_lot/issues/477>.
#[cfg(all(feature = "parking_lot", not(miri)))]
#[allow(unused_imports)]
pub(crate) use crate::loom::std::parking_lot::{
drop(signal_guard);
}
- #[cfg_attr(miri, ignore)] // Miri does not support epoll.
+ #[cfg_attr(miri, ignore)] // No `sigaction` on Miri
#[test]
fn does_not_register_signal_if_queue_empty() {
let (io_driver, io_handle) = IoDriver::new(1024).unwrap();
/// use std::time::Duration;
///
/// fn main() {
- /// # if cfg!(miri) { return } // Miri reports error when main thread terminated without waiting all remaining threads.
/// let runtime = Runtime::new().unwrap();
///
/// runtime.block_on(async move {
mod inject;
mod queue;
- #[cfg(not(miri))]
+ #[cfg(not(miri))] // takes a really long time with miri
mod task_combinations;
#[cfg(miri)]
}
#[tokio::test]
-// Block on https://github.com/rust-lang/miri/issues/4374
-#[cfg_attr(miri, ignore)]
async fn poll_fns() {
let (a, b) = socketpair();
let afd_a = Arc::new(AsyncFd::new(a).unwrap());
// This tests test the behavior of `process::Command::spawn` when it is used
// outside runtime, and when `process::Child::wait ` is used in a different
// runtime from which `process::Command::spawn` is used.
-#![cfg(all(unix, not(target_os = "freebsd"), not(miri)))]
+#![cfg(all(unix, not(target_os = "freebsd"), not(miri)))] // Miri cannot run system commands
use std::process::Stdio;
use tokio::{process::Command, runtime::Runtime};
#![warn(rust_2018_idioms)]
-#![cfg(all(feature = "full", not(target_os = "wasi"), not(miri)))] // Wasi cannot run system commands
+#![cfg(all(feature = "full", not(target_os = "wasi"), not(miri)))] // Wasi/Miri cannot run system commands
use tokio::process::Command;
#![warn(rust_2018_idioms)]
-#![cfg(all(feature = "full", not(target_os = "wasi"), not(miri)))] // Wasi cannot run system commands
+#![cfg(all(feature = "full", not(target_os = "wasi"), not(miri)))] // Wasi/Miri cannot run system commands
use tokio::process::Command;
use tokio_test::assert_ok;
#![warn(rust_2018_idioms)]
#![cfg(feature = "full")]
-#![cfg(not(miri))] // Possible bug on Miri.
use tokio::runtime::Runtime;
use tokio::sync::oneshot;