From 6a065f78c43c8ee8f0a9a0607eb33f8e23ed69f9 Mon Sep 17 00:00:00 2001 From: Kitsu Date: Fri, 21 Oct 2022 12:50:28 +0300 Subject: [PATCH 1/2] Fix unreachable_pub suggestion for enum with fields --- compiler/rustc_lint/src/builtin.rs | 8 ++++++-- src/test/ui/lint/issue-103317.rs | 13 +++++++++++++ src/test/ui/lint/issue-103317.stderr | 17 +++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/test/ui/lint/issue-103317.rs create mode 100644 src/test/ui/lint/issue-103317.stderr diff --git a/compiler/rustc_lint/src/builtin.rs b/compiler/rustc_lint/src/builtin.rs index 886e25f2d788b..dfd664521899a 100644 --- a/compiler/rustc_lint/src/builtin.rs +++ b/compiler/rustc_lint/src/builtin.rs @@ -40,7 +40,7 @@ use rustc_feature::{deprecated_attributes, AttributeGate, BuiltinAttribute, Gate use rustc_hir as hir; use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, LocalDefId, LocalDefIdSet, CRATE_DEF_ID}; -use rustc_hir::{ForeignItemKind, GenericParamKind, HirId, PatKind, PredicateOrigin}; +use rustc_hir::{ForeignItemKind, GenericParamKind, HirId, Node, PatKind, PredicateOrigin}; use rustc_index::vec::Idx; use rustc_middle::lint::in_external_macro; use rustc_middle::ty::layout::{LayoutError, LayoutOf}; @@ -1430,7 +1430,11 @@ impl<'tcx> LateLintPass<'tcx> for UnreachablePub { } fn check_field_def(&mut self, cx: &LateContext<'_>, field: &hir::FieldDef<'_>) { - let def_id = cx.tcx.hir().local_def_id(field.hir_id); + let map = cx.tcx.hir(); + let def_id = map.local_def_id(field.hir_id); + if matches!(map.get(map.get_parent_node(field.hir_id)), Node::Variant(_)) { + return; + } self.perform_lint(cx, "field", def_id, field.vis_span, false); } diff --git a/src/test/ui/lint/issue-103317.rs b/src/test/ui/lint/issue-103317.rs new file mode 100644 index 0000000000000..b39b441a0cf35 --- /dev/null +++ b/src/test/ui/lint/issue-103317.rs @@ -0,0 +1,13 @@ +// check-pass + +#[warn(unreachable_pub)] +#[allow(unused)] +mod inner { + pub enum T { + //~^ WARN unreachable `pub` item + A(u8), + X { a: f32, b: () }, + } +} + +fn main() {} diff --git a/src/test/ui/lint/issue-103317.stderr b/src/test/ui/lint/issue-103317.stderr new file mode 100644 index 0000000000000..9fdd6a570e6ff --- /dev/null +++ b/src/test/ui/lint/issue-103317.stderr @@ -0,0 +1,17 @@ +warning: unreachable `pub` item + --> $DIR/issue-103317.rs:6:5 + | +LL | pub enum T { + | ---^^^^^^^ + | | + | help: consider restricting its visibility: `pub(crate)` + | + = help: or consider exporting it for use by other crates +note: the lint level is defined here + --> $DIR/issue-103317.rs:3:8 + | +LL | #[warn(unreachable_pub)] + | ^^^^^^^^^^^^^^^ + +warning: 1 warning emitted + From 137271ad73585428bf0a69271a888f81c254c8c4 Mon Sep 17 00:00:00 2001 From: Kitsu Date: Sat, 29 Oct 2022 18:44:24 +0300 Subject: [PATCH 2/2] Run rustfix test for 103317 case --- src/test/ui/lint/issue-103317.fixed | 14 ++++++++++++++ src/test/ui/lint/issue-103317.rs | 3 ++- src/test/ui/lint/issue-103317.stderr | 4 ++-- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 src/test/ui/lint/issue-103317.fixed diff --git a/src/test/ui/lint/issue-103317.fixed b/src/test/ui/lint/issue-103317.fixed new file mode 100644 index 0000000000000..5a987423e5b95 --- /dev/null +++ b/src/test/ui/lint/issue-103317.fixed @@ -0,0 +1,14 @@ +// check-pass +// run-rustfix + +#[warn(unreachable_pub)] +mod inner { + #[allow(unused)] + pub(crate) enum T { + //~^ WARN unreachable `pub` item + A(u8), + X { a: f32, b: () }, + } +} + +fn main() {} diff --git a/src/test/ui/lint/issue-103317.rs b/src/test/ui/lint/issue-103317.rs index b39b441a0cf35..c2ba939e13c6f 100644 --- a/src/test/ui/lint/issue-103317.rs +++ b/src/test/ui/lint/issue-103317.rs @@ -1,8 +1,9 @@ // check-pass +// run-rustfix #[warn(unreachable_pub)] -#[allow(unused)] mod inner { + #[allow(unused)] pub enum T { //~^ WARN unreachable `pub` item A(u8), diff --git a/src/test/ui/lint/issue-103317.stderr b/src/test/ui/lint/issue-103317.stderr index 9fdd6a570e6ff..9c982ddc3464a 100644 --- a/src/test/ui/lint/issue-103317.stderr +++ b/src/test/ui/lint/issue-103317.stderr @@ -1,5 +1,5 @@ warning: unreachable `pub` item - --> $DIR/issue-103317.rs:6:5 + --> $DIR/issue-103317.rs:7:5 | LL | pub enum T { | ---^^^^^^^ @@ -8,7 +8,7 @@ LL | pub enum T { | = help: or consider exporting it for use by other crates note: the lint level is defined here - --> $DIR/issue-103317.rs:3:8 + --> $DIR/issue-103317.rs:4:8 | LL | #[warn(unreachable_pub)] | ^^^^^^^^^^^^^^^