Skip to content

Commit

Permalink
dead_code: Properly inspect fields in struct patterns with type relat…
Browse files Browse the repository at this point in the history
…ive paths
  • Loading branch information
jakubadamw committed Aug 2, 2019
1 parent cf048cc commit 8235b6f
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/librustc/middle/dead.rs
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,9 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {

fn visit_pat(&mut self, pat: &'tcx hir::Pat) {
match pat.node {
PatKind::Struct(hir::QPath::Resolved(_, ref path), ref fields, _) => {
self.handle_field_pattern_match(pat, path.res, fields);
PatKind::Struct(ref path, ref fields, _) => {
let res = self.tables.qpath_res(path, pat.hir_id);
self.handle_field_pattern_match(pat, res, fields);
}
PatKind::Path(ref qpath @ hir::QPath::TypeRelative(..)) => {
let res = self.tables.qpath_res(qpath, pat.hir_id);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// check-pass

// Regression test for the issue #63151:
// Spurious unused field warning when matching variants under a `Self` scope
//
// This test checks that the `dead_code` lint properly inspects fields
// in struct patterns that use a type relative path.

#![deny(dead_code)]

enum Enum {
Variant { field: usize }
}

impl Enum {
fn read_field(self) -> usize {
match self {
Self::Variant { field } => field
}
}
}

fn main() {
let e = Enum::Variant { field: 42 };
println!("{}", e.read_field());
}

0 comments on commit 8235b6f

Please sign in to comment.