diff --git a/src/cargo/core/compiler/mod.rs b/src/cargo/core/compiler/mod.rs index ab43e99795a..47dce5357f1 100644 --- a/src/cargo/core/compiler/mod.rs +++ b/src/cargo/core/compiler/mod.rs @@ -1243,24 +1243,31 @@ fn trim_paths_args( fn check_cfg_args(cx: &Context<'_, '_>, unit: &Unit) -> Vec { if cx.bcx.config.cli_unstable().check_cfg { // This generate something like this: - // - cfg(feature, values()) + // - cfg() // - cfg(feature, values("foo", "bar")) // // NOTE: Despite only explicitly specifying `feature`, well known names and values // are implicitly enabled when one or more `--check-cfg` argument is passed. + // NOTE: Never generate a empty `values()` since it would mean that it's possible + // to have `cfg(feature)` without a feature name which is impossible. let gross_cap_estimation = unit.pkg.summary().features().len() * 7 + 25; let mut arg_feature = OsString::with_capacity(gross_cap_estimation); - arg_feature.push("cfg(feature, values("); - for (i, feature) in unit.pkg.summary().features().keys().enumerate() { - if i != 0 { - arg_feature.push(", "); + + arg_feature.push("cfg("); + if !unit.pkg.summary().features().is_empty() { + arg_feature.push("feature, values("); + for (i, feature) in unit.pkg.summary().features().keys().enumerate() { + if i != 0 { + arg_feature.push(", "); + } + arg_feature.push("\""); + arg_feature.push(feature); + arg_feature.push("\""); } - arg_feature.push("\""); - arg_feature.push(feature); - arg_feature.push("\""); + arg_feature.push(")"); } - arg_feature.push("))"); + arg_feature.push(")"); vec![ OsString::from("-Zunstable-options"), diff --git a/tests/testsuite/check_cfg.rs b/tests/testsuite/check_cfg.rs index 57d5f805363..236e446ce31 100644 --- a/tests/testsuite/check_cfg.rs +++ b/tests/testsuite/check_cfg.rs @@ -15,16 +15,16 @@ macro_rules! x { $what, '(', $($who,)* ')', "'", "[..]") } }}; - ($tool:tt => $what:tt of $who:tt with $($first_value:tt $($other_values:tt)*)?) => {{ + ($tool:tt => $what:tt of $who:tt with $first_value:tt $($other_values:tt)*) => {{ #[cfg(windows)] { concat!("[RUNNING] [..]", $tool, "[..] --check-cfg \"", - $what, '(', $who, ", values(", $("/\"", $first_value, "/\"", $(", ", "/\"", $other_values, "/\"",)*)* "))", '"', "[..]") + $what, '(', $who, ", values(", "/\"", $first_value, "/\"", $(", ", "/\"", $other_values, "/\"",)* "))", '"', "[..]") } #[cfg(not(windows))] { concat!("[RUNNING] [..]", $tool, "[..] --check-cfg '", - $what, '(', $who, ", values(", $("\"", $first_value, "\"", $(", ", "\"", $other_values, "\"",)*)* "))", "'", "[..]") + $what, '(', $who, ", values(", "\"", $first_value, "\"", $(", ", "\"", $other_values, "\"",)* "))", "'", "[..]") } }}; } @@ -150,7 +150,7 @@ fn well_known_names_values() { p.cargo("check -v -Zcheck-cfg") .masquerade_as_nightly_cargo(&["check-cfg"]) - .with_stderr_contains(x!("rustc" => "cfg" of "feature" with)) + .with_stderr_contains(x!("rustc" => "cfg")) .run(); } @@ -213,7 +213,7 @@ fn well_known_names_values_test() { p.cargo("test -v -Zcheck-cfg") .masquerade_as_nightly_cargo(&["check-cfg"]) - .with_stderr_contains(x!("rustc" => "cfg" of "feature" with)) + .with_stderr_contains(x!("rustc" => "cfg")) .run(); } @@ -226,8 +226,8 @@ fn well_known_names_values_doctest() { p.cargo("test -v --doc -Zcheck-cfg") .masquerade_as_nightly_cargo(&["check-cfg"]) - .with_stderr_contains(x!("rustc" => "cfg" of "feature" with)) - .with_stderr_contains(x!("rustdoc" => "cfg" of "feature" with)) + .with_stderr_contains(x!("rustc" => "cfg")) + .with_stderr_contains(x!("rustdoc" => "cfg")) .run(); }