Auto merge of #123506 - RalfJung:miri-test-libstd, r=Mark-Simulacrum

check-aux: test core, alloc, std in Miri

Let's see if this works, and how long it takes.
This commit is contained in:
bors 2024-04-08 00:08:44 +00:00
commit a2c72ce594
10 changed files with 68 additions and 12 deletions

View File

@ -1,6 +1,8 @@
// Disabling on android for the time being
// See https://github.com/rust-lang/rust/issues/73535#event-3477699747
#![cfg(not(target_os = "android"))]
// Disabling in Miri as these would take too long.
#![cfg(not(miri))]
#![feature(btree_extract_if)]
#![feature(iter_next_chunk)]
#![feature(repr_simd)]

View File

@ -1062,7 +1062,9 @@ impl<T, A: Allocator> Arc<T, A> {
///
/// // Create a long list and clone it
/// let mut x = LinkedList::new();
/// for i in 0..100000 {
/// let size = 100000;
/// # let size = if cfg!(miri) { 100 } else { size };
/// for i in 0..size {
/// x.push(i); // Adds i to the front of x
/// }
/// let y = x.clone();

View File

@ -1,5 +1,7 @@
// wasm32 does not support benches (no time).
#![cfg(not(target_arch = "wasm32"))]
// Disabling in Miri as these would take too long.
#![cfg(not(miri))]
#![feature(flt2dec)]
#![feature(test)]
#![feature(trusted_random_access)]

View File

@ -1,3 +1,5 @@
// Disabling in Miri as these would take too long.
#![cfg(not(miri))]
#![feature(test)]
extern crate test;

View File

@ -8,6 +8,7 @@ use std::str;
mod common;
#[test]
#[cfg_attr(miri, ignore)] // Process spawning not supported by Miri
fn issue_15149() {
// If we're the parent, copy our own binary to a new directory.
let my_path = env::current_exe().unwrap();

View File

@ -51,6 +51,7 @@ fn switch_stdout_to(file: OwnedHandle) -> OwnedHandle {
}
#[test]
#[cfg_attr(miri, ignore)] // dup/SetStdHandle not supported by Miri
fn switch_stdout() {
let temp = common::tmpdir();
let path = temp.join("switch-stdout-output");

View File

@ -5,7 +5,8 @@ use std::time::Duration;
#[test]
#[cfg_attr(target_os = "emscripten", ignore)]
fn sleep() {
#[cfg_attr(miri, ignore)] // Miri does not like the thread leak
fn sleep_very_long() {
let finished = Arc::new(Mutex::new(false));
let t_finished = finished.clone();
thread::spawn(move || {

View File

@ -52,6 +52,36 @@ check-aux:
src/tools/cargo \
src/tools/cargotest \
$(BOOTSTRAP_ARGS)
# Run standard library tests in Miri.
# We use a 64bit little-endian and a 32bit big-endian target for max coverage.
$(Q)BOOTSTRAP_SKIP_TARGET_SANITY=1 \
$(BOOTSTRAP) miri --stage 2 \
--target x86_64-unknown-linux-gnu,mips-unknown-linux-gnu \
library/core \
library/alloc \
--no-doc
# Some doctests have intentional memory leaks.
# Also, they work only on the host.
$(Q)MIRIFLAGS="-Zmiri-ignore-leaks -Zmiri-disable-isolation" \
$(BOOTSTRAP) miri --stage 2 \
library/core \
library/alloc \
--doc
# In `std` we cannot test everything.
$(Q)MIRIFLAGS="-Zmiri-disable-isolation" BOOTSTRAP_SKIP_TARGET_SANITY=1 \
$(BOOTSTRAP) miri --stage 2 library/std \
--no-doc -- \
--skip fs:: --skip net:: --skip process:: --skip sys::pal::
$(Q)MIRIFLAGS="-Zmiri-ignore-leaks -Zmiri-disable-isolation" BOOTSTRAP_SKIP_TARGET_SANITY=1 \
$(BOOTSTRAP) miri --stage 2 library/std \
--doc -- \
--skip fs:: --skip net:: --skip process:: --skip sys::pal::
# Also test some very target-specific modules on other targets.
$(Q)MIRIFLAGS="-Zmiri-disable-isolation" BOOTSTRAP_SKIP_TARGET_SANITY=1 \
$(BOOTSTRAP) miri --stage 2 library/std \
--target aarch64-apple-darwin,i686-pc-windows-gnu \
--no-doc -- \
time:: sync:: thread:: env::
dist:
$(Q)$(BOOTSTRAP) dist $(BOOTSTRAP_ARGS)
distcheck:

View File

@ -2689,16 +2689,27 @@ impl Step for Crate {
match mode {
Mode::Std => {
compile::std_cargo(builder, target, compiler.stage, &mut cargo);
// `std_cargo` actually does the wrong thing: it passes `--sysroot build/host/stage2`,
// but we want to use the force-recompile std we just built in `build/host/stage2-test-sysroot`.
// Override it.
if builder.download_rustc() && compiler.stage > 0 {
let sysroot = builder
.out
.join(compiler.host.triple)
.join(format!("stage{}-test-sysroot", compiler.stage));
cargo.env("RUSTC_SYSROOT", sysroot);
if builder.kind == Kind::Miri {
// We can't use `std_cargo` as that uses `optimized-compiler-builtins` which
// needs host tools for the given target. This is similar to what `compile::Std`
// does when `is_for_mir_opt_tests` is true. There's probably a chance for
// de-duplication here... `std_cargo` should support a mode that avoids needing
// host tools.
cargo
.arg("--manifest-path")
.arg(builder.src.join("library/sysroot/Cargo.toml"));
} else {
compile::std_cargo(builder, target, compiler.stage, &mut cargo);
// `std_cargo` actually does the wrong thing: it passes `--sysroot build/host/stage2`,
// but we want to use the force-recompile std we just built in `build/host/stage2-test-sysroot`.
// Override it.
if builder.download_rustc() && compiler.stage > 0 {
let sysroot = builder
.out
.join(compiler.host.triple)
.join(format!("stage{}-test-sysroot", compiler.stage));
cargo.env("RUSTC_SYSROOT", sysroot);
}
}
}
Mode::Rustc => {

View File

@ -25,5 +25,9 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
# Miri is just too slow with full assertions
ENV NO_DEBUG_ASSERTIONS=1
ENV NO_OVERFLOW_CHECKS=1
ENV RUST_CONFIGURE_ARGS --build=x86_64-unknown-linux-gnu
ENV RUST_CHECK_TARGET check-aux