diff --git a/src/cargo/core/compiler/mod.rs b/src/cargo/core/compiler/mod.rs index 277039685d6..9d0181bf8c4 100644 --- a/src/cargo/core/compiler/mod.rs +++ b/src/cargo/core/compiler/mod.rs @@ -1391,17 +1391,26 @@ fn check_cfg_args(unit: &Unit) -> Vec { } arg_feature.push("))"); - // In addition to the package features, we also include the `test` cfg (since - // compiler-team#785, as to be able to someday apply yt conditionaly), as well - // the `docsrs` cfg from the docs.rs service. + // In addition to the package features, we also conditionaly include the `test` cfg + // based on the unit target "test" field (ie `lib.test = false`, `[[bin]] test = false` and + // others). // - // We include `docsrs` here (in Cargo) instead of rustc, since there is a much closer + // We also include `docsrs` here (in Cargo) instead of rustc, since there is a much closer // relationship between Cargo and docs.rs than rustc and docs.rs. In particular, all // users of docs.rs use Cargo, but not all users of rustc (like Rust-for-Linux) use docs.rs. + let arg_extra = if unit.target.tested() + // Benchmarks default to `test = false` but most of them still use the test crate + // and the `#[test]` attribute, so for now always mark `test` as well known for them. + || unit.target.is_bench() + { + OsString::from("cfg(docsrs,test)") + } else { + OsString::from("cfg(docsrs)") + }; vec![ OsString::from("--check-cfg"), - OsString::from("cfg(docsrs,test)"), + arg_extra, OsString::from("--check-cfg"), arg_feature, ] diff --git a/tests/testsuite/check_cfg.rs b/tests/testsuite/check_cfg.rs index 0b3a8d45a91..3f236118d07 100644 --- a/tests/testsuite/check_cfg.rs +++ b/tests/testsuite/check_cfg.rs @@ -336,17 +336,18 @@ fn test_false_lib() { .build(); p.cargo("check -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_does_not_contain(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); p.cargo("clean").run(); p.cargo("test -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); p.cargo("clean").run(); p.cargo("test --lib -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); } @@ -372,7 +373,8 @@ fn test_false_bins() { .build(); p.cargo("check -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) // for foo & deamon + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) // for foo + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) // for deamon .run(); } @@ -401,7 +403,8 @@ fn test_false_examples() { .build(); p.cargo("check --examples -v") - .with_stderr_contains(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_does_not_contain(x!("rustc" => "cfg" of "docsrs,test")) + .with_stderr_contains(x!("rustc" => "cfg" of "docsrs")) .run(); } diff --git a/tests/testsuite/test.rs b/tests/testsuite/test.rs index 48d69526ad7..95d2c60e627 100644 --- a/tests/testsuite/test.rs +++ b/tests/testsuite/test.rs @@ -4191,7 +4191,19 @@ fn test_hint_workspace_virtual() { .file("a/src/lib.rs", "#[test] fn t1() {}") .file("b/Cargo.toml", &basic_manifest("b", "0.1.0")) .file("b/src/lib.rs", "#[test] fn t1() {assert!(false)}") - .file("c/Cargo.toml", &basic_manifest("c", "0.1.0")) + .file( + "c/Cargo.toml", + r#" + [package] + name = "c" + version = "0.1.0" + edition = "2015" + + [[example]] + name = "ex1" + test = true + "#, + ) .file( "c/src/lib.rs", r#" @@ -4275,14 +4287,17 @@ fn test_hint_workspace_virtual() { [ERROR] test failed, to rerun pass `-p c --bin c` [RUNNING] tests/t1.rs (target/debug/deps/t1-[HASH][EXE]) [ERROR] test failed, to rerun pass `-p c --test t1` +[RUNNING] unittests examples/ex1.rs (target/debug/examples/ex1-[HASH]) +[ERROR] test failed, to rerun pass `-p c --example ex1` [DOCTEST] a [DOCTEST] b [DOCTEST] c [ERROR] doctest failed, to rerun pass `-p c --doc` -[ERROR] 4 targets failed: +[ERROR] 5 targets failed: `-p b --lib` `-p c --bin c` `-p c --test t1` + `-p c --example ex1` `-p c --doc` "#]])