Rollup merge of #118533 - chenyukang:yukang-fix-118455, r=petrochenkov
Suppress unhelpful diagnostics for unresolved top level attributes Fixes #118455, unresolved top level attribute error didn't imported prelude and already have emitted an error, report builtin macro and attributes error by the way, so `check_invalid_crate_level_attr` in can ignore them. Also fixes #89566, fixes #67107. r? `@petrochenkov`
This commit is contained in:
commit
ee2e9e1eda
30 changed files with 100 additions and 202 deletions
|
@ -514,6 +514,7 @@ pub enum StashKey {
|
||||||
MaybeForgetReturn,
|
MaybeForgetReturn,
|
||||||
/// Query cycle detected, stashing in favor of a better error.
|
/// Query cycle detected, stashing in favor of a better error.
|
||||||
Cycle,
|
Cycle,
|
||||||
|
UndeterminedMacroResolution,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_track_diagnostic(diag: Diagnostic, f: &mut dyn FnMut(Diagnostic)) {
|
fn default_track_diagnostic(diag: Diagnostic, f: &mut dyn FnMut(Diagnostic)) {
|
||||||
|
|
|
@ -5,8 +5,10 @@
|
||||||
//! item.
|
//! item.
|
||||||
|
|
||||||
use crate::{errors, fluent_generated as fluent};
|
use crate::{errors, fluent_generated as fluent};
|
||||||
use rustc_ast::{ast, AttrStyle, Attribute, LitKind, MetaItemKind, MetaItemLit, NestedMetaItem};
|
use rustc_ast::{ast, AttrKind, AttrStyle, Attribute, LitKind};
|
||||||
|
use rustc_ast::{MetaItemKind, MetaItemLit, NestedMetaItem};
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
|
use rustc_errors::StashKey;
|
||||||
use rustc_errors::{Applicability, DiagCtxt, IntoDiagnosticArg, MultiSpan};
|
use rustc_errors::{Applicability, DiagCtxt, IntoDiagnosticArg, MultiSpan};
|
||||||
use rustc_feature::{AttributeDuplicates, AttributeType, BuiltinAttribute, BUILTIN_ATTRIBUTE_MAP};
|
use rustc_feature::{AttributeDuplicates, AttributeType, BuiltinAttribute, BUILTIN_ATTRIBUTE_MAP};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -2530,6 +2532,14 @@ fn check_invalid_crate_level_attr(tcx: TyCtxt<'_>, attrs: &[Attribute]) {
|
||||||
if attr.style == AttrStyle::Inner {
|
if attr.style == AttrStyle::Inner {
|
||||||
for attr_to_check in ATTRS_TO_CHECK {
|
for attr_to_check in ATTRS_TO_CHECK {
|
||||||
if attr.has_name(*attr_to_check) {
|
if attr.has_name(*attr_to_check) {
|
||||||
|
if let AttrKind::Normal(ref p) = attr.kind
|
||||||
|
&& let Some(diag) = tcx.dcx().steal_diagnostic(
|
||||||
|
p.item.path.span,
|
||||||
|
StashKey::UndeterminedMacroResolution,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
diag.cancel();
|
||||||
|
}
|
||||||
let item = tcx
|
let item = tcx
|
||||||
.hir()
|
.hir()
|
||||||
.items()
|
.items()
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
//! A bunch of methods and structures more or less related to resolving macros and
|
//! A bunch of methods and structures more or less related to resolving macros and
|
||||||
//! interface provided by `Resolver` to macro expander.
|
//! interface provided by `Resolver` to macro expander.
|
||||||
|
|
||||||
use crate::errors::{
|
use crate::errors::CannotDetermineMacroResolution;
|
||||||
self, AddAsNonDerive, CannotDetermineMacroResolution, CannotFindIdentInThisScope,
|
use crate::errors::{self, AddAsNonDerive, CannotFindIdentInThisScope};
|
||||||
MacroExpectedFound, RemoveSurroundingDerive,
|
use crate::errors::{MacroExpectedFound, RemoveSurroundingDerive};
|
||||||
};
|
|
||||||
use crate::Namespace::*;
|
use crate::Namespace::*;
|
||||||
use crate::{BuiltinMacroState, Determinacy, MacroData};
|
use crate::{BuiltinMacroState, Determinacy, MacroData};
|
||||||
use crate::{DeriveData, Finalize, ParentScope, ResolutionError, Resolver, ScopeSet};
|
use crate::{DeriveData, Finalize, ParentScope, ResolutionError, Resolver, ScopeSet};
|
||||||
|
@ -15,7 +14,7 @@ use rustc_ast_pretty::pprust;
|
||||||
use rustc_attr::StabilityLevel;
|
use rustc_attr::StabilityLevel;
|
||||||
use rustc_data_structures::intern::Interned;
|
use rustc_data_structures::intern::Interned;
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_errors::{codes::*, struct_span_code_err, Applicability};
|
use rustc_errors::{codes::*, struct_span_code_err, Applicability, StashKey};
|
||||||
use rustc_expand::base::{Annotatable, DeriveResolutions, Indeterminate, ResolverExpand};
|
use rustc_expand::base::{Annotatable, DeriveResolutions, Indeterminate, ResolverExpand};
|
||||||
use rustc_expand::base::{SyntaxExtension, SyntaxExtensionKind};
|
use rustc_expand::base::{SyntaxExtension, SyntaxExtensionKind};
|
||||||
use rustc_expand::compile_declarative_macro;
|
use rustc_expand::compile_declarative_macro;
|
||||||
|
@ -25,9 +24,8 @@ use rustc_hir::def_id::{CrateNum, DefId, LocalDefId};
|
||||||
use rustc_middle::middle::stability;
|
use rustc_middle::middle::stability;
|
||||||
use rustc_middle::ty::RegisteredTools;
|
use rustc_middle::ty::RegisteredTools;
|
||||||
use rustc_middle::ty::{TyCtxt, Visibility};
|
use rustc_middle::ty::{TyCtxt, Visibility};
|
||||||
use rustc_session::lint::builtin::{
|
use rustc_session::lint::builtin::UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES;
|
||||||
LEGACY_DERIVE_HELPERS, SOFT_UNSTABLE, UNKNOWN_OR_MALFORMED_DIAGNOSTIC_ATTRIBUTES,
|
use rustc_session::lint::builtin::{LEGACY_DERIVE_HELPERS, SOFT_UNSTABLE};
|
||||||
};
|
|
||||||
use rustc_session::lint::builtin::{UNUSED_MACROS, UNUSED_MACRO_RULES};
|
use rustc_session::lint::builtin::{UNUSED_MACROS, UNUSED_MACRO_RULES};
|
||||||
use rustc_session::lint::BuiltinLintDiagnostics;
|
use rustc_session::lint::BuiltinLintDiagnostics;
|
||||||
use rustc_session::parse::feature_err;
|
use rustc_session::parse::feature_err;
|
||||||
|
@ -703,21 +701,21 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
|
||||||
// situations should be reported as errors, so this is a bug.
|
// situations should be reported as errors, so this is a bug.
|
||||||
this.dcx().span_delayed_bug(span, "inconsistent resolution for a macro");
|
this.dcx().span_delayed_bug(span, "inconsistent resolution for a macro");
|
||||||
}
|
}
|
||||||
} else {
|
} else if this.tcx.dcx().has_errors().is_none() && this.privacy_errors.is_empty() {
|
||||||
// It's possible that the macro was unresolved (indeterminate) and silently
|
// It's possible that the macro was unresolved (indeterminate) and silently
|
||||||
// expanded into a dummy fragment for recovery during expansion.
|
// expanded into a dummy fragment for recovery during expansion.
|
||||||
// Now, post-expansion, the resolution may succeed, but we can't change the
|
// Now, post-expansion, the resolution may succeed, but we can't change the
|
||||||
// past and need to report an error.
|
// past and need to report an error.
|
||||||
// However, non-speculative `resolve_path` can successfully return private items
|
// However, non-speculative `resolve_path` can successfully return private items
|
||||||
// even if speculative `resolve_path` returned nothing previously, so we skip this
|
// even if speculative `resolve_path` returned nothing previously, so we skip this
|
||||||
// less informative error if the privacy error is reported elsewhere.
|
// less informative error if no other error is reported elsewhere.
|
||||||
if this.privacy_errors.is_empty() {
|
|
||||||
this.dcx().emit_err(CannotDetermineMacroResolution {
|
let err = this.dcx().create_err(CannotDetermineMacroResolution {
|
||||||
span,
|
span,
|
||||||
kind: kind.descr(),
|
kind: kind.descr(),
|
||||||
path: Segment::names_to_string(path),
|
path: Segment::names_to_string(path),
|
||||||
});
|
});
|
||||||
}
|
err.stash(span, StashKey::UndeterminedMacroResolution);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
#![derive(Copy)] //~ ERROR cannot determine resolution for the attribute macro `derive`
|
#![derive(Copy)]
|
||||||
//~^ ERROR `derive` attribute cannot be used at crate level
|
//~^ ERROR `derive` attribute cannot be used at crate level
|
||||||
|
|
||||||
#![test]//~ ERROR cannot determine resolution for the attribute macro `test`
|
#![test]
|
||||||
//~^ ERROR `test` attribute cannot be used at crate level
|
//~^ ERROR `test` attribute cannot be used at crate level
|
||||||
|
|
||||||
#![test_case]//~ ERROR cannot determine resolution for the attribute macro `test_case`
|
#![test_case]
|
||||||
//~^ ERROR `test_case` attribute cannot be used at crate level
|
//~^ ERROR `test_case` attribute cannot be used at crate level
|
||||||
|
|
||||||
#![bench]//~ ERROR cannot determine resolution for the attribute macro `bench`
|
#![bench]
|
||||||
//~^ ERROR `bench` attribute cannot be used at crate level
|
//~^ ERROR `bench` attribute cannot be used at crate level
|
||||||
|
|
||||||
#![global_allocator]//~ ERROR cannot determine resolution for the attribute macro `global_allocator`
|
#![global_allocator]
|
||||||
//~^ ERROR `global_allocator` attribute cannot be used at crate level
|
//~^ ERROR `global_allocator` attribute cannot be used at crate level
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,43 +1,3 @@
|
||||||
error: cannot determine resolution for the attribute macro `derive`
|
|
||||||
--> $DIR/issue-36617.rs:1:4
|
|
||||||
|
|
|
||||||
LL | #![derive(Copy)]
|
|
||||||
| ^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot determine resolution for the attribute macro `test`
|
|
||||||
--> $DIR/issue-36617.rs:4:4
|
|
||||||
|
|
|
||||||
LL | #![test]
|
|
||||||
| ^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot determine resolution for the attribute macro `test_case`
|
|
||||||
--> $DIR/issue-36617.rs:7:4
|
|
||||||
|
|
|
||||||
LL | #![test_case]
|
|
||||||
| ^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot determine resolution for the attribute macro `bench`
|
|
||||||
--> $DIR/issue-36617.rs:10:4
|
|
||||||
|
|
|
||||||
LL | #![bench]
|
|
||||||
| ^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot determine resolution for the attribute macro `global_allocator`
|
|
||||||
--> $DIR/issue-36617.rs:13:4
|
|
||||||
|
|
|
||||||
LL | #![global_allocator]
|
|
||||||
| ^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: `derive` attribute cannot be used at crate level
|
error: `derive` attribute cannot be used at crate level
|
||||||
--> $DIR/issue-36617.rs:1:1
|
--> $DIR/issue-36617.rs:1:1
|
||||||
|
|
|
|
||||||
|
@ -113,5 +73,5 @@ LL - #![global_allocator]
|
||||||
LL + #[global_allocator]
|
LL + #[global_allocator]
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 10 previous errors
|
error: aborting due to 5 previous errors
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ mod unresolved_env {
|
||||||
use env; //~ ERROR unresolved import `env`
|
use env; //~ ERROR unresolved import `env`
|
||||||
|
|
||||||
include!(concat!(env!("NON_EXISTENT"), "/data.rs"));
|
include!(concat!(env!("NON_EXISTENT"), "/data.rs"));
|
||||||
//~^ ERROR cannot determine resolution for the macro `env`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
mod nonexistent_env {
|
mod nonexistent_env {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: environment variable `NON_EXISTENT` not defined at compile time
|
error: environment variable `NON_EXISTENT` not defined at compile time
|
||||||
--> $DIR/issue-55897.rs:11:22
|
--> $DIR/issue-55897.rs:10:22
|
||||||
|
|
|
|
||||||
LL | include!(concat!(env!("NON_EXISTENT"), "/data.rs"));
|
LL | include!(concat!(env!("NON_EXISTENT"), "/data.rs"));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -8,7 +8,7 @@ LL | include!(concat!(env!("NON_EXISTENT"), "/data.rs"));
|
||||||
= note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info)
|
= note: this error originates in the macro `env` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||||
|
|
||||||
error: suffixes on string literals are invalid
|
error: suffixes on string literals are invalid
|
||||||
--> $DIR/issue-55897.rs:16:22
|
--> $DIR/issue-55897.rs:15:22
|
||||||
|
|
|
|
||||||
LL | include!(concat!("NON_EXISTENT"suffix, "/data.rs"));
|
LL | include!(concat!("NON_EXISTENT"suffix, "/data.rs"));
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ invalid suffix `suffix`
|
| ^^^^^^^^^^^^^^^^^^^^ invalid suffix `suffix`
|
||||||
|
@ -33,14 +33,6 @@ help: consider importing this module instead
|
||||||
LL | use std::env;
|
LL | use std::env;
|
||||||
| ~~~~~~~~
|
| ~~~~~~~~
|
||||||
|
|
||||||
error: cannot determine resolution for the macro `env`
|
error: aborting due to 4 previous errors
|
||||||
--> $DIR/issue-55897.rs:6:22
|
|
||||||
|
|
|
||||||
LL | include!(concat!(env!("NON_EXISTENT"), "/data.rs"));
|
|
||||||
| ^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: aborting due to 5 previous errors
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0432`.
|
For more information about this error, try `rustc --explain E0432`.
|
||||||
|
|
|
@ -5,6 +5,5 @@
|
||||||
#![feature(custom_inner_attributes)]
|
#![feature(custom_inner_attributes)]
|
||||||
|
|
||||||
#![bench = "4100"]
|
#![bench = "4100"]
|
||||||
//~^ ERROR cannot determine resolution for the attribute macro `bench`
|
//~^ ERROR `bench` attribute cannot be used at crate level
|
||||||
//~^^ ERROR `bench` attribute cannot be used at crate level
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
error: cannot determine resolution for the attribute macro `bench`
|
|
||||||
--> $DIR/issue-43106-gating-of-bench.rs:7:4
|
|
||||||
|
|
|
||||||
LL | #![bench = "4100"]
|
|
||||||
| ^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: `bench` attribute cannot be used at crate level
|
error: `bench` attribute cannot be used at crate level
|
||||||
--> $DIR/issue-43106-gating-of-bench.rs:7:1
|
--> $DIR/issue-43106-gating-of-bench.rs:7:1
|
||||||
|
|
|
|
||||||
LL | #![bench = "4100"]
|
LL | #![bench = "4100"]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
LL |
|
||||||
LL | fn main() {}
|
LL | fn main() {}
|
||||||
| ---- the inner attribute doesn't annotate this function
|
| ---- the inner attribute doesn't annotate this function
|
||||||
|
|
|
|
||||||
|
@ -21,5 +13,5 @@ LL - #![bench = "4100"]
|
||||||
LL + #[bench = "4100"]
|
LL + #[bench = "4100"]
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,5 @@
|
||||||
|
|
||||||
#![allow(soft_unstable)]
|
#![allow(soft_unstable)]
|
||||||
#![test = "4200"]
|
#![test = "4200"]
|
||||||
//~^ ERROR cannot determine resolution for the attribute macro `test`
|
//~^ ERROR `test` attribute cannot be used at crate level
|
||||||
//~^^ ERROR `test` attribute cannot be used at crate level
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
error: cannot determine resolution for the attribute macro `test`
|
|
||||||
--> $DIR/issue-43106-gating-of-test.rs:4:4
|
|
||||||
|
|
|
||||||
LL | #![test = "4200"]
|
|
||||||
| ^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: `test` attribute cannot be used at crate level
|
error: `test` attribute cannot be used at crate level
|
||||||
--> $DIR/issue-43106-gating-of-test.rs:4:1
|
--> $DIR/issue-43106-gating-of-test.rs:4:1
|
||||||
|
|
|
|
||||||
LL | #![test = "4200"]
|
LL | #![test = "4200"]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
LL |
|
||||||
LL | fn main() {}
|
LL | fn main() {}
|
||||||
| ---- the inner attribute doesn't annotate this function
|
| ---- the inner attribute doesn't annotate this function
|
||||||
|
|
|
|
||||||
|
@ -21,5 +13,5 @@ LL - #![test = "4200"]
|
||||||
LL + #[test = "4200"]
|
LL + #[test = "4200"]
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// compile-flags: --test
|
// compile-flags: --test
|
||||||
|
|
||||||
#![allow(soft_unstable)]
|
#![allow(soft_unstable)]
|
||||||
#![test] //~ ERROR cannot determine resolution for the attribute macro `test`
|
#![test]
|
||||||
//~^ ERROR 4:1: 4:9: `test` attribute cannot be used at crate level
|
//~^ ERROR 4:1: 4:9: `test` attribute cannot be used at crate level
|
||||||
|
|
|
@ -1,11 +1,3 @@
|
||||||
error: cannot determine resolution for the attribute macro `test`
|
|
||||||
--> $DIR/issue-28134.rs:4:4
|
|
||||||
|
|
|
||||||
LL | #![test]
|
|
||||||
| ^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: `test` attribute cannot be used at crate level
|
error: `test` attribute cannot be used at crate level
|
||||||
--> $DIR/issue-28134.rs:4:1
|
--> $DIR/issue-28134.rs:4:1
|
||||||
|
|
|
|
||||||
|
@ -18,5 +10,5 @@ LL - #![test]
|
||||||
LL + #[test]
|
LL + #[test]
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
use NonExistent; //~ ERROR unresolved import `NonExistent`
|
use NonExistent; //~ ERROR unresolved import `NonExistent`
|
||||||
use non_existent::non_existent; //~ ERROR unresolved import `non_existent`
|
use non_existent::non_existent; //~ ERROR unresolved import `non_existent`
|
||||||
|
|
||||||
#[non_existent] //~ ERROR cannot determine resolution for the attribute macro `non_existent`
|
#[non_existent]
|
||||||
#[derive(NonExistent)] //~ ERROR cannot determine resolution for the derive macro `NonExistent`
|
#[derive(NonExistent)]
|
||||||
//~| ERROR cannot determine resolution for the derive macro `NonExistent`
|
|
||||||
//~| ERROR cannot determine resolution for the derive macro `NonExistent`
|
|
||||||
struct S;
|
struct S;
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -15,40 +15,6 @@ LL | use non_existent::non_existent;
|
||||||
|
|
|
|
||||||
= help: consider adding `extern crate non_existent` to use the `non_existent` crate
|
= help: consider adding `extern crate non_existent` to use the `non_existent` crate
|
||||||
|
|
||||||
error: cannot determine resolution for the derive macro `NonExistent`
|
error: aborting due to 2 previous errors
|
||||||
--> $DIR/issue-55457.rs:5:10
|
|
||||||
|
|
|
||||||
LL | #[derive(NonExistent)]
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot determine resolution for the attribute macro `non_existent`
|
|
||||||
--> $DIR/issue-55457.rs:4:3
|
|
||||||
|
|
|
||||||
LL | #[non_existent]
|
|
||||||
| ^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot determine resolution for the derive macro `NonExistent`
|
|
||||||
--> $DIR/issue-55457.rs:5:10
|
|
||||||
|
|
|
||||||
LL | #[derive(NonExistent)]
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
|
||||||
|
|
||||||
error: cannot determine resolution for the derive macro `NonExistent`
|
|
||||||
--> $DIR/issue-55457.rs:5:10
|
|
||||||
|
|
|
||||||
LL | #[derive(NonExistent)]
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
|
|
||||||
|
|
||||||
error: aborting due to 6 previous errors
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0432`.
|
For more information about this error, try `rustc --explain E0432`.
|
||||||
|
|
|
@ -128,7 +128,6 @@ use issue_59764::foo::makro;
|
||||||
//~^ ERROR unresolved import `issue_59764::foo::makro` [E0432]
|
//~^ ERROR unresolved import `issue_59764::foo::makro` [E0432]
|
||||||
|
|
||||||
makro!(bar);
|
makro!(bar);
|
||||||
//~^ ERROR cannot determine resolution for the macro `makro`
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
bar();
|
bar();
|
||||||
|
|
|
@ -226,21 +226,13 @@ help: a macro with this name exists at the root of the crate
|
||||||
LL | use issue_59764::makro;
|
LL | use issue_59764::makro;
|
||||||
| ~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: cannot determine resolution for the macro `makro`
|
|
||||||
--> $DIR/issue-59764.rs:130:1
|
|
||||||
|
|
|
||||||
LL | makro!(bar);
|
|
||||||
| ^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error[E0425]: cannot find function `bar` in this scope
|
error[E0425]: cannot find function `bar` in this scope
|
||||||
--> $DIR/issue-59764.rs:134:5
|
--> $DIR/issue-59764.rs:133:5
|
||||||
|
|
|
|
||||||
LL | bar();
|
LL | bar();
|
||||||
| ^^^ not found in this scope
|
| ^^^ not found in this scope
|
||||||
|
|
||||||
error: aborting due to 18 previous errors
|
error: aborting due to 17 previous errors
|
||||||
|
|
||||||
Some errors have detailed explanations: E0425, E0432.
|
Some errors have detailed explanations: E0425, E0432.
|
||||||
For more information about an error, try `rustc --explain E0425`.
|
For more information about an error, try `rustc --explain E0425`.
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate test_macros;
|
extern crate test_macros;
|
||||||
|
|
||||||
#[derive(Empty)] //~ ERROR cannot determine resolution for the attribute macro `derive`
|
#[derive(Empty)]
|
||||||
#[empty_helper] //~ ERROR cannot find attribute `empty_helper` in this scope
|
#[empty_helper] //~ ERROR cannot find attribute `empty_helper` in this scope
|
||||||
struct Foo {}
|
struct Foo {}
|
||||||
|
|
||||||
|
|
|
@ -4,19 +4,11 @@ error: cannot find attribute `dummy` in this scope
|
||||||
LL | #![dummy]
|
LL | #![dummy]
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: cannot determine resolution for the attribute macro `derive`
|
|
||||||
--> $DIR/derive-helper-legacy-spurious.rs:8:3
|
|
||||||
|
|
|
||||||
LL | #[derive(Empty)]
|
|
||||||
| ^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot find attribute `empty_helper` in this scope
|
error: cannot find attribute `empty_helper` in this scope
|
||||||
--> $DIR/derive-helper-legacy-spurious.rs:9:3
|
--> $DIR/derive-helper-legacy-spurious.rs:9:3
|
||||||
|
|
|
|
||||||
LL | #[empty_helper]
|
LL | #[empty_helper]
|
||||||
| ^^^^^^^^^^^^
|
| ^^^^^^^^^^^^
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
6
tests/ui/proc-macro/issue-118455-skip-err-builtin.rs
Normal file
6
tests/ui/proc-macro/issue-118455-skip-err-builtin.rs
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#![some_nonexistent_attribute]
|
||||||
|
//~^ ERROR cannot find attribute `some_nonexistent_attribute` in this scope
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct SomeUserCode;
|
||||||
|
|
||||||
|
fn main() {}
|
8
tests/ui/proc-macro/issue-118455-skip-err-builtin.stderr
Normal file
8
tests/ui/proc-macro/issue-118455-skip-err-builtin.stderr
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
error: cannot find attribute `some_nonexistent_attribute` in this scope
|
||||||
|
--> $DIR/issue-118455-skip-err-builtin.rs:1:4
|
||||||
|
|
|
||||||
|
LL | #![some_nonexistent_attribute]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
#[derive(Debug)] //~ ERROR `derive` attribute cannot be used at crate level
|
||||||
|
struct Test {}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,6 @@
|
||||||
|
// run-rustfix
|
||||||
|
|
||||||
|
#![derive(Debug)] //~ ERROR `derive` attribute cannot be used at crate level
|
||||||
|
struct Test {}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,16 @@
|
||||||
|
error: `derive` attribute cannot be used at crate level
|
||||||
|
--> $DIR/issue-89566-suggest-fix-invalid-top-level-macro-attr.rs:3:1
|
||||||
|
|
|
||||||
|
LL | #![derive(Debug)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
LL | struct Test {}
|
||||||
|
| ---- the inner attribute doesn't annotate this struct
|
||||||
|
|
|
||||||
|
help: perhaps you meant to use an outer attribute
|
||||||
|
|
|
||||||
|
LL - #![derive(Debug)]
|
||||||
|
LL + #[derive(Debug)]
|
||||||
|
|
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
|
@ -7,5 +7,5 @@ macro_rules! foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
foo!(); //~ ERROR cannot determine resolution for the macro `foo`
|
foo!();
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,19 +4,11 @@ error: attributes starting with `rustc` are reserved for use by the `rustc` comp
|
||||||
LL | #[rustc_attribute_should_be_reserved]
|
LL | #[rustc_attribute_should_be_reserved]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: cannot determine resolution for the macro `foo`
|
|
||||||
--> $DIR/reserved-attr-on-macro.rs:10:5
|
|
||||||
|
|
|
||||||
LL | foo!();
|
|
||||||
| ^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: cannot find attribute `rustc_attribute_should_be_reserved` in this scope
|
error: cannot find attribute `rustc_attribute_should_be_reserved` in this scope
|
||||||
--> $DIR/reserved-attr-on-macro.rs:1:3
|
--> $DIR/reserved-attr-on-macro.rs:1:3
|
||||||
|
|
|
|
||||||
LL | #[rustc_attribute_should_be_reserved]
|
LL | #[rustc_attribute_should_be_reserved]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,5 @@ use alloc::vec;
|
||||||
|
|
||||||
pub fn foo() {
|
pub fn foo() {
|
||||||
let mut xs = vec![];
|
let mut xs = vec![];
|
||||||
//~^ ERROR cannot determine resolution for the macro `vec`
|
|
||||||
xs.push(0);
|
xs.push(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,6 @@ error[E0432]: unresolved import `alloc`
|
||||||
LL | use alloc::vec;
|
LL | use alloc::vec;
|
||||||
| ^^^^^ help: a similar path exists: `core::alloc`
|
| ^^^^^ help: a similar path exists: `core::alloc`
|
||||||
|
|
||||||
error: cannot determine resolution for the macro `vec`
|
error: aborting due to 1 previous error
|
||||||
--> $DIR/issue-54006.rs:10:18
|
|
||||||
|
|
|
||||||
LL | let mut xs = vec![];
|
|
||||||
| ^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0432`.
|
For more information about this error, try `rustc --explain E0432`.
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
#![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
#![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||||
//~^ ERROR cannot determine resolution for the attribute macro `derive`
|
//~^ ERROR `derive` attribute cannot be used at crate level
|
||||||
//~^^ ERROR `derive` attribute cannot be used at crate level
|
|
||||||
struct DerivedOn;
|
struct DerivedOn;
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
error: cannot determine resolution for the attribute macro `derive`
|
|
||||||
--> $DIR/issue-43927-non-ADT-derive.rs:1:4
|
|
||||||
|
|
|
||||||
LL | #![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
|
||||||
| ^^^^^^
|
|
||||||
|
|
|
||||||
= note: import resolution is stuck, try simplifying macro imports
|
|
||||||
|
|
||||||
error: `derive` attribute cannot be used at crate level
|
error: `derive` attribute cannot be used at crate level
|
||||||
--> $DIR/issue-43927-non-ADT-derive.rs:1:1
|
--> $DIR/issue-43927-non-ADT-derive.rs:1:1
|
||||||
|
|
|
|
||||||
LL | #![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
LL | #![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
...
|
LL |
|
||||||
LL | struct DerivedOn;
|
LL | struct DerivedOn;
|
||||||
| --------- the inner attribute doesn't annotate this struct
|
| --------- the inner attribute doesn't annotate this struct
|
||||||
|
|
|
|
||||||
|
@ -21,5 +13,5 @@ LL - #![derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||||
LL + #[derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
LL + #[derive(Debug, PartialEq, Eq)] // should be an outer attribute!
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue