Auto merge of #129183 - estebank:cfg-visitor, r=davidtwco

Detect more `cfg`d out items in resolution errors

Use a visitor to collect *all* items (including those nested) that were stripped behind a `cfg` condition.

```
error[E0425]: cannot find function `f` in this scope
  --> $DIR/nested-cfg-attrs.rs:4:13
   |
LL | fn main() { f() }
   |             ^ not found in this scope
   |
note: found an item that was configured out
  --> $DIR/nested-cfg-attrs.rs:2:4
   |
LL | fn f() {}
   |    ^
note: the item is gated here
  --> $DIR/nested-cfg-attrs.rs:1:35
   |
LL | #[cfg_attr(all(), cfg_attr(all(), cfg(FALSE)))]
   |                                   ^^^^^^^^^^
```
This commit is contained in:
bors 2025-08-02 05:09:31 +00:00
commit 889701db1f
24 changed files with 277 additions and 157 deletions

View file

@ -1411,9 +1411,8 @@ impl InvocationCollectorNode for P<ast::Item> {
}
}
}
let mut idents = Vec::new();
collect_use_tree_leaves(ut, &mut idents);
collect_use_tree_leaves(&ut, &mut idents);
idents
} else {
self.kind.ident().into_iter().collect()

View file

@ -801,10 +801,12 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
}
err.multipart_suggestion(msg, suggestions, applicability);
}
if let Some(ModuleOrUniformRoot::Module(module)) = module
&& let Some(module) = module.opt_def_id()
&& let Some(segment) = segment
{
if let Some(segment) = segment {
let module = match module {
Some(ModuleOrUniformRoot::Module(m)) if let Some(id) = m.opt_def_id() => id,
_ => CRATE_DEF_ID.to_def_id(),
};
self.find_cfg_stripped(&mut err, &segment, module);
}
@ -2839,16 +2841,13 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
continue;
}
let note = errors::FoundItemConfigureOut { span: ident.span };
err.subdiagnostic(note);
if let CfgEntry::NameValue { value: Some((feature, _)), .. } = cfg.0 {
let note = errors::ItemWasBehindFeature { feature, span: cfg.1 };
err.subdiagnostic(note);
let item_was = if let CfgEntry::NameValue { value: Some((feature, _)), .. } = cfg.0 {
errors::ItemWas::BehindFeature { feature, span: cfg.1 }
} else {
let note = errors::ItemWasCfgOut { span: cfg.1 };
err.subdiagnostic(note);
}
errors::ItemWas::CfgOut { span: cfg.1 }
};
let note = errors::FoundItemConfigureOut { span: ident.span, item_was };
err.subdiagnostic(note);
}
}
}

View file

