From 70e90f99520483699b63104bc4b39065d5577d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Ber=C3=A1nek?= Date: Mon, 25 Aug 2025 16:21:17 +0200 Subject: [PATCH 1/2] Dogfood `-Zno-embed-metadata` in the compiler --- src/bootstrap/src/core/build_steps/check.rs | 20 ++++++------------- src/bootstrap/src/core/build_steps/clippy.rs | 13 +----------- src/bootstrap/src/core/build_steps/compile.rs | 9 +++------ src/bootstrap/src/core/build_steps/test.rs | 2 +- src/bootstrap/src/core/builder/cargo.rs | 2 ++ .../error-codes/E0152-duplicate-lang-items.rs | 2 +- .../E0152-duplicate-lang-items.stderr | 2 +- tests/ui/error-codes/E0152.rs | 2 +- tests/ui/error-codes/E0152.stderr | 2 +- tests/ui/lang-items/duplicate.rs | 2 +- tests/ui/lang-items/duplicate.stderr | 2 +- tests/ui/panic-handler/panic-handler-std.rs | 2 +- .../ui/panic-handler/panic-handler-std.stderr | 2 +- 13 files changed, 21 insertions(+), 41 deletions(-) diff --git a/src/bootstrap/src/core/build_steps/check.rs b/src/bootstrap/src/core/build_steps/check.rs index bebae893ee7fa..11aff61fb0d80 100644 --- a/src/bootstrap/src/core/build_steps/check.rs +++ b/src/bootstrap/src/core/build_steps/check.rs @@ -103,15 +103,7 @@ impl Step for Std { let check_stamp = build_stamp::libstd_stamp(builder, build_compiler, target).with_prefix("check"); - run_cargo( - builder, - cargo, - builder.config.free_args.clone(), - &check_stamp, - vec![], - true, - false, - ); + run_cargo(builder, cargo, builder.config.free_args.clone(), &check_stamp, vec![], false); drop(_guard); @@ -153,7 +145,7 @@ impl Step for Std { build_compiler, target, ); - run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false); + run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], false); check_stamp } @@ -370,7 +362,7 @@ impl Step for Rustc { let stamp = build_stamp::librustc_stamp(builder, build_compiler, target).with_prefix("check"); - run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false); + run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], false); stamp } @@ -568,7 +560,7 @@ impl Step for CraneliftCodegenBackend { ) .with_prefix("check"); - run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false); + run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], false); } fn metadata(&self) -> Option { @@ -637,7 +629,7 @@ impl Step for GccCodegenBackend { ) .with_prefix("check"); - run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false); + run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], false); } fn metadata(&self) -> Option { @@ -761,7 +753,7 @@ fn run_tool_check_step( .with_prefix(&format!("{display_name}-check")); let _guard = builder.msg(builder.kind, display_name, mode, build_compiler, target); - run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], true, false); + run_cargo(builder, cargo, builder.config.free_args.clone(), &stamp, vec![], false); } tool_check_step!(Rustdoc { diff --git a/src/bootstrap/src/core/build_steps/clippy.rs b/src/bootstrap/src/core/build_steps/clippy.rs index 05f8b240291ea..9bee89f49245a 100644 --- a/src/bootstrap/src/core/build_steps/clippy.rs +++ b/src/bootstrap/src/core/build_steps/clippy.rs @@ -215,7 +215,6 @@ impl Step for Std { lint_args(builder, &self.config, IGNORED_RULES_FOR_STD_AND_RUSTC), &build_stamp::libstd_stamp(builder, build_compiler, target), vec![], - true, false, ); } @@ -307,7 +306,6 @@ impl Step for Rustc { lint_args(builder, &self.config, IGNORED_RULES_FOR_STD_AND_RUSTC), &build_stamp::librustc_stamp(builder, build_compiler, target), vec![], - true, false, ); } @@ -372,15 +370,7 @@ impl Step for CodegenGcc { let stamp = BuildStamp::new(&builder.cargo_out(build_compiler, Mode::Codegen, target)) .with_prefix("rustc_codegen_gcc-check"); - run_cargo( - builder, - cargo, - lint_args(builder, &self.config, &[]), - &stamp, - vec![], - true, - false, - ); + run_cargo(builder, cargo, lint_args(builder, &self.config, &[]), &stamp, vec![], false); } fn metadata(&self) -> Option { @@ -459,7 +449,6 @@ macro_rules! lint_any { lint_args(builder, &self.config, &[]), &stamp, vec![], - true, false, ); } diff --git a/src/bootstrap/src/core/build_steps/compile.rs b/src/bootstrap/src/core/build_steps/compile.rs index 6ca32aca345eb..f9fbc111538a4 100644 --- a/src/bootstrap/src/core/build_steps/compile.rs +++ b/src/bootstrap/src/core/build_steps/compile.rs @@ -290,7 +290,6 @@ impl Step for Std { vec![], &build_stamp::libstd_stamp(builder, build_compiler, target), target_deps, - self.is_for_mir_opt_tests, // is_check false, ); @@ -1126,7 +1125,6 @@ impl Step for Rustc { vec![], &stamp, vec![], - false, true, // Only ship rustc_driver.so and .rmeta files, not all intermediate .rlib files. ); @@ -1594,7 +1592,7 @@ impl Step for GccCodegenBackend { let _guard = builder.msg(Kind::Build, "codegen backend gcc", Mode::Codegen, build_compiler, target); - let files = run_cargo(builder, cargo, vec![], &stamp, vec![], false, false); + let files = run_cargo(builder, cargo, vec![], &stamp, vec![], false); GccCodegenBackendOutput { stamp: write_codegen_backend_stamp(stamp, files, builder.config.dry_run()), @@ -1671,7 +1669,7 @@ impl Step for CraneliftCodegenBackend { build_compiler, target, ); - let files = run_cargo(builder, cargo, vec![], &stamp, vec![], false, false); + let files = run_cargo(builder, cargo, vec![], &stamp, vec![], false); write_codegen_backend_stamp(stamp, files, builder.config.dry_run()) } @@ -2392,7 +2390,6 @@ pub fn run_cargo( tail_args: Vec, stamp: &BuildStamp, additional_target_deps: Vec<(PathBuf, DependencyType)>, - is_check: bool, rlib_only_metadata: bool, ) -> Vec { // `target_root_dir` looks like $dir/$target/release @@ -2436,7 +2433,7 @@ pub fn run_cargo( // Always keep native libraries, rust dylibs and debuginfo keep = true; } - if is_check && filename.ends_with(".rmeta") { + if filename.ends_with(".rmeta") { // During check builds we need to keep crate metadata keep = true; } else if rlib_only_metadata { diff --git a/src/bootstrap/src/core/build_steps/test.rs b/src/bootstrap/src/core/build_steps/test.rs index 269e7da8d7b24..52f96e2c115c4 100644 --- a/src/bootstrap/src/core/build_steps/test.rs +++ b/src/bootstrap/src/core/build_steps/test.rs @@ -2358,7 +2358,7 @@ impl BookTest { let stamp = BuildStamp::new(&builder.cargo_out(compiler, mode, target)) .with_prefix(PathBuf::from(dep).file_name().and_then(|v| v.to_str()).unwrap()); - let output_paths = run_cargo(builder, cargo, vec![], &stamp, vec![], false, false); + let output_paths = run_cargo(builder, cargo, vec![], &stamp, vec![], false); let directories = output_paths .into_iter() .filter_map(|p| p.parent().map(ToOwned::to_owned)) diff --git a/src/bootstrap/src/core/builder/cargo.rs b/src/bootstrap/src/core/builder/cargo.rs index 721924034123e..d7ecfd1ae86ba 100644 --- a/src/bootstrap/src/core/builder/cargo.rs +++ b/src/bootstrap/src/core/builder/cargo.rs @@ -1043,6 +1043,8 @@ impl Builder<'_> { // Enable usage of unstable features cargo.env("RUSTC_BOOTSTRAP", "1"); + cargo.arg("-Zno-embed-metadata"); + if self.config.dump_bootstrap_shims { prepare_behaviour_dump_dir(self.build); diff --git a/tests/ui/error-codes/E0152-duplicate-lang-items.rs b/tests/ui/error-codes/E0152-duplicate-lang-items.rs index f707b72f9b2b5..4b243205dc481 100644 --- a/tests/ui/error-codes/E0152-duplicate-lang-items.rs +++ b/tests/ui/error-codes/E0152-duplicate-lang-items.rs @@ -3,7 +3,7 @@ //! //! Issue: -//@ normalize-stderr: "loaded from .*libstd-.*.rlib" -> "loaded from SYSROOT/libstd-*.rlib" +//@ normalize-stderr: "loaded from .*libstd-.*.rmeta" -> "loaded from SYSROOT/libstd-*.rmeta" //@ dont-require-annotations: NOTE #![feature(lang_items)] diff --git a/tests/ui/error-codes/E0152-duplicate-lang-items.stderr b/tests/ui/error-codes/E0152-duplicate-lang-items.stderr index 2fe0d18fc2f47..55d5206b42ce9 100644 --- a/tests/ui/error-codes/E0152-duplicate-lang-items.stderr +++ b/tests/ui/error-codes/E0152-duplicate-lang-items.stderr @@ -9,7 +9,7 @@ LL | | } | |_^ | = note: the lang item is first defined in crate `std` (which `E0152_duplicate_lang_items` depends on) - = note: first definition in `std` loaded from SYSROOT/libstd-*.rlib + = note: first definition in `std` loaded from SYSROOT/libstd-*.rmeta = note: second definition in the local crate (`E0152_duplicate_lang_items`) error: aborting due to 1 previous error diff --git a/tests/ui/error-codes/E0152.rs b/tests/ui/error-codes/E0152.rs index 565e92baf02ea..53c7c027eff39 100644 --- a/tests/ui/error-codes/E0152.rs +++ b/tests/ui/error-codes/E0152.rs @@ -1,4 +1,4 @@ -//@ normalize-stderr: "loaded from .*liballoc-.*.rlib" -> "loaded from SYSROOT/liballoc-*.rlib" +//@ normalize-stderr: "loaded from .*liballoc-.*.rmeta" -> "loaded from SYSROOT/liballoc-*.rmeta" #![feature(lang_items)] #[lang = "owned_box"] diff --git a/tests/ui/error-codes/E0152.stderr b/tests/ui/error-codes/E0152.stderr index dbea7e6d27fbe..73df5803e839a 100644 --- a/tests/ui/error-codes/E0152.stderr +++ b/tests/ui/error-codes/E0152.stderr @@ -5,7 +5,7 @@ LL | struct Foo(T); | ^^^^^^^^^^^^^^^^^ | = note: the lang item is first defined in crate `alloc` (which `std` depends on) - = note: first definition in `alloc` loaded from SYSROOT/liballoc-*.rlib + = note: first definition in `alloc` loaded from SYSROOT/liballoc-*.rmeta = note: second definition in the local crate (`E0152`) error: aborting due to 1 previous error diff --git a/tests/ui/lang-items/duplicate.rs b/tests/ui/lang-items/duplicate.rs index 4594e9456a4ce..bab952fc9ad1c 100644 --- a/tests/ui/lang-items/duplicate.rs +++ b/tests/ui/lang-items/duplicate.rs @@ -1,4 +1,4 @@ -//@ normalize-stderr: "loaded from .*libcore-.*.rlib" -> "loaded from SYSROOT/libcore-*.rlib" +//@ normalize-stderr: "loaded from .*libcore-.*.rmeta" -> "loaded from SYSROOT/libcore-*.rmeta" #![feature(lang_items)] #[lang = "sized"] diff --git a/tests/ui/lang-items/duplicate.stderr b/tests/ui/lang-items/duplicate.stderr index aaa8f5e605afa..5639bcc838d81 100644 --- a/tests/ui/lang-items/duplicate.stderr +++ b/tests/ui/lang-items/duplicate.stderr @@ -5,7 +5,7 @@ LL | trait Sized {} | ^^^^^^^^^^^^^^ | = note: the lang item is first defined in crate `core` (which `std` depends on) - = note: first definition in `core` loaded from SYSROOT/libcore-*.rlib + = note: first definition in `core` loaded from SYSROOT/libcore-*.rmeta = note: second definition in the local crate (`duplicate`) error: aborting due to 1 previous error diff --git a/tests/ui/panic-handler/panic-handler-std.rs b/tests/ui/panic-handler/panic-handler-std.rs index f6a4b60461cee..4d4e20037aaa4 100644 --- a/tests/ui/panic-handler/panic-handler-std.rs +++ b/tests/ui/panic-handler/panic-handler-std.rs @@ -1,4 +1,4 @@ -//@ normalize-stderr: "loaded from .*libstd-.*.rlib" -> "loaded from SYSROOT/libstd-*.rlib" +//@ normalize-stderr: "loaded from .*libstd-.*.rmeta" -> "loaded from SYSROOT/libstd-*.rmeta" extern crate core; diff --git a/tests/ui/panic-handler/panic-handler-std.stderr b/tests/ui/panic-handler/panic-handler-std.stderr index 48c216ce27ec4..3c44267822337 100644 --- a/tests/ui/panic-handler/panic-handler-std.stderr +++ b/tests/ui/panic-handler/panic-handler-std.stderr @@ -7,7 +7,7 @@ LL | | } | |_^ | = note: the lang item is first defined in crate `std` (which `panic_handler_std` depends on) - = note: first definition in `std` loaded from SYSROOT/libstd-*.rlib + = note: first definition in `std` loaded from SYSROOT/libstd-*.rmeta = note: second definition in the local crate (`panic_handler_std`) error: aborting due to 1 previous error From 29afe2fc4a20b0e9782cc6ed591d5b04960775a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Ber=C3=A1nek?= Date: Mon, 25 Aug 2025 18:10:49 +0200 Subject: [PATCH 2/2] Only use the flag for rustc and std --- src/bootstrap/src/core/builder/cargo.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/bootstrap/src/core/builder/cargo.rs b/src/bootstrap/src/core/builder/cargo.rs index d7ecfd1ae86ba..d088114a8cf20 100644 --- a/src/bootstrap/src/core/builder/cargo.rs +++ b/src/bootstrap/src/core/builder/cargo.rs @@ -1043,7 +1043,9 @@ impl Builder<'_> { // Enable usage of unstable features cargo.env("RUSTC_BOOTSTRAP", "1"); - cargo.arg("-Zno-embed-metadata"); + if matches!(mode, Mode::Rustc | Mode::Std) { + cargo.arg("-Zno-embed-metadata"); + } if self.config.dump_bootstrap_shims { prepare_behaviour_dump_dir(self.build);