mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #116234 - RalfJung:miri, r=RalfJung
Miri subtree update r? `@ghost`
This commit is contained in:
commit
1ed00fe491
17
Cargo.lock
17
Cargo.lock
@ -2419,7 +2419,7 @@ dependencies = [
|
|||||||
"rustc_version",
|
"rustc_version",
|
||||||
"serde",
|
"serde",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"ui_test 0.11.7",
|
"ui_test 0.21.2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -5621,18 +5621,23 @@ checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ui_test"
|
name = "ui_test"
|
||||||
version = "0.11.7"
|
version = "0.20.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c21899b59f53717dfad29e4f46e5b21a200a1b6888ab86532a07cfc8b48dd78c"
|
checksum = "bfd8fb9b15c8332cf51bfc2dc4830063b2446a9c9d732421b56f2478024a3971"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"annotate-snippets",
|
||||||
|
"anyhow",
|
||||||
"bstr",
|
"bstr",
|
||||||
"cargo-platform",
|
"cargo-platform",
|
||||||
"cargo_metadata",
|
"cargo_metadata",
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"colored",
|
"colored",
|
||||||
|
"comma",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"diff",
|
"indicatif",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
"levenshtein",
|
||||||
|
"prettydiff",
|
||||||
"regex",
|
"regex",
|
||||||
"rustc_version",
|
"rustc_version",
|
||||||
"rustfix",
|
"rustfix",
|
||||||
@ -5643,9 +5648,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ui_test"
|
name = "ui_test"
|
||||||
version = "0.20.0"
|
version = "0.21.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bfd8fb9b15c8332cf51bfc2dc4830063b2446a9c9d732421b56f2478024a3971"
|
checksum = "aaf4bf7c184b8dfc7a4d3b90df789b1eb992ee42811cd115f32a7a1eb781058d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"annotate-snippets",
|
"annotate-snippets",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
@ -26,6 +26,25 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "annotate-snippets"
|
||||||
|
version = "0.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c3b9d411ecbaf79885c6df4d75fff75858d5995ff25385657a28af47e82f9c36"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-width",
|
||||||
|
"yansi-term",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ansi_term"
|
||||||
|
version = "0.12.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.71"
|
version = "1.0.71"
|
||||||
@ -159,6 +178,25 @@ dependencies = [
|
|||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "comma"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "55b672471b4e9f9e95499ea597ff64941a309b2cdbffcc46f2cc5e2d971fd335"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "console"
|
||||||
|
version = "0.15.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
|
||||||
|
dependencies = [
|
||||||
|
"encode_unicode",
|
||||||
|
"lazy_static",
|
||||||
|
"libc",
|
||||||
|
"unicode-width",
|
||||||
|
"windows-sys 0.45.0",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-channel"
|
name = "crossbeam-channel"
|
||||||
version = "0.5.8"
|
version = "0.5.8"
|
||||||
@ -189,10 +227,10 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "diff"
|
name = "encode_unicode"
|
||||||
version = "0.1.13"
|
version = "0.3.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
|
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "env_logger"
|
name = "env_logger"
|
||||||
@ -282,6 +320,19 @@ version = "0.3.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
|
checksum = "ce23b50ad8242c51a442f3ff322d56b02f08852c77e4c0b4d3fd684abc89c683"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indicatif"
|
||||||
|
version = "0.17.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
|
||||||
|
dependencies = [
|
||||||
|
"console",
|
||||||
|
"instant",
|
||||||
|
"number_prefix",
|
||||||
|
"portable-atomic",
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "instant"
|
name = "instant"
|
||||||
version = "0.1.12"
|
version = "0.1.12"
|
||||||
@ -325,6 +376,12 @@ version = "1.4.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "levenshtein"
|
||||||
|
version = "1.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.148"
|
version = "0.2.148"
|
||||||
@ -463,6 +520,12 @@ dependencies = [
|
|||||||
"static_assertions",
|
"static_assertions",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "number_prefix"
|
||||||
|
version = "0.4.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "object"
|
name = "object"
|
||||||
version = "0.30.3"
|
version = "0.30.3"
|
||||||
@ -484,6 +547,15 @@ version = "3.5.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
|
checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pad"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
|
||||||
|
dependencies = [
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "parking_lot"
|
name = "parking_lot"
|
||||||
version = "0.11.2"
|
version = "0.11.2"
|
||||||
@ -524,12 +596,28 @@ version = "0.2.9"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
|
checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "portable-atomic"
|
||||||
|
version = "1.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ppv-lite86"
|
name = "ppv-lite86"
|
||||||
version = "0.2.17"
|
version = "0.2.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "prettydiff"
|
||||||
|
version = "0.6.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11"
|
||||||
|
dependencies = [
|
||||||
|
"ansi_term",
|
||||||
|
"pad",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.66"
|
version = "1.0.66"
|
||||||
@ -859,18 +947,23 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ui_test"
|
name = "ui_test"
|
||||||
version = "0.11.7"
|
version = "0.21.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c21899b59f53717dfad29e4f46e5b21a200a1b6888ab86532a07cfc8b48dd78c"
|
checksum = "accffe020b57a6dd50014d457b5842c5a2ca73cd84f07d86d0a19c460a6509ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"annotate-snippets",
|
||||||
|
"anyhow",
|
||||||
"bstr",
|
"bstr",
|
||||||
"cargo-platform",
|
"cargo-platform",
|
||||||
"cargo_metadata",
|
"cargo_metadata",
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"colored",
|
"colored",
|
||||||
|
"comma",
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
"diff",
|
"indicatif",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
"levenshtein",
|
||||||
|
"prettydiff",
|
||||||
"regex",
|
"regex",
|
||||||
"rustc_version",
|
"rustc_version",
|
||||||
"rustfix",
|
"rustfix",
|
||||||
@ -885,6 +978,12 @@ version = "1.0.8"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-width"
|
||||||
|
version = "0.1.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "valuable"
|
name = "valuable"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -1059,3 +1158,12 @@ name = "windows_x86_64_msvc"
|
|||||||
version = "0.48.0"
|
version = "0.48.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "yansi-term"
|
||||||
|
version = "0.1.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fe5c30ade05e61656247b2e334a031dfd0cc466fadef865bdcdea8d537951bf1"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
@ -36,7 +36,7 @@ libloading = "0.7"
|
|||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
colored = "2"
|
colored = "2"
|
||||||
ui_test = "0.11.7"
|
ui_test = "0.21.1"
|
||||||
rustc_version = "0.4"
|
rustc_version = "0.4"
|
||||||
# Features chosen to match those required by env_logger, to avoid rebuilds
|
# Features chosen to match those required by env_logger, to avoid rebuilds
|
||||||
regex = { version = "1.5.5", default-features = false, features = ["perf", "std"] }
|
regex = { version = "1.5.5", default-features = false, features = ["perf", "std"] }
|
||||||
|
@ -478,6 +478,8 @@ Moreover, Miri recognizes some environment variables:
|
|||||||
* `MIRI_TEST_TARGET` (recognized by the test suite and the `./miri` script) indicates which target
|
* `MIRI_TEST_TARGET` (recognized by the test suite and the `./miri` script) indicates which target
|
||||||
architecture to test against. `miri` and `cargo miri` accept the `--target` flag for the same
|
architecture to test against. `miri` and `cargo miri` accept the `--target` flag for the same
|
||||||
purpose.
|
purpose.
|
||||||
|
* `MIRI_TEST_THREADS` (recognized by the test suite): set the number of threads to use for running tests.
|
||||||
|
By default the number of cores is used.
|
||||||
* `MIRI_NO_STD` (recognized by `cargo miri` and the test suite) makes sure that the target's
|
* `MIRI_NO_STD` (recognized by `cargo miri` and the test suite) makes sure that the target's
|
||||||
sysroot is built without libstd. This allows testing and running no_std programs.
|
sysroot is built without libstd. This allows testing and running no_std programs.
|
||||||
* `RUSTC_BLESS` (recognized by the test suite and `cargo-miri-test/run-test.py`): overwrite all
|
* `RUSTC_BLESS` (recognized by the test suite and `cargo-miri-test/run-test.py`): overwrite all
|
||||||
|
7
src/tools/miri/bench-cargo-miri/invalidate/Cargo.lock
Normal file
7
src/tools/miri/bench-cargo-miri/invalidate/Cargo.lock
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "invalidate"
|
||||||
|
version = "0.1.0"
|
8
src/tools/miri/bench-cargo-miri/invalidate/Cargo.toml
Normal file
8
src/tools/miri/bench-cargo-miri/invalidate/Cargo.toml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[package]
|
||||||
|
name = "invalidate"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
4
src/tools/miri/bench-cargo-miri/invalidate/src/main.rs
Normal file
4
src/tools/miri/bench-cargo-miri/invalidate/src/main.rs
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
fn main() {
|
||||||
|
// The end of the range is just chosen to make the benchmark run for a few seconds.
|
||||||
|
for _ in 0..200_000 {}
|
||||||
|
}
|
@ -10,7 +10,7 @@ use rustc_version::VersionMeta;
|
|||||||
|
|
||||||
use crate::{setup::*, util::*};
|
use crate::{setup::*, util::*};
|
||||||
|
|
||||||
const CARGO_MIRI_HELP: &str = r#"Runs binary crates and tests in Miri
|
const CARGO_MIRI_HELP: &str = r"Runs binary crates and tests in Miri
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
cargo miri [subcommand] [<cargo options>...] [--] [<program/test suite options>...]
|
cargo miri [subcommand] [<cargo options>...] [--] [<program/test suite options>...]
|
||||||
@ -31,7 +31,7 @@ Examples:
|
|||||||
This will print the path to the generated sysroot (and nothing else) on stdout.
|
This will print the path to the generated sysroot (and nothing else) on stdout.
|
||||||
stderr will still contain progress information about how the build is doing.
|
stderr will still contain progress information about how the build is doing.
|
||||||
|
|
||||||
"#;
|
";
|
||||||
|
|
||||||
fn show_help() {
|
fn show_help() {
|
||||||
println!("{CARGO_MIRI_HELP}");
|
println!("{CARGO_MIRI_HELP}");
|
||||||
|
@ -1 +1 @@
|
|||||||
42ca6e4e5760a548a6fa858482de6d237f6fb3b8
|
2ba4eb2d49e774b5fbc2a06258ac7b0f60b92b7e
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
use smallvec::SmallVec;
|
use smallvec::SmallVec;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_middle::mir::interpret::{alloc_range, AllocId, AllocRange, InterpError};
|
use rustc_middle::mir::interpret::{alloc_range, AllocId, AllocRange, InterpError};
|
||||||
use rustc_span::{Span, SpanData};
|
use rustc_span::{Span, SpanData};
|
||||||
use rustc_target::abi::Size;
|
use rustc_target::abi::Size;
|
||||||
@ -233,6 +234,12 @@ impl AllocHistory {
|
|||||||
protectors: SmallVec::new(),
|
protectors: SmallVec::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn retain(&mut self, live_tags: &FxHashSet<BorTag>) {
|
||||||
|
self.invalidations.retain(|event| live_tags.contains(&event.tag));
|
||||||
|
self.creations.retain(|event| live_tags.contains(&event.retag.new_tag));
|
||||||
|
self.protectors.retain(|event| live_tags.contains(&event.tag));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'history, 'ecx, 'mir, 'tcx> DiagnosticCx<'history, 'ecx, 'mir, 'tcx> {
|
impl<'history, 'ecx, 'mir, 'tcx> DiagnosticCx<'history, 'ecx, 'mir, 'tcx> {
|
||||||
|
@ -456,6 +456,7 @@ impl Stacks {
|
|||||||
stack.retain(live_tags);
|
stack.retain(live_tags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
self.history.retain(live_tags);
|
||||||
self.modified_since_last_gc = false;
|
self.modified_since_last_gc = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
use colored::*;
|
use colored::*;
|
||||||
use regex::bytes::Regex;
|
use regex::bytes::Regex;
|
||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
|
use std::num::NonZeroUsize;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::{env, process::Command};
|
use std::{env, process::Command};
|
||||||
use ui_test::{color_eyre::Result, Config, Match, Mode, OutputConflictHandling};
|
use ui_test::{color_eyre::Result, Config, Match, Mode, OutputConflictHandling};
|
||||||
use ui_test::{status_emitter, CommandBuilder};
|
use ui_test::{status_emitter, CommandBuilder, Format, RustfixMode};
|
||||||
|
|
||||||
fn miri_path() -> PathBuf {
|
fn miri_path() -> PathBuf {
|
||||||
PathBuf::from(option_env!("MIRI").unwrap_or(env!("CARGO_BIN_EXE_miri")))
|
PathBuf::from(option_env!("MIRI").unwrap_or(env!("CARGO_BIN_EXE_miri")))
|
||||||
@ -78,26 +79,18 @@ fn test_config(target: &str, path: &str, mode: Mode, with_dependencies: bool) ->
|
|||||||
program.args.push(flag);
|
program.args.push(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
let bless = env::var_os("RUSTC_BLESS").is_some_and(|v| v != "0");
|
|
||||||
let skip_ui_checks = env::var_os("MIRI_SKIP_UI_CHECKS").is_some();
|
|
||||||
|
|
||||||
let output_conflict_handling = match (bless, skip_ui_checks) {
|
|
||||||
(false, false) => OutputConflictHandling::Error("./miri test --bless".into()),
|
|
||||||
(true, false) => OutputConflictHandling::Bless,
|
|
||||||
(false, true) => OutputConflictHandling::Ignore,
|
|
||||||
(true, true) => panic!("cannot use RUSTC_BLESS and MIRI_SKIP_UI_CHECKS at the same time"),
|
|
||||||
};
|
|
||||||
|
|
||||||
let mut config = Config {
|
let mut config = Config {
|
||||||
target: Some(target.to_owned()),
|
target: Some(target.to_owned()),
|
||||||
stderr_filters: STDERR.clone(),
|
stderr_filters: STDERR.clone(),
|
||||||
stdout_filters: STDOUT.clone(),
|
stdout_filters: STDOUT.clone(),
|
||||||
mode,
|
mode,
|
||||||
program,
|
program,
|
||||||
output_conflict_handling,
|
|
||||||
out_dir: PathBuf::from(std::env::var_os("CARGO_TARGET_DIR").unwrap()).join("ui"),
|
out_dir: PathBuf::from(std::env::var_os("CARGO_TARGET_DIR").unwrap()).join("ui"),
|
||||||
edition: Some("2021".into()),
|
edition: Some("2021".into()),
|
||||||
..Config::rustc(path.into())
|
threads: std::env::var("MIRI_TEST_THREADS")
|
||||||
|
.ok()
|
||||||
|
.map(|threads| NonZeroUsize::new(threads.parse().unwrap()).unwrap()),
|
||||||
|
..Config::rustc(path)
|
||||||
};
|
};
|
||||||
|
|
||||||
let use_std = env::var_os("MIRI_NO_STD").is_none();
|
let use_std = env::var_os("MIRI_NO_STD").is_none();
|
||||||
@ -120,51 +113,32 @@ fn test_config(target: &str, path: &str, mode: Mode, with_dependencies: bool) ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn run_tests(mode: Mode, path: &str, target: &str, with_dependencies: bool) -> Result<()> {
|
fn run_tests(mode: Mode, path: &str, target: &str, with_dependencies: bool) -> Result<()> {
|
||||||
let config = test_config(target, path, mode, with_dependencies);
|
let mut config = test_config(target, path, mode, with_dependencies);
|
||||||
|
|
||||||
// Handle command-line arguments.
|
// Handle command-line arguments.
|
||||||
let mut after_dashdash = false;
|
let args = ui_test::Args::test()?;
|
||||||
let mut quiet = false;
|
let default_bless = env::var_os("RUSTC_BLESS").is_some_and(|v| v != "0");
|
||||||
let filters = std::env::args()
|
config.with_args(&args, default_bless);
|
||||||
.skip(1)
|
if let OutputConflictHandling::Error(msg) = &mut config.output_conflict_handling {
|
||||||
.filter(|arg| {
|
*msg = "./miri test --bless".into();
|
||||||
if after_dashdash {
|
}
|
||||||
// Just propagate everything.
|
if env::var_os("MIRI_SKIP_UI_CHECKS").is_some() {
|
||||||
return true;
|
assert!(!default_bless, "cannot use RUSTC_BLESS and MIRI_SKIP_UI_CHECKS at the same time");
|
||||||
}
|
config.output_conflict_handling = OutputConflictHandling::Ignore;
|
||||||
match &**arg {
|
}
|
||||||
"--quiet" => {
|
|
||||||
quiet = true;
|
|
||||||
false
|
|
||||||
}
|
|
||||||
"--" => {
|
|
||||||
after_dashdash = true;
|
|
||||||
false
|
|
||||||
}
|
|
||||||
s if s.starts_with('-') => {
|
|
||||||
panic!("unknown compiletest flag `{s}`");
|
|
||||||
}
|
|
||||||
_ => true,
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
eprintln!(" Compiler: {}", config.program.display());
|
eprintln!(" Compiler: {}", config.program.display());
|
||||||
ui_test::run_tests_generic(
|
ui_test::run_tests_generic(
|
||||||
config,
|
// Only run one test suite. In the future we can add all test suites to one `Vec` and run
|
||||||
|
// them all at once, making best use of systems with high parallelism.
|
||||||
|
vec![config],
|
||||||
// The files we're actually interested in (all `.rs` files).
|
// The files we're actually interested in (all `.rs` files).
|
||||||
|path| {
|
ui_test::default_file_filter,
|
||||||
path.extension().is_some_and(|ext| ext == "rs")
|
|
||||||
&& (filters.is_empty()
|
|
||||||
|| filters.iter().any(|f| path.display().to_string().contains(f)))
|
|
||||||
},
|
|
||||||
// This could be used to overwrite the `Config` on a per-test basis.
|
// This could be used to overwrite the `Config` on a per-test basis.
|
||||||
|_, _| None,
|
|_, _, _| {},
|
||||||
(
|
(
|
||||||
if quiet {
|
match args.format {
|
||||||
Box::<status_emitter::Quiet>::default()
|
Format::Terse => status_emitter::Text::quiet(),
|
||||||
as Box<dyn status_emitter::StatusEmitter + Send>
|
Format::Pretty => status_emitter::Text::verbose(),
|
||||||
} else {
|
|
||||||
Box::new(status_emitter::Text)
|
|
||||||
},
|
},
|
||||||
status_emitter::Gha::</* GHA Actions groups*/ false> {
|
status_emitter::Gha::</* GHA Actions groups*/ false> {
|
||||||
name: format!("{mode:?} {path} ({target})"),
|
name: format!("{mode:?} {path} ({target})"),
|
||||||
@ -205,8 +179,6 @@ regexes! {
|
|||||||
r" +at (.*\.rs)" => " at $1",
|
r" +at (.*\.rs)" => " at $1",
|
||||||
// erase generics in backtraces
|
// erase generics in backtraces
|
||||||
"([0-9]+: .*)::<.*>" => "$1",
|
"([0-9]+: .*)::<.*>" => "$1",
|
||||||
// erase addresses in backtraces
|
|
||||||
"([0-9]+: ) +0x[0-9a-f]+ - (.*)" => "$1$2",
|
|
||||||
// erase long hexadecimals
|
// erase long hexadecimals
|
||||||
r"0x[0-9a-fA-F]+[0-9a-fA-F]{2,2}" => "$$HEX",
|
r"0x[0-9a-fA-F]+[0-9a-fA-F]{2,2}" => "$$HEX",
|
||||||
// erase specific alignments
|
// erase specific alignments
|
||||||
@ -218,7 +190,7 @@ regexes! {
|
|||||||
// Windows file paths
|
// Windows file paths
|
||||||
r"\\" => "/",
|
r"\\" => "/",
|
||||||
// erase Rust stdlib path
|
// erase Rust stdlib path
|
||||||
"[^ `]*/(rust[^/]*|checkout)/library/" => "RUSTLIB/",
|
"[^ \n`]*/(rust[^/]*|checkout)/library/" => "RUSTLIB/",
|
||||||
// erase platform file paths
|
// erase platform file paths
|
||||||
"sys/[a-z]+/" => "sys/PLATFORM/",
|
"sys/[a-z]+/" => "sys/PLATFORM/",
|
||||||
// erase paths into the crate registry
|
// erase paths into the crate registry
|
||||||
@ -269,11 +241,22 @@ fn main() -> Result<()> {
|
|||||||
ui(Mode::Pass, "tests/pass", &target, WithoutDependencies)?;
|
ui(Mode::Pass, "tests/pass", &target, WithoutDependencies)?;
|
||||||
ui(Mode::Pass, "tests/pass-dep", &target, WithDependencies)?;
|
ui(Mode::Pass, "tests/pass-dep", &target, WithDependencies)?;
|
||||||
ui(Mode::Panic, "tests/panic", &target, WithDependencies)?;
|
ui(Mode::Panic, "tests/panic", &target, WithDependencies)?;
|
||||||
ui(Mode::Fail { require_patterns: true }, "tests/fail", &target, WithDependencies)?;
|
ui(
|
||||||
|
Mode::Fail { require_patterns: true, rustfix: RustfixMode::Disabled },
|
||||||
|
"tests/fail",
|
||||||
|
&target,
|
||||||
|
WithoutDependencies,
|
||||||
|
)?;
|
||||||
|
ui(
|
||||||
|
Mode::Fail { require_patterns: true, rustfix: RustfixMode::Disabled },
|
||||||
|
"tests/fail-dep",
|
||||||
|
&target,
|
||||||
|
WithDependencies,
|
||||||
|
)?;
|
||||||
if cfg!(target_os = "linux") {
|
if cfg!(target_os = "linux") {
|
||||||
ui(Mode::Pass, "tests/extern-so/pass", &target, WithoutDependencies)?;
|
ui(Mode::Pass, "tests/extern-so/pass", &target, WithoutDependencies)?;
|
||||||
ui(
|
ui(
|
||||||
Mode::Fail { require_patterns: true },
|
Mode::Fail { require_patterns: true, rustfix: RustfixMode::Disabled },
|
||||||
"tests/extern-so/fail",
|
"tests/extern-so/fail",
|
||||||
&target,
|
&target,
|
||||||
WithoutDependencies,
|
WithoutDependencies,
|
||||||
@ -285,11 +268,17 @@ fn main() -> Result<()> {
|
|||||||
|
|
||||||
fn run_dep_mode(target: String, mut args: impl Iterator<Item = OsString>) -> Result<()> {
|
fn run_dep_mode(target: String, mut args: impl Iterator<Item = OsString>) -> Result<()> {
|
||||||
let path = args.next().expect("./miri run-dep must be followed by a file name");
|
let path = args.next().expect("./miri run-dep must be followed by a file name");
|
||||||
let mut config = test_config(&target, "", Mode::Yolo, /* with dependencies */ true);
|
let mut config = test_config(
|
||||||
|
&target,
|
||||||
|
"",
|
||||||
|
Mode::Yolo { rustfix: RustfixMode::Disabled },
|
||||||
|
/* with dependencies */ true,
|
||||||
|
);
|
||||||
config.program.args.clear(); // We want to give the user full control over flags
|
config.program.args.clear(); // We want to give the user full control over flags
|
||||||
config.build_dependencies_and_link_them()?;
|
let dep_args = config.build_dependencies()?;
|
||||||
|
|
||||||
let mut cmd = config.program.build(&config.out_dir);
|
let mut cmd = config.program.build(&config.out_dir);
|
||||||
|
cmd.args(dep_args);
|
||||||
|
|
||||||
cmd.arg(path);
|
cmd.arg(path);
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user