diff --git a/compiler/rustc_resolve/src/check_unused.rs b/compiler/rustc_resolve/src/check_unused.rs index 89ce89b2e9a94..9f4f2b82f6085 100644 --- a/compiler/rustc_resolve/src/check_unused.rs +++ b/compiler/rustc_resolve/src/check_unused.rs @@ -98,7 +98,7 @@ impl<'a, 'b> UnusedImportCheckVisitor<'a, 'b> { impl<'a, 'b> Visitor<'a> for UnusedImportCheckVisitor<'a, 'b> { fn visit_item(&mut self, item: &'a ast::Item) { - self.item_span = item.span; + self.item_span = item.span_with_attributes(); // Ignore is_public import statements because there's no way to be sure // whether they're used or not. Also ignore imports with a dummy span diff --git a/src/test/ui/imports/unused-import-issue-87973.fixed b/src/test/ui/imports/unused-import-issue-87973.fixed new file mode 100644 index 0000000000000..5c194d18aca36 --- /dev/null +++ b/src/test/ui/imports/unused-import-issue-87973.fixed @@ -0,0 +1,8 @@ +// run-rustfix +#![deny(unused_imports)] + +// Check that attributes get removed too. See #87973. + +//~^ ERROR unused import + +fn main() {} diff --git a/src/test/ui/imports/unused-import-issue-87973.rs b/src/test/ui/imports/unused-import-issue-87973.rs new file mode 100644 index 0000000000000..c31f0f9796ecf --- /dev/null +++ b/src/test/ui/imports/unused-import-issue-87973.rs @@ -0,0 +1,11 @@ +// run-rustfix +#![deny(unused_imports)] + +// Check that attributes get removed too. See #87973. +#[deprecated] +#[allow(unsafe_code)] +#[cfg(not(foo))] +use std::fs; +//~^ ERROR unused import + +fn main() {} diff --git a/src/test/ui/imports/unused-import-issue-87973.stderr b/src/test/ui/imports/unused-import-issue-87973.stderr new file mode 100644 index 0000000000000..81b7ea791912d --- /dev/null +++ b/src/test/ui/imports/unused-import-issue-87973.stderr @@ -0,0 +1,14 @@ +error: unused import: `std::fs` + --> $DIR/unused-import-issue-87973.rs:8:5 + | +LL | use std::fs; + | ^^^^^^^ + | +note: the lint level is defined here + --> $DIR/unused-import-issue-87973.rs:2:9 + | +LL | #![deny(unused_imports)] + | ^^^^^^^^^^^^^^ + +error: aborting due to previous error +