diff options
| author | bors <bors@rust-lang.org> | 2021-07-24 13:19:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-07-24 13:19:17 +0000 |
| commit | 18840b0719aa766a1bc49ea2eb5dc2e4cde7da3f (patch) | |
| tree | 5a2a6030e2f632bb5e06d57e6475c7b7074e3988 /src/test | |
| parent | f9b95f92c8af07a24a870e5f6117aa5dfcee5f17 (diff) | |
| parent | b41672eba8b0f06d2803cbd3bc2bd9ca7a8f2465 (diff) | |
| download | rust-18840b0719aa766a1bc49ea2eb5dc2e4cde7da3f.tar.gz rust-18840b0719aa766a1bc49ea2eb5dc2e4cde7da3f.zip | |
Auto merge of #87296 - Aaron1011:inert-warn, r=petrochenkov
Warn on inert attributes used on bang macro invocation
These attributes are currently discarded.
This may change in the future (see #63221), but for now,
placing inert attributes on a macro invocation does nothing,
so we should warn users about it.
Technically, it's possible for there to be attribute macro
on the same macro invocation (or at a higher scope), which
inspects the inert attribute. For example:
```rust
#[look_for_inline_attr]
#[inline]
my_macro!()
#[look_for_nested_inline]
mod foo { #[inline] my_macro!() }
```
However, this would be a very strange thing to do.
Anyone running into this can manually suppress the warning.
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/lint/inert-attr-macro.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/lint/inert-attr-macro.stderr | 44 | ||||
| -rw-r--r-- | src/test/ui/repr/repr-no-niche.rs | 14 |
3 files changed, 70 insertions, 8 deletions
diff --git a/src/test/ui/lint/inert-attr-macro.rs b/src/test/ui/lint/inert-attr-macro.rs new file mode 100644 index 00000000000..dc0bb8ac265 --- /dev/null +++ b/src/test/ui/lint/inert-attr-macro.rs @@ -0,0 +1,20 @@ +// check-pass + +#![warn(unused)] + +macro_rules! foo { + () => {} +} + +fn main() { + #[inline] foo!(); //~ WARN unused attribute `inline` + + // This does nothing, since `#[allow(warnings)]` is itself + // an inert attribute on a macro call + #[allow(warnings)] #[inline] foo!(); //~ WARN unused attribute `allow` + //~^ WARN unused attribute `inline` + + // This does work, since the attribute is on a parent + // of the macro invocation. + #[allow(warnings)] { #[inline] foo!(); } +} diff --git a/src/test/ui/lint/inert-attr-macro.stderr b/src/test/ui/lint/inert-attr-macro.stderr new file mode 100644 index 00000000000..3b3aa5d0bc0 --- /dev/null +++ b/src/test/ui/lint/inert-attr-macro.stderr @@ -0,0 +1,44 @@ +warning: unused attribute `inline` + --> $DIR/inert-attr-macro.rs:10:5 + | +LL | #[inline] foo!(); + | ^^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/inert-attr-macro.rs:3:9 + | +LL | #![warn(unused)] + | ^^^^^^ + = note: `#[warn(unused_attributes)]` implied by `#[warn(unused)]` +note: the built-in attribute `inline` will be ignored, since it's applied to the macro invocation `foo` + --> $DIR/inert-attr-macro.rs:10:15 + | +LL | #[inline] foo!(); + | ^^^ + +warning: unused attribute `allow` + --> $DIR/inert-attr-macro.rs:14:5 + | +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:14:34 + | +LL | #[allow(warnings)] #[inline] foo!(); + | ^^^ + +warning: unused attribute `inline` + --> $DIR/inert-attr-macro.rs:14:24 + | +LL | #[allow(warnings)] #[inline] foo!(); + | ^^^^^^^^^ + | +note: the built-in attribute `inline` will be ignored, since it's applied to the macro invocation `foo` + --> $DIR/inert-attr-macro.rs:14:34 + | +LL | #[allow(warnings)] #[inline] foo!(); + | ^^^ + +warning: 3 warnings emitted + diff --git a/src/test/ui/repr/repr-no-niche.rs b/src/test/ui/repr/repr-no-niche.rs index a7f0d509af5..2e6064aeb00 100644 --- a/src/test/ui/repr/repr-no-niche.rs +++ b/src/test/ui/repr/repr-no-niche.rs @@ -73,8 +73,7 @@ mod enum_inline { // general; this test is relying on that.) two_fifty_six_variant_enum!(Visible2, N8); - #[repr(no_niche)] - two_fifty_six_variant_enum!(Cloaked2, N8); + two_fifty_six_variant_enum!(#[repr(no_niche)] Cloaked2, N8); } mod enum_param { @@ -96,8 +95,7 @@ mod enum_param { // here as above (assuming `T` is instantiated with `NonZeroU8`). two_fifty_six_variant_enum!(Visible2<T>); - #[repr(no_niche)] - two_fifty_six_variant_enum!(Cloaked2<T>); + two_fifty_six_variant_enum!(#[repr(no_niche)] Cloaked2<T>); } fn main() { @@ -157,8 +155,8 @@ fn main() { } macro two_fifty_six_variant_enum { - ($name:ident<$param:ident>) => { - #[derive(Debug)] + ($(#[$attr:meta])* $name:ident<$param:ident>) => { + #[derive(Debug)] $(#[$attr])* pub enum $name<$param> { _V00($param, u16), _V01(u16, $param), _V02($param, u16), _V03(u16, $param), _V04($param, u16), _V05(u16, $param), _V06($param, u16), _V07(u16, $param), @@ -242,8 +240,8 @@ macro two_fifty_six_variant_enum { } }, - ($name:ident, $param:ty) => { - #[derive(Debug)] + ($(#[$attr:meta])* $name:ident, $param:ty) => { + #[derive(Debug)] $(#[$attr])* pub enum $name { _V00($param, u16), _V01(u16, $param), _V02($param, u16), _V03(u16, $param), _V04($param, u16), _V05(u16, $param), _V06($param, u16), _V07(u16, $param), |
