Rollup merge of #81310 - tmiasko:in-pattern, r=petrochenkov
Do not mark unit variants as used when in path pattern 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. Closes #76788.
This commit is contained in:
commit
04ddf42218
3 changed files with 41 additions and 2 deletions
|
@ -290,6 +290,7 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_pat(&mut self, pat: &'tcx hir::Pat<'tcx>) {
|
fn visit_pat(&mut self, pat: &'tcx hir::Pat<'tcx>) {
|
||||||
|
self.in_pat = true;
|
||||||
match pat.kind {
|
match pat.kind {
|
||||||
PatKind::Struct(ref path, ref fields, _) => {
|
PatKind::Struct(ref path, ref fields, _) => {
|
||||||
let res = self.typeck_results().qpath_res(path, pat.hir_id);
|
let res = self.typeck_results().qpath_res(path, pat.hir_id);
|
||||||
|
@ -302,7 +303,6 @@ impl<'tcx> Visitor<'tcx> for MarkSymbolVisitor<'tcx> {
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
self.in_pat = true;
|
|
||||||
intravisit::walk_pat(self, pat);
|
intravisit::walk_pat(self, pat);
|
||||||
self.in_pat = false;
|
self.in_pat = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// check-pass
|
// check-pass
|
||||||
|
|
||||||
#![deny(dead_code)]
|
#![warn(dead_code)]
|
||||||
|
|
||||||
const TLC: usize = 4;
|
const TLC: usize = 4;
|
||||||
|
|
||||||
|
@ -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() {
|
fn main() {
|
||||||
let s = [0,1,2,3];
|
let s = [0,1,2,3];
|
||||||
s.doit();
|
s.doit();
|
||||||
X::foo();
|
X::foo();
|
||||||
|
E::A.check();
|
||||||
}
|
}
|
||||||
|
|
20
src/test/ui/lint/dead-code/const-and-self.stderr
Normal file
20
src/test/ui/lint/dead-code/const-and-self.stderr
Normal file
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue