From 277e65bf4c54195812dec6785ac4c562acc109ee Mon Sep 17 00:00:00 2001 From: Weihang Lo Date: Sun, 21 May 2023 22:25:33 +0100 Subject: [PATCH] fix: pass `-C debuginfo` after weakening if explicitly set The weakening of debuginfo for build script shouldn't turn debuginfo to `DebugInfo::None`. That will result in not passing `-C debuginfo=0` to rustc, leading to build artifact cache miss. --- src/cargo/core/profiles.rs | 6 +++++- tests/testsuite/build.rs | 2 +- tests/testsuite/profile_targets.rs | 22 ++++++++-------------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/src/cargo/core/profiles.rs b/src/cargo/core/profiles.rs index afaf3fb4fe4..3831f18c2ea 100644 --- a/src/cargo/core/profiles.rs +++ b/src/cargo/core/profiles.rs @@ -780,8 +780,12 @@ impl DebugInfo { } /// Reset to the lowest level: no debuginfo. + /// If it is explicitly set, keep it explicit. pub(crate) fn weaken(self) -> Self { - DebugInfo::None + match self { + DebugInfo::None => DebugInfo::None, + _ => DebugInfo::Explicit(TomlDebugInfo::None), + } } } diff --git a/tests/testsuite/build.rs b/tests/testsuite/build.rs index 8a1b6ca86c1..7b555a71b20 100644 --- a/tests/testsuite/build.rs +++ b/tests/testsuite/build.rs @@ -3885,7 +3885,7 @@ fn compiler_json_error_format() { }, "profile": { "debug_assertions": true, - "debuginfo": null, + "debuginfo": 0, "opt_level": "0", "overflow_checks": true, "test": false diff --git a/tests/testsuite/profile_targets.rs b/tests/testsuite/profile_targets.rs index b3235972c7c..0449e8ab37d 100644 --- a/tests/testsuite/profile_targets.rs +++ b/tests/testsuite/profile_targets.rs @@ -83,16 +83,16 @@ fn profile_selection_build() { // - bdep `panic` is not set because it thinks `build.rs` is a plugin. // - build_script_build is built without panic because it thinks `build.rs` is a plugin. // - We make sure that the build dependencies bar, bdep, and build.rs - // are built without debuginfo. + // are built with debuginfo=0. p.cargo("build -vv") .with_stderr_unordered("\ [COMPILING] bar [..] [RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link -C panic=abort[..]-C codegen-units=1 -C debuginfo=2 [..] -[RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 [..] +[RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 -C debuginfo=0[..] [COMPILING] bdep [..] -[RUNNING] `[..] rustc --crate-name bdep bdep/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 [..] +[RUNNING] `[..] rustc --crate-name bdep bdep/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 -C debuginfo=0[..] [COMPILING] foo [..] -[RUNNING] `[..] rustc --crate-name build_script_build build.rs [..]--crate-type bin --emit=[..]link[..]-C codegen-units=5 [..] +[RUNNING] `[..] rustc --crate-name build_script_build build.rs [..]--crate-type bin --emit=[..]link[..]-C codegen-units=5 -C debuginfo=0[..] [RUNNING] `[..]/target/debug/build/foo-[..]/build-script-build` [foo 0.0.1] foo custom build PROFILE=debug DEBUG=true OPT_LEVEL=0 [RUNNING] `[..] rustc --crate-name foo src/lib.rs [..]--crate-type lib --emit=[..]link -C panic=abort[..]-C codegen-units=1 -C debuginfo=2 [..] @@ -100,9 +100,6 @@ fn profile_selection_build() { [FINISHED] dev [unoptimized + debuginfo] [..] " ) - .with_stderr_line_without(&["[RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]-C codegen-units=5 [..]"], &["-C debuginfo"]) - .with_stderr_line_without(&["[RUNNING] `[..] rustc --crate-name bdep bdep/src/lib.rs [..]-C codegen-units=5 [..]"], &["-C debuginfo"]) - .with_stderr_line_without(&["[RUNNING] `[..] rustc --crate-name build_script_build build.rs [..]-C codegen-units=5 [..]"], &["-C debuginfo"]) .run(); p.cargo("build -vv") .with_stderr_unordered( @@ -158,7 +155,7 @@ fn profile_selection_build_all_targets() { // - Benchmark dependencies are compiled in `dev` mode, which may be // surprising. See issue rust-lang/cargo#4929. // - We make sure that the build dependencies bar, bdep, and build.rs - // are built without debuginfo. + // are built with debuginfo=0. // // - Dependency profiles: // Pkg Target Profile Reason @@ -184,11 +181,11 @@ fn profile_selection_build_all_targets() { [COMPILING] bar [..] [RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=1 -C debuginfo=2 [..] [RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link -C panic=abort[..]-C codegen-units=1 -C debuginfo=2 [..] -[RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 [..] +[RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 -C debuginfo=0[..] [COMPILING] bdep [..] -[RUNNING] `[..] rustc --crate-name bdep bdep/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 [..] +[RUNNING] `[..] rustc --crate-name bdep bdep/src/lib.rs [..]--crate-type lib --emit=[..]link[..]-C codegen-units=5 -C debuginfo=0[..] [COMPILING] foo [..] -[RUNNING] `[..] rustc --crate-name build_script_build build.rs [..]--crate-type bin --emit=[..]link[..]-C codegen-units=5 [..] +[RUNNING] `[..] rustc --crate-name build_script_build build.rs [..]--crate-type bin --emit=[..]link[..]-C codegen-units=5 -C debuginfo=0[..] [RUNNING] `[..]/target/debug/build/foo-[..]/build-script-build` [foo 0.0.1] foo custom build PROFILE=debug DEBUG=true OPT_LEVEL=0 [RUNNING] `[..] rustc --crate-name foo src/lib.rs [..]--crate-type lib --emit=[..]link -C panic=abort[..]-C codegen-units=1 -C debuginfo=2 [..]` @@ -202,9 +199,6 @@ fn profile_selection_build_all_targets() { [FINISHED] dev [unoptimized + debuginfo] [..] " ) - .with_stderr_line_without(&["[RUNNING] `[..] rustc --crate-name bar bar/src/lib.rs [..]-C codegen-units=5 [..]"], &["-C debuginfo"]) - .with_stderr_line_without(&["[RUNNING] `[..] rustc --crate-name bdep bdep/src/lib.rs [..]-C codegen-units=5 [..]"], &["-C debuginfo"]) - .with_stderr_line_without(&["[RUNNING] `[..] rustc --crate-name build_script_build build.rs [..]-C codegen-units=5 [..]"], &["-C debuginfo"]) .run(); p.cargo("build -vv") .with_stderr_unordered(