@ -1,10 +1,13 @@
use rustc_errors::codes::*;
use rustc_errors::{Applicability, ElidedLifetimeInPathSubdiag, MultiSpan};
use rustc_errors::{
Applicability, Diag, ElidedLifetimeInPathSubdiag, EmissionGuarantee, IntoDiagArg, MultiSpan,
Subdiagnostic,
};
use rustc_macros::{Diagnostic, Subdiagnostic};
use rustc_span::{Ident, Span, Symbol};
use crate::Res;
use crate::late::PatternSource;
use crate::{Res, fluent_generated as fluent};
#[derive(Diagnostic)]
#[diag(resolve_generic_params_from_outer_item, code = E0401)]
@ -1201,26 +1204,35 @@ pub(crate) struct IdentInScopeButItIsDesc<'a> {
pub(crate) imported_ident_desc: &'a str,
}
#[derive(Subdiagnostic)]
#[note(resolve_found_an_item_configured_out)]
pub(crate) struct FoundItemConfigureOut {
#[primary_span]
pub(crate) span: Span,
pub(crate) item_was: ItemWas,
}
#[derive(Subdiagnostic)]
#[note(resolve_item_was_behind_feature)]
pub(crate) struct ItemWasBehindFeature {
pub(crate) feature: Symbol,
#[primary_span]
pub(crate) span: Span,
pub(crate) enum ItemWas {
BehindFeature { feature: Symbol, span: Span },
CfgOut { span: Span },
}
#[derive(Subdiagnostic)]
#[note(resolve_item_was_cfg_out)]
pub(crate) struct ItemWasCfgOut {
#[primary_span]
pub(crate) span: Span,
impl Subdiagnostic for FoundItemConfigureOut {
fn add_to_diag<G: EmissionGuarantee>(self, diag: &mut Diag<'_, G>) {
let mut multispan: MultiSpan = self.span.into();
match self.item_was {
ItemWas::BehindFeature { feature, span } => {
let key = "feature".into();
let value = feature.into_diag_arg(&mut None);
let msg = diag.dcx.eagerly_translate_to_string(
fluent::resolve_item_was_behind_feature,
[(&key, &value)].into_iter(),
);
multispan.push_span_label(span, msg);
}
ItemWas::CfgOut { span } => {
multispan.push_span_label(span, fluent::resolve_item_was_cfg_out);
}
}
diag.span_note(multispan, fluent::resolve_found_an_item_configured_out);
}
}
#[derive(Diagnostic)]

View file

@ -4231,13 +4231,21 @@ impl<'a, 'ast, 'ra, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
//
// And that's what happens below - we're just mixing both messages
// into a single one.
let failed_to_resolve = match parent_err.node {
ResolutionError::FailedToResolve { .. } => true,
_ => false,
};
let mut parent_err = this.r.into_struct_error(parent_err.span, parent_err.node);
// overwrite all properties with the parent's error message
err.messages = take(&mut parent_err.messages);
err.code = take(&mut parent_err.code);
swap(&mut err.span, &mut parent_err.span);
err.children = take(&mut parent_err.children);
if failed_to_resolve {
err.children = take(&mut parent_err.children);
} else {
err.children.append(&mut parent_err.children);
}
err.sort_span = parent_err.sort_span;
err.is_lint = parent_err.is_lint.clone();

View file

@ -525,9 +525,8 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
}
self.err_code_special_cases(&mut err, source, path, span);
if let Some(module) = base_error.module {
self.r.find_cfg_stripped(&mut err, &path.last().unwrap().ident.name, module);
}
let module = base_error.module.unwrap_or_else(|| CRATE_DEF_ID.to_def_id());
self.r.find_cfg_stripped(&mut err, &path.last().unwrap().ident.name, module);
(err, candidates)
}

View file

@ -3,6 +3,22 @@ error[E0425]: cannot find function `foo` in this scope
|
LL | foo();
| ^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/both-true-false.rs:6:4
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | #[cfg(true)]
LL | fn foo() {}
| ^^^
note: found an item that was configured out
--> $DIR/both-true-false.rs:10:4
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | fn foo() {}
| ^^^
error: aborting due to 1 previous error

View file

@ -128,60 +128,150 @@ error[E0425]: cannot find function `key_value_form` in this scope
|
LL | key_value_form();
| ^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:32:4
|
LL | #[cfg(version = "1.43")]
| ---------------- the item is gated behind the `1.43` feature
LL |
LL | fn key_value_form() {}
| ^^^^^^^^^^^^^^
error[E0425]: cannot find function `not_numbers_or_periods` in this scope
--> $DIR/syntax.rs:143:5
|
LL | not_numbers_or_periods();
| ^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:53:4
|
LL | #[cfg(version("foo"))]
| ------- the item is gated here
LL |
LL | fn not_numbers_or_periods() {}
| ^^^^^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `complex_semver_with_metadata` in this scope
--> $DIR/syntax.rs:144:5
|
LL | complex_semver_with_metadata();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:57:4
|
LL | #[cfg(version("1.20.0-stable"))]
| ----------------- the item is gated here
LL |
LL | fn complex_semver_with_metadata() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `invalid_major_only` in this scope
--> $DIR/syntax.rs:145:5
|
LL | invalid_major_only();
| ^^^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:80:4
|
LL | #[cfg(version("1"))]
| ----- the item is gated here
LL |
LL | fn invalid_major_only() {}
| ^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `invalid_major_only_zero` in this scope
--> $DIR/syntax.rs:146:5
|
LL | invalid_major_only_zero();
| ^^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:84:4
|
LL | #[cfg(version("0"))]
| ----- the item is gated here
LL |
LL | fn invalid_major_only_zero() {}
| ^^^^^^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `invalid_major_only_negative` in this scope
--> $DIR/syntax.rs:147:5
|
LL | invalid_major_only_negative();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:97:4
|
LL | #[cfg(version("-1"))]
| ------ the item is gated here
LL |
LL | fn invalid_major_only_negative() {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `exceed_u16_major` in this scope
--> $DIR/syntax.rs:148:5
|
LL | exceed_u16_major();
| ^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:103:4
|
LL | #[cfg(version("65536"))]
| --------- the item is gated here
LL |
LL | fn exceed_u16_major() {}
| ^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `exceed_u16_minor` in this scope
--> $DIR/syntax.rs:149:5
|
LL | exceed_u16_minor();
| ^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:107:4
|
LL | #[cfg(version("1.65536.0"))]
| ------------- the item is gated here
LL |
LL | fn exceed_u16_minor() {}
| ^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `exceed_u16_patch` in this scope
--> $DIR/syntax.rs:150:5
|
LL | exceed_u16_patch();
| ^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:111:4
|
LL | #[cfg(version("1.0.65536"))]
| ------------- the item is gated here
LL |
LL | fn exceed_u16_patch() {}
| ^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `exceed_u16_mixed` in this scope
--> $DIR/syntax.rs:151:5
|
LL | exceed_u16_mixed();
| ^^^^^^^^^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/syntax.rs:115:4
|
LL | #[cfg(version("65536.0.65536"))]
| ----------------- the item is gated here
LL |
LL | fn exceed_u16_mixed() {}
| ^^^^^^^^^^^^^^^^
error: aborting due to 14 previous errors; 14 warnings emitted

View file

@ -3,6 +3,14 @@ error[E0425]: cannot find function `foo` in this scope
|
LL | foo();
| ^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/cmdline-false.rs:5:4
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | fn foo() {}
| ^^^
error: aborting due to 1 previous error

View file

@ -11,24 +11,20 @@ fn main() {
cfged_out::inner::uwu(); //~ ERROR cannot find function
//~^ NOTE found an item that was configured out
//~| NOTE not found in `cfged_out::inner`
//~| NOTE the item is gated here
// The module isn't found - we would like to get a diagnostic, but currently don't due to
// the awkward way the resolver diagnostics are currently implemented.
cfged_out::inner::doesnt_exist::hello(); //~ ERROR failed to resolve
//~^ NOTE could not find `doesnt_exist` in `inner`
//~| NOTE found an item that was configured out
//~| NOTE the item is gated here
// It should find the one in the right module, not the wrong one.
cfged_out::inner::right::meow(); //~ ERROR cannot find function
//~^ NOTE found an item that was configured out
//~| NOTE not found in `cfged_out::inner::right
//~| NOTE the item is gated behind the `what-a-cool-feature` feature
// Exists in the crate root - diagnostic.
cfged_out::vanished(); //~ ERROR cannot find function
//~^ NOTE found an item that was configured out
//~| NOTE not found in `cfged_out`
//~| NOTE the item is gated here
}

View file

@ -1,5 +1,5 @@
error[E0433]: failed to resolve: could not find `doesnt_exist` in `inner`
--> $DIR/diagnostics-cross-crate.rs:18:23
--> $DIR/diagnostics-cross-crate.rs:17:23
|
LL | cfged_out::inner::doesnt_exist::hello();
| ^^^^^^^^^^^^ could not find `doesnt_exist` in `inner`
@ -7,13 +7,10 @@ LL | cfged_out::inner::doesnt_exist::hello();
note: found an item that was configured out
--> $DIR/auxiliary/cfged_out.rs:6:13
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub mod doesnt_exist {
| ^^^^^^^^^^^^
note: the item is gated here
--> $DIR/auxiliary/cfged_out.rs:5:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0425]: cannot find function `uwu` in crate `cfged_out`
--> $DIR/diagnostics-cross-crate.rs:7:16
@ -30,16 +27,13 @@ LL | cfged_out::inner::uwu();
note: found an item that was configured out
--> $DIR/auxiliary/cfged_out.rs:3:12
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub fn uwu() {}
| ^^^
note: the item is gated here
--> $DIR/auxiliary/cfged_out.rs:2:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0425]: cannot find function `meow` in module `cfged_out::inner::right`
--> $DIR/diagnostics-cross-crate.rs:24:30
--> $DIR/diagnostics-cross-crate.rs:22:30
|
LL | cfged_out::inner::right::meow();
| ^^^^ not found in `cfged_out::inner::right`
@ -47,16 +41,13 @@ LL | cfged_out::inner::right::meow();
note: found an item that was configured out
--> $DIR/auxiliary/cfged_out.rs:17:16
|
LL | #[cfg(feature = "what-a-cool-feature")]
| ------------------------------- the item is gated behind the `what-a-cool-feature` feature
LL | pub fn meow() {}
| ^^^^
note: the item is gated behind the `what-a-cool-feature` feature
--> $DIR/auxiliary/cfged_out.rs:16:15
|
LL | #[cfg(feature = "what-a-cool-feature")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `vanished` in crate `cfged_out`
--> $DIR/diagnostics-cross-crate.rs:30:16
--> $DIR/diagnostics-cross-crate.rs:27:16
|
LL | cfged_out::vanished();
| ^^^^^^^^ not found in `cfged_out`
@ -64,13 +55,10 @@ LL | cfged_out::vanished();
note: found an item that was configured out
--> $DIR/auxiliary/cfged_out.rs:22:8
|
LL | #[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
| -------------------------------------------- the item is gated here
LL | pub fn vanished() {}
| ^^^^^^^^
note: the item is gated here
--> $DIR/auxiliary/cfged_out.rs:21:7
|
LL | #[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 5 previous errors

