diff --git a/library/compiler-builtins/builtins-test/Cargo.toml b/library/compiler-builtins/builtins-test/Cargo.toml index b3227b5751164..84912fe16df92 100644 --- a/library/compiler-builtins/builtins-test/Cargo.toml +++ b/library/compiler-builtins/builtins-test/Cargo.toml @@ -39,7 +39,7 @@ walltime = ["dep:criterion"] [lints.clippy] # This sometimes reads better -needless-range-loop = "allow" +needless_range_loop = "allow" [[bench]] name = "float_add" diff --git a/library/compiler-builtins/builtins-test/src/lib.rs b/library/compiler-builtins/builtins-test/src/lib.rs index ebd0162dfae05..5f4bf35942af7 100644 --- a/library/compiler-builtins/builtins-test/src/lib.rs +++ b/library/compiler-builtins/builtins-test/src/lib.rs @@ -24,6 +24,9 @@ use compiler_builtins::support::{Float, Int, MinInt}; use rand_xoshiro::Xoshiro128StarStar; use rand_xoshiro::rand_core::{Rng, SeedableRng}; +// Workaround for Cargo unused dependency lint false positive +use rustc_apfloat as _; + /// Sets the number of fuzz iterations run for most tests. In practice, the vast majority of bugs /// are caught by the edge case testers. Most of the remaining bugs triggered by more complex /// sequences are caught well within 10_000 fuzz iterations. For classes of algorithms like division diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index 70a97c8b87826..dea408a4cfddb 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -3746,6 +3746,108 @@ impl CommandLineStep for Crate { } } +/// Test compiler-builtins via its testcrate. +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CompilerBuiltins { + compiler: Compiler, + target: TargetSelection, +} + +impl CommandLineStep for CompilerBuiltins { + type Output = (); + + fn is_default_step(_builder: &Builder<'_>) -> bool { + true + } + + fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { + run.alias("compiler-builtins") + } + + fn make_run(run: RunConfig<'_>) { + let builder = run.builder; + let host = run.build_triple(); + let compiler = builder.compiler(builder.top_stage, host); + + builder.ensure(CompilerBuiltins { compiler, target: run.target }); + } + + fn run(self, builder: &Builder<'_>) -> Self::Output { + let compiler = self.compiler; + let target = self.target; + let record_failed_tests = builder.ensure(SetupFailedTestsFile); + + builder.ensure(compile::Std::new(compiler, compiler.host)); + builder.ensure(compile::Std::new(compiler, target)); + + const COMPILER_BUILTINS_ALLOW_FEATURES: &[&str] = &[ + // tidy-alphabetical-start + "abi_custom", + "asm_experimental_arch", + "cfg_target_has_atomic", + "compiler_builtins", + "compiler_builtins_lib", + "complex_numbers", + "core_intrinsics", + "decl_macro", + "f16", + "f128", + "lang_items", + "linkage", + "macro_metavar_expr_concat", + "repr_simd", + "rustc_attrs", + "rustc_private", + "wasm_numeric_instr", + // tidy-alphabetical-end + ]; + + let make_cargo = |f: fn(&mut builder::Cargo) -> &mut builder::Cargo| { + let mut cargo = builder::Cargo::new( + builder, + compiler, + Mode::ToolStd, + SourceType::InTree, + target, + Kind::Test, + ); + // We have to run from the root directory to make offline builds work. + // We have to use the combined vendored dependencies + // from the `default_paths_to_vendor` function, rather than only the vendored + // dependencies of the standard library, which do not contain compiler-builtins + // dependencies. + cargo.arg("--manifest-path"); + cargo.arg(builder.src.join("library").join("compiler-builtins").join("Cargo.toml")); + cargo.allow_features(&COMPILER_BUILTINS_ALLOW_FEATURES.join(",")); + f(&mut cargo); + cargo + }; + + // Most tests are in the builtins-test crate. + let crates = ["compiler_builtins".to_string(), "builtins-test".to_string()]; + let cargo = make_cargo(|c| c); + run_cargo_test( + cargo, + &[], + &crates, + "compiler-builtins", + target, + builder, + record_failed_tests.clone(), + ); + let cargo = make_cargo(|c| c.arg("--features=c")); + run_cargo_test( + cargo, + &[], + &crates, + "compiler-builtins --features c", + target, + builder, + record_failed_tests, + ); + } +} + /// Run cargo tests for the rustdoc crate. /// Rustdoc is special in various ways, which is why this step is different from `Crate`. #[derive(Debug, Clone, PartialEq, Eq, Hash)] diff --git a/src/bootstrap/src/core/build_steps/vendor.rs b/src/bootstrap/src/core/build_steps/vendor.rs index 0d8ccc0d5b5c7..a91a729c6ef8c 100644 --- a/src/bootstrap/src/core/build_steps/vendor.rs +++ b/src/bootstrap/src/core/build_steps/vendor.rs @@ -25,6 +25,7 @@ pub fn default_paths_to_vendor(builder: &Builder<'_>) -> Vec<(PathBuf, Vec<&'sta ("compiler/rustc_codegen_gcc/Cargo.toml", vec![]), ("library/Cargo.toml", vec![]), ("library/stdarch/Cargo.toml", vec![]), + ("library/compiler-builtins/Cargo.toml", vec![]), ("src/bootstrap/Cargo.toml", vec![]), ("src/tools/rustbook/Cargo.toml", SUBMODULES_FOR_RUSTBOOK.into()), ("src/tools/rustc-perf/Cargo.toml", vec!["src/tools/rustc-perf"]), diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap index 0967b604412e6..1fe97ca766c81 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test.snap @@ -217,6 +217,9 @@ expression: test [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::RunMake targets: [aarch64-unknown-linux-gnu] - Suite(tests/run-make) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap index cd835904b00d1..f112cdafa81b3 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage.snap @@ -214,6 +214,9 @@ expression: test --skip=coverage [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::RunMake targets: [aarch64-unknown-linux-gnu] - Suite(tests/run-make) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_map.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_map.snap index 0801bdf09328f..401cdc8432d2f 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_map.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_map.snap @@ -217,6 +217,9 @@ expression: test --skip=coverage-map [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::RunMake targets: [aarch64-unknown-linux-gnu] - Suite(tests/run-make) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_run.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_run.snap index d7ec4e55cc710..01d5b362e928f 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_run.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_coverage_run.snap @@ -217,6 +217,9 @@ expression: test --skip=coverage-run [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::RunMake targets: [aarch64-unknown-linux-gnu] - Suite(tests/run-make) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap index bee21f9fd3b91..b936eeefe8805 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests.snap @@ -163,6 +163,9 @@ expression: test --skip=tests [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::IntrinsicTest targets: [x86_64-unknown-linux-gnu] - Set({intrinsic-test}) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_coverage.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_coverage.snap index afa6039d5cba2..c7ea1c663a030 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_coverage.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_coverage.snap @@ -214,6 +214,9 @@ expression: test --skip=tests/coverage [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::RunMake targets: [aarch64-unknown-linux-gnu] - Suite(tests/run-make) diff --git a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap index 20c8ec8b25a9a..98b39e619fad8 100644 --- a/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap +++ b/src/bootstrap/src/core/builder/cli_paths/snapshots/x_test_skip_tests_etc.snap @@ -143,6 +143,9 @@ expression: test --skip=tests --skip=library --skip=tidyselftest [Test] test::TestFloatParse targets: [aarch64-unknown-linux-gnu] - Set({src/tools/test-float-parse}) +[Test] test::CompilerBuiltins + targets: [aarch64-unknown-linux-gnu] + - Set({compiler-builtins}) [Test] test::IntrinsicTest targets: [x86_64-unknown-linux-gnu] - Set({intrinsic-test}) diff --git a/src/bootstrap/src/core/builder/mod.rs b/src/bootstrap/src/core/builder/mod.rs index 1359733089eee..44445fe74d3b0 100644 --- a/src/bootstrap/src/core/builder/mod.rs +++ b/src/bootstrap/src/core/builder/mod.rs @@ -938,6 +938,7 @@ impl<'a> Builder<'a> { test::HtmlCheck, test::RustInstaller, test::TestFloatParse, + test::CompilerBuiltins, test::CollectLicenseMetadata, test::RunMake, test::RunMakeCargo,