Skip to content

Commit

Permalink
Do not mark unit variants as used when in path pattern
Browse files Browse the repository at this point in the history
Record that we are processing a pattern so that code responsible for
handling path resolution can correctly decide whether to mark it as
used or not.
  • Loading branch information
tmiasko committed Jan 23, 2021
1 parent 4153fa8 commit 99a1dea
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_passes/src/dead.rs
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
}

fn visit_pat(&mut self, pat: &'tcx hir::Pat<'tcx>) {
self.in_pat = true;
match pat.kind {
PatKind::Struct(ref path, ref fields, _) => {
let res = self.typeck_results().qpath_res(path, pat.hir_id);
Expand All @@ -302,7 +303,6 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
_ => (),
}

self.in_pat = true;
intravisit::walk_pat(self, pat);
self.in_pat = false;
}
Expand Down
21 changes: 20 additions & 1 deletion src/test/ui/lint/dead-code/const-and-self.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// check-pass

#![deny(dead_code)]
#![warn(dead_code)]

const TLC: usize = 4;

Expand Down Expand Up @@ -28,8 +28,27 @@ impl Foo<Y> for X {
}
}

enum E {
A,
B, //~ WARN variant is never constructed: `B`
C, //~ WARN variant is never constructed: `C`
}

type F = E;

impl E {
fn check(&self) -> bool {
match self {
Self::A => true,
Self::B => false,
F::C => false,
}
}
}

fn main() {
let s = [0,1,2,3];
s.doit();
X::foo();
E::A.check();
}
20 changes: 20 additions & 0 deletions src/test/ui/lint/dead-code/const-and-self.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
warning: variant is never constructed: `B`
--> $DIR/const-and-self.rs:33:5
|
LL | B,
| ^
|
note: the lint level is defined here
--> $DIR/const-and-self.rs:3:9
|
LL | #![warn(dead_code)]
| ^^^^^^^^^

warning: variant is never constructed: `C`
--> $DIR/const-and-self.rs:34:5
|
LL | C,
| ^

warning: 2 warnings emitted

0 comments on commit 99a1dea

Please sign in to comment.