View file

@ -7,13 +7,11 @@ LL | reexport::gated::foo();
note: found an item that was configured out
--> $DIR/diagnostics-reexport-2.rs:10:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod gated {
| ^^^^^
note: the item is gated here
--> $DIR/diagnostics-reexport-2.rs:4:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0433]: failed to resolve: could not find `gated` in `reexport2`
--> $DIR/diagnostics-reexport-2.rs:46:16
@ -24,13 +22,11 @@ LL | reexport2::gated::foo();
note: found an item that was configured out
--> $DIR/diagnostics-reexport-2.rs:10:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod gated {
| ^^^^^
note: the item is gated here
--> $DIR/diagnostics-reexport-2.rs:4:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0433]: failed to resolve: could not find `gated` in `reexport30`
--> $DIR/diagnostics-reexport-2.rs:50:17
@ -41,13 +37,11 @@ LL | reexport30::gated::foo();
note: found an item that was configured out
--> $DIR/diagnostics-reexport-2.rs:10:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod gated {
| ^^^^^
note: the item is gated here
--> $DIR/diagnostics-reexport-2.rs:4:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0433]: failed to resolve: could not find `gated` in `reexport31`
--> $DIR/diagnostics-reexport-2.rs:54:17
@ -58,13 +52,11 @@ LL | reexport31::gated::foo();
note: found an item that was configured out
--> $DIR/diagnostics-reexport-2.rs:10:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod gated {
| ^^^^^
note: the item is gated here
--> $DIR/diagnostics-reexport-2.rs:4:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0433]: failed to resolve: could not find `gated` in `reexport32`
--> $DIR/diagnostics-reexport-2.rs:58:17
@ -75,13 +67,11 @@ LL | reexport32::gated::foo();
note: found an item that was configured out
--> $DIR/diagnostics-reexport-2.rs:10:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod gated {
| ^^^^^
note: the item is gated here
--> $DIR/diagnostics-reexport-2.rs:4:11
|
LL | #[cfg(false)]
| ^^^^^
error: aborting due to 5 previous errors

View file

@ -34,7 +34,7 @@ mod b {
}
fn main() {
// There is no uwu at this path - no diagnostic.
// There is no uwu at this path, but there's one in a cgfd out sub-module, so we mention it.
inner::uwu(); //~ ERROR cannot find function
//~^ NOTE not found in `inner`
}

View file

@ -7,13 +7,10 @@ LL | pub use a::x;
note: found an item that was configured out
--> $DIR/diagnostics-reexport.rs:18:12
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub fn x() {}
| ^
note: the item is gated here
--> $DIR/diagnostics-reexport.rs:17:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0432]: unresolved imports `b::x`, `b::y`
--> $DIR/diagnostics-reexport.rs:22:13
@ -26,23 +23,17 @@ LL | pub use b::{x, y};
note: found an item that was configured out
--> $DIR/diagnostics-reexport.rs:29:12
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub fn x() {}
| ^
note: the item is gated here
--> $DIR/diagnostics-reexport.rs:28:11
|
LL | #[cfg(false)]
| ^^^^^
note: found an item that was configured out
--> $DIR/diagnostics-reexport.rs:32:12
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub fn y() {}
| ^
note: the item is gated here
--> $DIR/diagnostics-reexport.rs:31:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0425]: cannot find function `uwu` in module `inner`
--> $DIR/diagnostics-reexport.rs:38:12
@ -53,13 +44,10 @@ LL | inner::uwu();
note: found an item that was configured out
--> $DIR/diagnostics-reexport.rs:8:20
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub use super::uwu;
| ^^^
note: the item is gated here
--> $DIR/diagnostics-reexport.rs:7:11
|
LL | #[cfg(false)]
| ^^^^^
error: aborting due to 3 previous errors

