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:
commit
889701db1f
24 changed files with 277 additions and 157 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)]
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue