Rollup merge of #145788 - JonathanBrouwer:proper-fix-for-macro-call-target, r=jdonszelmann
Fix attribute target checking for macro calls Fixes https://github.com/rust-lang/rust/issues/145779 r? `@jdonszelmann`
This commit is contained in:
commit
c38bbf5dfe
14 changed files with 337 additions and 59 deletions
|
|
@ -127,6 +127,7 @@ impl<S: Stage> SingleAttributeParser<S> for ExportNameParser {
|
|||
Warn(Target::Field),
|
||||
Warn(Target::Arm),
|
||||
Warn(Target::MacroDef),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
const TEMPLATE: AttributeTemplate = template!(NameValueStr: "name");
|
||||
|
||||
|
|
@ -174,6 +175,7 @@ impl<S: Stage> AttributeParser<S> for NakedParser {
|
|||
Allow(Target::Method(MethodKind::Inherent)),
|
||||
Allow(Target::Method(MethodKind::Trait { body: true })),
|
||||
Allow(Target::Method(MethodKind::TraitImpl)),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
|
||||
fn finalize(self, cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind> {
|
||||
|
|
@ -278,6 +280,7 @@ impl<S: Stage> NoArgsAttributeParser<S> for TrackCallerParser {
|
|||
Warn(Target::MacroDef),
|
||||
Warn(Target::Arm),
|
||||
Warn(Target::Field),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
const CREATE: fn(Span) -> AttributeKind = AttributeKind::TrackCaller;
|
||||
}
|
||||
|
|
@ -365,7 +368,8 @@ impl<S: Stage> AttributeParser<S> for UsedParser {
|
|||
}
|
||||
},
|
||||
)];
|
||||
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[Allow(Target::Static)]);
|
||||
const ALLOWED_TARGETS: AllowedTargets =
|
||||
AllowedTargets::AllowList(&[Allow(Target::Static), Warn(Target::MacroCall)]);
|
||||
|
||||
fn finalize(self, _cx: &FinalizeContext<'_, '_, S>) -> Option<AttributeKind> {
|
||||
// Ratcheting behaviour, if both `linker` and `compiler` are specified, use `linker`
|
||||
|
|
@ -450,6 +454,7 @@ impl<S: Stage> CombineAttributeParser<S> for TargetFeatureParser {
|
|||
Warn(Target::Field),
|
||||
Warn(Target::Arm),
|
||||
Warn(Target::MacroDef),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ impl<S: Stage> SingleAttributeParser<S> for InlineParser {
|
|||
Warn(Target::MacroDef),
|
||||
Warn(Target::Arm),
|
||||
Warn(Target::AssocConst),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
const TEMPLATE: AttributeTemplate = template!(
|
||||
Word,
|
||||
|
|
|
|||
|
|
@ -110,8 +110,11 @@ impl<S: Stage> SingleAttributeParser<S> for LinkOrdinalParser {
|
|||
const PATH: &[Symbol] = &[sym::link_ordinal];
|
||||
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
|
||||
const ALLOWED_TARGETS: AllowedTargets =
|
||||
AllowedTargets::AllowList(&[Allow(Target::ForeignFn), Allow(Target::ForeignStatic)]);
|
||||
const ALLOWED_TARGETS: AllowedTargets = AllowedTargets::AllowList(&[
|
||||
Allow(Target::ForeignFn),
|
||||
Allow(Target::ForeignStatic),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
const TEMPLATE: AttributeTemplate = template!(
|
||||
List: &["ordinal"],
|
||||
"https://doc.rust-lang.org/reference/items/external-blocks.html#the-link_ordinal-attribute"
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ impl<S: Stage> NoArgsAttributeParser<S> for NonExhaustiveParser {
|
|||
Warn(Target::Field),
|
||||
Warn(Target::Arm),
|
||||
Warn(Target::MacroDef),
|
||||
Warn(Target::MacroCall),
|
||||
]);
|
||||
const CREATE: fn(Span) -> AttributeKind = AttributeKind::NonExhaustive;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
use super::prelude::*;
|
||||
|
||||
const PROC_MACRO_ALLOWED_TARGETS: AllowedTargets =
|
||||
AllowedTargets::AllowList(&[Allow(Target::Fn), Warn(Target::Crate), Warn(Target::MacroCall)]);
|
||||
|
||||
pub(crate) struct ProcMacroParser;
|
||||
impl<S: Stage> NoArgsAttributeParser<S> for ProcMacroParser {
|
||||
const PATH: &[Symbol] = &[sym::proc_macro];
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
|
||||
const ALLOWED_TARGETS: AllowedTargets =
|
||||
AllowedTargets::AllowList(&[Allow(Target::Fn), Warn(Target::Crate)]);
|
||||
const ALLOWED_TARGETS: AllowedTargets = PROC_MACRO_ALLOWED_TARGETS;
|
||||
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ProcMacro;
|
||||
}
|
||||
|
||||
|
|
@ -13,8 +15,7 @@ pub(crate) struct ProcMacroAttributeParser;
|
|||
impl<S: Stage> NoArgsAttributeParser<S> for ProcMacroAttributeParser {
|
||||
const PATH: &[Symbol] = &[sym::proc_macro_attribute];
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
|
||||
const ALLOWED_TARGETS: AllowedTargets =
|
||||
AllowedTargets::AllowList(&[Allow(Target::Fn), Warn(Target::Crate)]);
|
||||
const ALLOWED_TARGETS: AllowedTargets = PROC_MACRO_ALLOWED_TARGETS;
|
||||
const CREATE: fn(Span) -> AttributeKind = AttributeKind::ProcMacroAttribute;
|
||||
}
|
||||
|
||||
|
|
@ -23,8 +24,7 @@ impl<S: Stage> SingleAttributeParser<S> for ProcMacroDeriveParser {
|
|||
const PATH: &[Symbol] = &[sym::proc_macro_derive];
|
||||
const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepOutermost;
|
||||
const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
|
||||
const ALLOWED_TARGETS: AllowedTargets =
|
||||
AllowedTargets::AllowList(&[Allow(Target::Fn), Warn(Target::Crate)]);
|
||||
const ALLOWED_TARGETS: AllowedTargets = PROC_MACRO_ALLOWED_TARGETS;
|
||||
const TEMPLATE: AttributeTemplate = template!(
|
||||
List: &["TraitName", "TraitName, attributes(name1, name2, ...)"],
|
||||
"https://doc.rust-lang.org/reference/procedural-macros.html#derive-macros"
|
||||
|
|
|
|||
|
|
@ -41,8 +41,14 @@ pub fn emit_attribute_lint<L: LintEmitter>(lint: &AttributeLint<L::Id>, lint_emi
|
|||
.emit_node_span_lint(
|
||||
// This check is here because `deprecated` had its own lint group and removing this would be a breaking change
|
||||
if name.segments[0].name == sym::deprecated
|
||||
&& ![Target::Closure, Target::Expression, Target::Statement, Target::Arm]
|
||||
.contains(target)
|
||||
&& ![
|
||||
Target::Closure,
|
||||
Target::Expression,
|
||||
Target::Statement,
|
||||
Target::Arm,
|
||||
Target::MacroCall,
|
||||
]
|
||||
.contains(target)
|
||||
{
|
||||
rustc_session::lint::builtin::USELESS_DEPRECATED
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -7,12 +7,12 @@ use rustc_ast::mut_visit::*;
|
|||
use rustc_ast::tokenstream::TokenStream;
|
||||
use rustc_ast::visit::{self, AssocCtxt, Visitor, VisitorResult, try_visit, walk_list};
|
||||
use rustc_ast::{
|
||||
self as ast, AssocItemKind, AstNodeWrapper, AttrArgs, AttrStyle, AttrVec, CRATE_NODE_ID,
|
||||
DUMMY_NODE_ID, ExprKind, ForeignItemKind, HasAttrs, HasNodeId, Inline, ItemKind, MacStmtStyle,
|
||||
MetaItemInner, MetaItemKind, ModKind, NodeId, PatKind, StmtKind, TyKind, token,
|
||||
self as ast, AssocItemKind, AstNodeWrapper, AttrArgs, AttrStyle, AttrVec, DUMMY_NODE_ID,
|
||||
ExprKind, ForeignItemKind, HasAttrs, HasNodeId, Inline, ItemKind, MacStmtStyle, MetaItemInner,
|
||||
MetaItemKind, ModKind, NodeId, PatKind, StmtKind, TyKind, token,
|
||||
};
|
||||
use rustc_ast_pretty::pprust;
|
||||
use rustc_attr_parsing::{AttributeParser, EvalConfigResult, ShouldEmit, validate_attr};
|
||||
use rustc_attr_parsing::{AttributeParser, Early, EvalConfigResult, ShouldEmit, validate_attr};
|
||||
use rustc_data_structures::flat_map_in_place::FlatMapInPlace;
|
||||
use rustc_data_structures::stack::ensure_sufficient_stack;
|
||||
use rustc_errors::PResult;
|
||||
|
|
@ -2165,7 +2165,7 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
|
|||
None,
|
||||
Target::MacroCall,
|
||||
call.span(),
|
||||
CRATE_NODE_ID,
|
||||
self.cx.current_expansion.lint_node_id,
|
||||
Some(self.cx.ecfg.features),
|
||||
ShouldEmit::ErrorsAndLints,
|
||||
);
|
||||
|
|
@ -2184,7 +2184,9 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
|
|||
self.cx.current_expansion.lint_node_id,
|
||||
BuiltinLintDiag::UnusedDocComment(attr.span),
|
||||
);
|
||||
} else if rustc_attr_parsing::is_builtin_attr(attr) {
|
||||
} else if rustc_attr_parsing::is_builtin_attr(attr)
|
||||
&& !AttributeParser::<Early>::is_parsed_attribute(&attr.path())
|
||||
{
|
||||
let attr_name = attr.ident().unwrap().name;
|
||||
// `#[cfg]` and `#[cfg_attr]` are special - they are
|
||||
// eagerly evaluated.
|
||||
|
|
|
|||
73
tests/ui/attributes/attr-on-mac-call.rs
Normal file
73
tests/ui/attributes/attr-on-mac-call.rs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
//@ check-pass
|
||||
// Regression test for https://github.com/rust-lang/rust/issues/145779
|
||||
#![warn(unused_attributes)]
|
||||
|
||||
fn main() {
|
||||
#[export_name = "x"]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[unsafe(naked)]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[track_caller]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[used]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[target_feature(enable = "x")]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[deprecated]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[inline]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[link_name = "x"]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[link_section = "x"]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[link_ordinal(42)]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[non_exhaustive]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[proc_macro]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[cold]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[no_mangle]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[deprecated]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[automatically_derived]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[macro_use]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[must_use]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[no_implicit_prelude]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[path = ""]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[ignore]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
#[should_panic]
|
||||
//~^ WARN attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
unreachable!();
|
||||
}
|
||||
205
tests/ui/attributes/attr-on-mac-call.stderr
Normal file
205
tests/ui/attributes/attr-on-mac-call.stderr
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
warning: `#[export_name]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:6:5
|
||||
|
|
||||
LL | #[export_name = "x"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[export_name]` can be applied to functions and statics
|
||||
note: the lint level is defined here
|
||||
--> $DIR/attr-on-mac-call.rs:3:9
|
||||
|
|
||||
LL | #![warn(unused_attributes)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: `#[naked]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:9:5
|
||||
|
|
||||
LL | #[unsafe(naked)]
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[naked]` can only be applied to functions
|
||||
|
||||
warning: `#[track_caller]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:12:5
|
||||
|
|
||||
LL | #[track_caller]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[track_caller]` can only be applied to functions
|
||||
|
||||
warning: `#[used]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:15:5
|
||||
|
|
||||
LL | #[used]
|
||||
| ^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[used]` can only be applied to statics
|
||||
|
||||
warning: `#[target_feature]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:18:5
|
||||
|
|
||||
LL | #[target_feature(enable = "x")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[target_feature]` can only be applied to functions
|
||||
|
||||
warning: `#[deprecated]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:21:5
|
||||
|
|
||||
LL | #[deprecated]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[deprecated]` can be applied to functions, data types, modules, unions, constants, statics, macro defs, type aliases, use statements, foreign statics, struct fields, traits, associated types, associated consts, enum variants, inherent impl blocks, and crates
|
||||
|
||||
warning: `#[inline]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:24:5
|
||||
|
|
||||
LL | #[inline]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[inline]` can only be applied to functions
|
||||
|
||||
warning: `#[link_name]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:27:5
|
||||
|
|
||||
LL | #[link_name = "x"]
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[link_name]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[link_section]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:30:5
|
||||
|
|
||||
LL | #[link_section = "x"]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[link_section]` can be applied to statics and functions
|
||||
|
||||
warning: `#[link_ordinal]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:33:5
|
||||
|
|
||||
LL | #[link_ordinal(42)]
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[link_ordinal]` can be applied to foreign functions and foreign statics
|
||||
|
||||
warning: `#[non_exhaustive]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:36:5
|
||||
|
|
||||
LL | #[non_exhaustive]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[non_exhaustive]` can be applied to data types and enum variants
|
||||
|
||||
warning: `#[proc_macro]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:39:5
|
||||
|
|
||||
LL | #[proc_macro]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[proc_macro]` can only be applied to functions
|
||||
|
||||
warning: `#[cold]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:42:5
|
||||
|
|
||||
LL | #[cold]
|
||||
| ^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[cold]` can only be applied to functions
|
||||
|
||||
warning: `#[no_mangle]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:45:5
|
||||
|
|
||||
LL | #[no_mangle]
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[no_mangle]` can be applied to functions and statics
|
||||
|
||||
warning: `#[deprecated]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:48:5
|
||||
|
|
||||
LL | #[deprecated]
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[deprecated]` can be applied to functions, data types, modules, unions, constants, statics, macro defs, type aliases, use statements, foreign statics, struct fields, traits, associated types, associated consts, enum variants, inherent impl blocks, and crates
|
||||
|
||||
warning: `#[automatically_derived]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:51:5
|
||||
|
|
||||
LL | #[automatically_derived]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[automatically_derived]` can only be applied to trait impl blocks
|
||||
|
||||
warning: `#[macro_use]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:54:5
|
||||
|
|
||||
LL | #[macro_use]
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[macro_use]` can be applied to modules, extern crates, and crates
|
||||
|
||||
warning: `#[must_use]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:57:5
|
||||
|
|
||||
LL | #[must_use]
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[must_use]` can be applied to functions, data types, unions, and traits
|
||||
|
||||
warning: `#[no_implicit_prelude]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:60:5
|
||||
|
|
||||
LL | #[no_implicit_prelude]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[no_implicit_prelude]` can be applied to modules and crates
|
||||
|
||||
warning: `#[path]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:63:5
|
||||
|
|
||||
LL | #[path = ""]
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[path]` can only be applied to modules
|
||||
|
||||
warning: `#[ignore]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:66:5
|
||||
|
|
||||
LL | #[ignore]
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[ignore]` can only be applied to functions
|
||||
|
||||
warning: `#[should_panic]` attribute cannot be used on macro calls
|
||||
--> $DIR/attr-on-mac-call.rs:69:5
|
||||
|
|
||||
LL | #[should_panic]
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[should_panic]` can only be applied to functions
|
||||
|
||||
warning: 22 warnings emitted
|
||||
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
//@ check-pass
|
||||
|
||||
#![feature(rustc_attrs)]
|
||||
#![warn(unused)]
|
||||
|
||||
macro_rules! foo {
|
||||
|
|
@ -8,16 +7,18 @@ macro_rules! foo {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
#[rustc_dummy] foo!(); //~ WARN unused attribute `rustc_dummy`
|
||||
#[inline] foo!(); //~ WARN `#[inline]` attribute cannot be used on macro calls
|
||||
//~^ WARN previously accepted
|
||||
|
||||
// This does nothing, since `#[allow(warnings)]` is itself
|
||||
// an inert attribute on a macro call
|
||||
#[allow(warnings)] #[rustc_dummy] foo!(); //~ WARN unused attribute `allow`
|
||||
//~^ WARN unused attribute `rustc_dummy`
|
||||
#[allow(warnings)] #[inline] foo!(); //~ WARN unused attribute `allow`
|
||||
//~^ WARN `#[inline]` attribute cannot be used on macro calls
|
||||
//~| WARN previously accepted
|
||||
|
||||
// This does work, since the attribute is on a parent
|
||||
// of the macro invocation.
|
||||
#[allow(warnings)] { #[rustc_dummy] foo!(); }
|
||||
#[allow(warnings)] { #[inline] foo!(); }
|
||||
|
||||
// Ok, `cfg` and `cfg_attr` are expanded eagerly and do not warn.
|
||||
#[cfg(true)] foo!();
|
||||
|
|
|
|||
|
|
@ -1,16 +1,13 @@
|
|||
warning: unused attribute `rustc_dummy`
|
||||
--> $DIR/inert-attr-macro.rs:11:5
|
||||
warning: `#[inline]` attribute cannot be used on macro calls
|
||||
--> $DIR/inert-attr-macro.rs:10:5
|
||||
|
|
||||
LL | #[rustc_dummy] foo!();
|
||||
| ^^^^^^^^^^^^^^
|
||||
LL | #[inline] foo!();
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: the built-in attribute `rustc_dummy` will be ignored, since it's applied to the macro invocation `foo`
|
||||
--> $DIR/inert-attr-macro.rs:11:20
|
||||
|
|
||||
LL | #[rustc_dummy] foo!();
|
||||
| ^^^
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[inline]` can only be applied to functions
|
||||
note: the lint level is defined here
|
||||
--> $DIR/inert-attr-macro.rs:4:9
|
||||
--> $DIR/inert-attr-macro.rs:3:9
|
||||
|
|
||||
LL | #![warn(unused)]
|
||||
| ^^^^^^
|
||||
|
|
@ -19,26 +16,23 @@ LL | #![warn(unused)]
|
|||
warning: unused attribute `allow`
|
||||
--> $DIR/inert-attr-macro.rs:15:5
|
||||
|
|
||||
LL | #[allow(warnings)] #[rustc_dummy] foo!();
|
||||
LL | #[allow(warnings)] #[inline] foo!();
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: the built-in attribute `allow` will be ignored, since it's applied to the macro invocation `foo`
|
||||
--> $DIR/inert-attr-macro.rs:15:39
|
||||
--> $DIR/inert-attr-macro.rs:15:34
|
||||
|
|
||||
LL | #[allow(warnings)] #[rustc_dummy] foo!();
|
||||
| ^^^
|
||||
LL | #[allow(warnings)] #[inline] foo!();
|
||||
| ^^^
|
||||
|
||||
warning: unused attribute `rustc_dummy`
|
||||
warning: `#[inline]` attribute cannot be used on macro calls
|
||||
--> $DIR/inert-attr-macro.rs:15:24
|
||||
|
|
||||
LL | #[allow(warnings)] #[rustc_dummy] foo!();
|
||||
| ^^^^^^^^^^^^^^
|
||||
LL | #[allow(warnings)] #[inline] foo!();
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
note: the built-in attribute `rustc_dummy` will be ignored, since it's applied to the macro invocation `foo`
|
||||
--> $DIR/inert-attr-macro.rs:15:39
|
||||
|
|
||||
LL | #[allow(warnings)] #[rustc_dummy] foo!();
|
||||
| ^^^
|
||||
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
|
||||
= help: `#[inline]` can only be applied to functions
|
||||
|
||||
warning: 3 warnings emitted
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,6 @@ extern "Rust" {
|
|||
fn foreign_foo() -> i64;
|
||||
}
|
||||
|
||||
//~ ERROR unused attribute
|
||||
//~^ ERROR `#[must_use]` attribute cannot be used on macro calls
|
||||
//~| WARN this was previously accepted by the compiler but is being phased out
|
||||
global_asm!("");
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ extern "Rust" {
|
|||
fn foreign_foo() -> i64;
|
||||
}
|
||||
|
||||
#[must_use] //~ ERROR unused attribute
|
||||
#[must_use]
|
||||
//~^ ERROR `#[must_use]` attribute cannot be used on macro calls
|
||||
//~| WARN this was previously accepted by the compiler but is being phased out
|
||||
global_asm!("");
|
||||
|
|
|
|||
|
|
@ -12,18 +12,6 @@ note: the lint level is defined here
|
|||
LL | #![deny(unused_attributes, unused_must_use)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: unused attribute `must_use`
|
||||
--> $DIR/unused_attributes-must_use.rs:68:1
|
||||
|
|
||||
LL | #[must_use]
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
note: the built-in attribute `must_use` will be ignored, since it's applied to the macro invocation `global_asm`
|
||||
--> $DIR/unused_attributes-must_use.rs:71:1
|
||||
|
|
||||
LL | global_asm!("");
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: `#[must_use]` attribute cannot be used on extern crates
|
||||
--> $DIR/unused_attributes-must_use.rs:7:1
|
||||
|
|
||||
|
|
@ -295,5 +283,5 @@ help: use `let _ = ...` to ignore the resulting value
|
|||
LL | let _ = ().get_four();
|
||||
| +++++++
|
||||
|
||||
error: aborting due to 30 previous errors
|
||||
error: aborting due to 29 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue