Skip to content

Rollup of 5 pull requests #134887

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 11 commits into from
Dec 29, 2024
Merged
4 changes: 2 additions & 2 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,9 @@ version = "0.1.0"

[[package]]
name = "cc"
version = "1.2.5"
version = "1.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31a0499c1dc64f458ad13872de75c0eb7e3fdb0e67964610c914b034fc5956e"
checksum = "8d6dbb628b8f8555f86d0323c2eb39e3ec81901f4b83e091db8a6a76d316a333"
dependencies = [
"shlex",
]
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_codegen_ssa/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ arrayvec = { version = "0.7", default-features = false }
bitflags = "2.4.1"
# Pinned so `cargo update` bumps don't cause breakage. Please also update the
# `cc` in `rustc_llvm` if you update the `cc` here.
cc = "=1.2.5"
cc = "=1.2.6"
either = "1.5.0"
itertools = "0.12"
pathdiff = "0.2.0"
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_llvm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ libc = "0.2.73"
# tidy-alphabetical-start
# Pinned so `cargo update` bumps don't cause breakage. Please also update the
# pinned `cc` in `rustc_codegen_ssa` if you update `cc` here.
cc = "=1.2.5"
cc = "=1.2.6"
# tidy-alphabetical-end
2 changes: 1 addition & 1 deletion library/alloc/src/ffi/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
#[doc(inline)]
#[stable(feature = "alloc_c_string", since = "1.64.0")]
pub use self::c_str::CString;
#[doc(no_inline)]
#[doc(inline)]
#[stable(feature = "alloc_c_string", since = "1.64.0")]
pub use self::c_str::{FromVecWithNulError, IntoStringError, NulError};

Expand Down
216 changes: 113 additions & 103 deletions src/bootstrap/src/core/build_steps/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1133,69 +1133,21 @@ fn testdir(builder: &Builder<'_>, host: TargetSelection) -> PathBuf {
builder.out.join(host).join("test")
}

macro_rules! default_test {
($name:ident { path: $path:expr, mode: $mode:expr, suite: $suite:expr }) => {
test!($name { path: $path, mode: $mode, suite: $suite, default: true, host: false });
};
}

macro_rules! default_test_with_compare_mode {
($name:ident { path: $path:expr, mode: $mode:expr, suite: $suite:expr,
compare_mode: $compare_mode:expr }) => {
test_with_compare_mode!($name {
path: $path,
mode: $mode,
suite: $suite,
default: true,
host: false,
compare_mode: $compare_mode
});
};
}

macro_rules! host_test {
($name:ident { path: $path:expr, mode: $mode:expr, suite: $suite:expr }) => {
test!($name { path: $path, mode: $mode, suite: $suite, default: true, host: true });
};
}

/// Declares a test step that invokes compiletest on a particular test suite.
macro_rules! test {
($name:ident { path: $path:expr, mode: $mode:expr, suite: $suite:expr, default: $default:expr,
host: $host:expr }) => {
test_definitions!($name {
path: $path,
mode: $mode,
suite: $suite,
default: $default,
host: $host,
compare_mode: None
});
};
}

macro_rules! test_with_compare_mode {
($name:ident { path: $path:expr, mode: $mode:expr, suite: $suite:expr, default: $default:expr,
host: $host:expr, compare_mode: $compare_mode:expr }) => {
test_definitions!($name {
path: $path,
mode: $mode,
suite: $suite,
default: $default,
host: $host,
compare_mode: Some($compare_mode)
});
};
}

macro_rules! test_definitions {
($name:ident {
path: $path:expr,
mode: $mode:expr,
suite: $suite:expr,
default: $default:expr,
host: $host:expr,
compare_mode: $compare_mode:expr
}) => {
(
$( #[$attr:meta] )* // allow docstrings and attributes
$name:ident {
path: $path:expr,
mode: $mode:expr,
suite: $suite:expr,
default: $default:expr
$( , only_hosts: $only_hosts:expr )? // default: false
$( , compare_mode: $compare_mode:expr )? // default: None
$( , )? // optional trailing comma
}
) => {
$( #[$attr] )*
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct $name {
pub compiler: Compiler,
Expand All @@ -1205,7 +1157,12 @@ macro_rules! test_definitions {
impl Step for $name {
type Output = ();
const DEFAULT: bool = $default;
const ONLY_HOSTS: bool = $host;
const ONLY_HOSTS: bool = (const {
#[allow(unused_assignments, unused_mut)]
let mut value = false;
$( value = $only_hosts; )?
value
});

fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {
run.suite_path($path)
Expand All @@ -1224,21 +1181,31 @@ macro_rules! test_definitions {
mode: $mode,
suite: $suite,
path: $path,
compare_mode: $compare_mode,
compare_mode: (const {
#[allow(unused_assignments, unused_mut)]
let mut value = None;
$( value = $compare_mode; )?
value
}),
})
}
}
};
}

/// Declares an alias for running the [`Coverage`] tests in only one mode.
/// Adapted from [`test_definitions`].
/// Adapted from [`test`].
macro_rules! coverage_test_alias {
($name:ident {
alias_and_mode: $alias_and_mode:expr, // &'static str
default: $default:expr, // bool
only_hosts: $only_hosts:expr $(,)? // bool
}) => {
(
$( #[$attr:meta] )* // allow docstrings and attributes
$name:ident {
alias_and_mode: $alias_and_mode:expr, // &'static str
default: $default:expr, // bool
only_hosts: $only_hosts:expr // bool
$( , )? // optional trailing comma
}
) => {
$( #[$attr] )*
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct $name {
pub compiler: Compiler,
Expand Down Expand Up @@ -1410,37 +1377,74 @@ impl Step for CrateBuildHelper {
}
}

default_test!(Ui { path: "tests/ui", mode: "ui", suite: "ui" });
test!(Ui { path: "tests/ui", mode: "ui", suite: "ui", default: true });

default_test!(Crashes { path: "tests/crashes", mode: "crashes", suite: "crashes" });
test!(Crashes { path: "tests/crashes", mode: "crashes", suite: "crashes", default: true });

default_test!(Codegen { path: "tests/codegen", mode: "codegen", suite: "codegen" });
test!(Codegen { path: "tests/codegen", mode: "codegen", suite: "codegen", default: true });

default_test!(CodegenUnits {
test!(CodegenUnits {
path: "tests/codegen-units",
mode: "codegen-units",
suite: "codegen-units"
suite: "codegen-units",
default: true,
});

default_test!(Incremental { path: "tests/incremental", mode: "incremental", suite: "incremental" });
test!(Incremental {
path: "tests/incremental",
mode: "incremental",
suite: "incremental",
default: true,
});

default_test_with_compare_mode!(Debuginfo {
test!(Debuginfo {
path: "tests/debuginfo",
mode: "debuginfo",
suite: "debuginfo",
compare_mode: "split-dwarf"
default: true,
compare_mode: Some("split-dwarf"),
});

host_test!(UiFullDeps { path: "tests/ui-fulldeps", mode: "ui", suite: "ui-fulldeps" });
test!(UiFullDeps {
path: "tests/ui-fulldeps",
mode: "ui",
suite: "ui-fulldeps",
default: true,
only_hosts: true,
});

host_test!(Rustdoc { path: "tests/rustdoc", mode: "rustdoc", suite: "rustdoc" });
host_test!(RustdocUi { path: "tests/rustdoc-ui", mode: "ui", suite: "rustdoc-ui" });
test!(Rustdoc {
path: "tests/rustdoc",
mode: "rustdoc",
suite: "rustdoc",
default: true,
only_hosts: true,
});
test!(RustdocUi {
path: "tests/rustdoc-ui",
mode: "ui",
suite: "rustdoc-ui",
default: true,
only_hosts: true,
});

host_test!(RustdocJson { path: "tests/rustdoc-json", mode: "rustdoc-json", suite: "rustdoc-json" });
test!(RustdocJson {
path: "tests/rustdoc-json",
mode: "rustdoc-json",
suite: "rustdoc-json",
default: true,
only_hosts: true,
});

host_test!(Pretty { path: "tests/pretty", mode: "pretty", suite: "pretty" });
test!(Pretty {
path: "tests/pretty",
mode: "pretty",
suite: "pretty",
default: true,
only_hosts: true,
});

/// Special-handling is needed for `run-make`, so don't use `default_test` for defining `RunMake`
/// Special-handling is needed for `run-make`, so don't use `test!` for defining `RunMake`
/// tests.
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub struct RunMake {
Expand Down Expand Up @@ -1475,7 +1479,7 @@ impl Step for RunMake {
}
}

default_test!(Assembly { path: "tests/assembly", mode: "assembly", suite: "assembly" });
test!(Assembly { path: "tests/assembly", mode: "assembly", suite: "assembly", default: true });

/// Coverage tests are a bit more complicated than other test suites, because
/// we want to run the same set of test files in multiple different modes,
Expand Down Expand Up @@ -1552,27 +1556,33 @@ impl Step for Coverage {
}
}

// Runs `tests/coverage` in "coverage-map" mode only.
// Used by `x test` and `x test coverage-map`.
coverage_test_alias!(CoverageMap {
alias_and_mode: "coverage-map",
default: true,
only_hosts: false,
});
// Runs `tests/coverage` in "coverage-run" mode only.
// Used by `x test` and `x test coverage-run`.
coverage_test_alias!(CoverageRun {
alias_and_mode: "coverage-run",
default: true,
// Compiletest knows how to automatically skip these tests when cross-compiling,
// but skipping the whole step here makes it clearer that they haven't run at all.
only_hosts: true,
});
coverage_test_alias! {
/// Runs the `tests/coverage` test suite in "coverage-map" mode only.
/// Used by `x test` and `x test coverage-map`.
CoverageMap {
alias_and_mode: "coverage-map",
default: true,
only_hosts: false,
}
}
coverage_test_alias! {
/// Runs the `tests/coverage` test suite in "coverage-run" mode only.
/// Used by `x test` and `x test coverage-run`.
CoverageRun {
alias_and_mode: "coverage-run",
default: true,
// Compiletest knows how to automatically skip these tests when cross-compiling,
// but skipping the whole step here makes it clearer that they haven't run at all.
only_hosts: true,
}
}

host_test!(CoverageRunRustdoc {
test!(CoverageRunRustdoc {
path: "tests/coverage-run-rustdoc",
mode: "coverage-run",
suite: "coverage-run-rustdoc"
suite: "coverage-run-rustdoc",
default: true,
only_hosts: true,
});

// For the mir-opt suite we do not use macros, as we need custom behavior when blessing.
Expand Down
2 changes: 2 additions & 0 deletions src/bootstrap/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ pub(crate) mod metrics;
pub(crate) mod render_tests;
pub(crate) mod shared_helpers;
pub(crate) mod tarball;
#[cfg(test)]
mod tests;
5 changes: 3 additions & 2 deletions src/bootstrap/src/utils/shared_helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,9 @@ use std::io::Write;
use std::process::Command;
use std::str::FromStr;

#[cfg(test)]
mod tests;
// If we were to declare a tests submodule here, the shim binaries that include this
// module via `#[path]` would fail to find it, which breaks `./x check bootstrap`.
// So instead the unit tests for this module are in `super::tests::shared_helpers_tests`.

/// Returns the environment variable which the dynamic library lookup path
/// resides in for this platform.
Expand Down
1 change: 1 addition & 0 deletions src/bootstrap/src/utils/tests/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
mod shared_helpers_tests;
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
use super::parse_value_from_args;
//! The `shared_helpers` module can't have its own tests submodule, because
//! that would cause problems for the shim binaries that include it via
//! `#[path]`, so instead those unit tests live here.
//!
//! To prevent tidy from complaining about this file not being named `tests.rs`,
//! it lives inside a submodule directory named `tests`.

use crate::utils::shared_helpers::parse_value_from_args;

#[test]
fn test_parse_value_from_args() {
Expand Down
Loading
Loading