View file

@ -37,8 +37,8 @@ mod placeholder {
//~| NOTE could not find `doesnt_exist` in `inner`
}
#[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
pub fn vanished() {}
#[cfg(i_dont_exist_and_you_can_do_nothing_about_it)] //~ NOTE the item is gated here
pub fn vanished() {} //~ NOTE found an item that was configured out
fn main() {
// There is no uwu at this path - no diagnostic.
@ -49,8 +49,7 @@ fn main() {
inner::uwu(); //~ ERROR cannot find function
//~| NOTE not found in `inner`
// The module isn't found - we would like to get a diagnostic, but currently don't due to
// the awkward way the resolver diagnostics are currently implemented.
// The module isn't found - we get a diagnostic.
inner::doesnt_exist::hello(); //~ ERROR failed to resolve
//~| NOTE could not find `doesnt_exist` in `inner`
@ -58,9 +57,8 @@ fn main() {
inner::right::meow(); //~ ERROR cannot find function
//~| NOTE not found in `inner::right
// Exists in the crate root - we would generally want a diagnostic,
// but currently don't have one.
// Not that it matters much though, this is highly unlikely to confuse anyone.
// Exists in the crate root - we show a diagnostic because we treat "no module DefId" as "crate
// root DefId".
vanished(); //~ ERROR cannot find function
//~^ NOTE not found in this scope
}

View file

@ -7,13 +7,11 @@ LL | use super::inner::doesnt_exist;
note: found an item that was configured out
--> $DIR/diagnostics-same-crate.rs:11:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod doesnt_exist {
| ^^^^^^^^^^^^
note: the item is gated here
--> $DIR/diagnostics-same-crate.rs:8:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0432]: unresolved import `super::inner::doesnt_exist`
--> $DIR/diagnostics-same-crate.rs:35:23
@ -24,16 +22,14 @@ LL | use super::inner::doesnt_exist::hi;
note: found an item that was configured out
--> $DIR/diagnostics-same-crate.rs:11:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod doesnt_exist {
| ^^^^^^^^^^^^
note: the item is gated here
--> $DIR/diagnostics-same-crate.rs:8:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0433]: failed to resolve: could not find `doesnt_exist` in `inner`
--> $DIR/diagnostics-same-crate.rs:54:12
--> $DIR/diagnostics-same-crate.rs:53:12
|
LL | inner::doesnt_exist::hello();
| ^^^^^^^^^^^^ could not find `doesnt_exist` in `inner`
@ -41,13 +37,11 @@ LL | inner::doesnt_exist::hello();
note: found an item that was configured out
--> $DIR/diagnostics-same-crate.rs:11:13
|
LL | #[cfg(false)]
| ----- the item is gated here
...
LL | pub mod doesnt_exist {
| ^^^^^^^^^^^^
note: the item is gated here
--> $DIR/diagnostics-same-crate.rs:8:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0425]: cannot find function `uwu` in module `inner`
--> $DIR/diagnostics-same-crate.rs:49:12
@ -58,16 +52,13 @@ LL | inner::uwu();
note: found an item that was configured out
--> $DIR/diagnostics-same-crate.rs:5:12
|
LL | #[cfg(false)]
| ----- the item is gated here
LL | pub fn uwu() {}
| ^^^
note: the item is gated here
--> $DIR/diagnostics-same-crate.rs:4:11
|
LL | #[cfg(false)]
| ^^^^^
error[E0425]: cannot find function `meow` in module `inner::right`
--> $DIR/diagnostics-same-crate.rs:58:19
--> $DIR/diagnostics-same-crate.rs:57:19
|
LL | inner::right::meow();
| ^^^^ not found in `inner::right`
@ -75,13 +66,10 @@ LL | inner::right::meow();
note: found an item that was configured out
--> $DIR/diagnostics-same-crate.rs:26:16
|
LL | #[cfg(feature = "what-a-cool-feature")]
| ------------------------------- the item is gated behind the `what-a-cool-feature` feature
LL | pub fn meow() {}
| ^^^^
note: the item is gated behind the `what-a-cool-feature` feature
--> $DIR/diagnostics-same-crate.rs:25:15
|
LL | #[cfg(feature = "what-a-cool-feature")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error[E0425]: cannot find function `uwu` in this scope
--> $DIR/diagnostics-same-crate.rs:45:5
@ -90,10 +78,18 @@ LL | uwu();
| ^^^ not found in this scope
error[E0425]: cannot find function `vanished` in this scope
--> $DIR/diagnostics-same-crate.rs:64:5
--> $DIR/diagnostics-same-crate.rs:62:5
|
LL | vanished();
| ^^^^^^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/diagnostics-same-crate.rs:41:8
|
LL | #[cfg(i_dont_exist_and_you_can_do_nothing_about_it)]
| -------------------------------------------- the item is gated here
LL | pub fn vanished() {}
| ^^^^^^^^
error: aborting due to 7 previous errors

View file

@ -10,9 +10,10 @@
//!
//! Added in <https://github.com/rust-lang/rust/pull/34216>.
#[cfg_attr(all(), cfg_attr(all(), cfg(false)))]
fn f() {}
#[cfg_attr(all(), cfg_attr(all(), cfg(false)))] //~ NOTE the item is gated here
fn f() {} //~ NOTE found an item that was configured out
fn main() {
f() //~ ERROR cannot find function `f` in this scope
//~^ NOTE not found in this scope
}

View file

@ -3,6 +3,14 @@ error[E0425]: cannot find function `f` in this scope
|
LL | f()
| ^ not found in this scope
|
note: found an item that was configured out
--> $DIR/nested-cfg-attr-conditional-compilation.rs:14:4
|
LL | #[cfg_attr(all(), cfg_attr(all(), cfg(false)))]
| ----- the item is gated here
LL | fn f() {}
| ^
error: aborting due to 1 previous error

View file

@ -1,8 +1,10 @@
//@ compile-flags: --cfg foo --check-cfg=cfg(foo,bar)
#[cfg(all(foo, bar))] // foo AND bar
fn foo() {}
//~^ NOTE the item is gated here
fn foo() {} //~ NOTE found an item that was configured out
fn main() {
foo(); //~ ERROR cannot find function `foo` in this scope
//~^ NOTE not found in this scope
}

View file

@ -1,8 +1,17 @@
error[E0425]: cannot find function `foo` in this scope
--> $DIR/test-cfg.rs:7:5
--> $DIR/test-cfg.rs:8:5
|
LL | foo();
| ^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/test-cfg.rs:5:4
|
LL | #[cfg(all(foo, bar))] // foo AND bar
| --- the item is gated here
LL |
LL | fn foo() {}
| ^^^
error: aborting due to 1 previous error

View file

@ -104,8 +104,8 @@ LL | #[std::test]
|
note: found an item that was configured out
--> $SRC_DIR/std/src/lib.rs:LL:COL
note: the item is gated here
--> $SRC_DIR/std/src/lib.rs:LL:COL
|
= note: the item is gated here
error: aborting due to 16 previous errors

View file

@ -4,6 +4,13 @@ error[E0433]: failed to resolve: use of unresolved module or unlinked crate `a`
LL | a::bar();
| ^ use of unresolved module or unlinked crate `a`
|
note: found an item that was configured out
--> $DIR/macro-inner-attributes.rs:7:7
|
LL | test!(a,
| ^
LL | #[cfg(false)],
| ----- the item is gated here
help: there is a crate or module with a similar name
|
LL - a::bar();

View file

@ -7,13 +7,10 @@ LL | a::bar();
note: found an item that was configured out
--> $DIR/macro-outer-attributes.rs:9:14
|
LL | #[cfg(false)],
| ----- the item is gated here
LL | pub fn bar() { });
| ^^^
note: the item is gated here
--> $DIR/macro-outer-attributes.rs:8:13
|
LL | #[cfg(false)],
| ^^^^^
help: consider importing this function
|
LL + use b::bar;

View file

@ -1,6 +1,7 @@
#[cfg(doc)]
pub struct Foo;
#[cfg(doc)] //~ NOTE the item is gated here
pub struct Foo; //~ NOTE found an item that was configured out
fn main() {
let f = Foo; //~ ERROR
let f = Foo; //~ ERROR cannot find value `Foo` in this scope
//~^ NOTE not found in this scope
}

View file

@ -3,6 +3,14 @@ error[E0425]: cannot find value `Foo` in this scope
|
LL | let f = Foo;
| ^^^ not found in this scope
|
note: found an item that was configured out
--> $DIR/cfg-rustdoc.rs:2:12
|
LL | #[cfg(doc)]
| --- the item is gated here
LL | pub struct Foo;
| ^^^
error: aborting due to 1 previous error