Skip to content

Commit eae5bbb

Browse files
jakubadamwseiyab
authored andcommitted
Fix false "never constructed" warnings for Self:: variant paths
1 parent 0753459 commit eae5bbb

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

src/librustc_passes/dead.rs

+5-11
Original file line numberDiff line numberDiff line change
@@ -245,10 +245,6 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
245245

246246
fn visit_expr(&mut self, expr: &'tcx hir::Expr<'tcx>) {
247247
match expr.kind {
248-
hir::ExprKind::Path(ref qpath @ hir::QPath::TypeRelative(..)) => {
249-
let res = self.tables.qpath_res(qpath, expr.hir_id);
250-
self.handle_res(res);
251-
}
252248
hir::ExprKind::MethodCall(..) => {
253249
self.lookup_and_handle_method(expr.hir_id);
254250
}
@@ -282,10 +278,6 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
282278
let res = self.tables.qpath_res(path, pat.hir_id);
283279
self.handle_field_pattern_match(pat, res, fields);
284280
}
285-
PatKind::Path(ref qpath) => {
286-
let res = self.tables.qpath_res(qpath, pat.hir_id);
287-
self.handle_res(res);
288-
}
289281
_ => (),
290282
}
291283

@@ -294,9 +286,11 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
294286
self.in_pat = false;
295287
}
296288

297-
fn visit_path(&mut self, path: &'tcx hir::Path<'tcx>, _: hir::HirId) {
298-
self.handle_res(path.res);
299-
intravisit::walk_path(self, path);
289+
fn visit_qpath(&mut self, qpath: &'tcx hir::QPath<'tcx>,
290+
id: hir::HirId, span: rustc_span::Span) {
291+
let res = self.tables.qpath_res(qpath, id);
292+
self.handle_res(res);
293+
intravisit::walk_qpath(self, qpath, id, span);
300294
}
301295

302296
fn visit_ty(&mut self, ty: &'tcx hir::Ty<'tcx>) {

src/test/ui/lint/dead-code/lint-dead-code-5.rs

+21-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,23 @@ enum Enum2 {
1313
Variant5 { _x: isize }, //~ ERROR: variant is never constructed: `Variant5`
1414
Variant6(isize), //~ ERROR: variant is never constructed: `Variant6`
1515
_Variant7,
16+
Variant8 { _field: bool },
17+
Variant9,
18+
Variant10(usize)
19+
}
20+
21+
impl Enum2 {
22+
fn new_variant8() -> Enum2 {
23+
Self::Variant8 { _field: true }
24+
}
25+
26+
fn new_variant9() -> Enum2 {
27+
Self::Variant9
28+
}
29+
30+
fn new_variant10() -> Enum2 {
31+
Self::Variant10(10)
32+
}
1633
}
1734

1835
enum Enum3 { //~ ERROR: enum is never used
@@ -26,5 +43,8 @@ fn main() {
2643
Enum1::Variant1(_) => (),
2744
Enum1::Variant2 => ()
2845
}
29-
let x = Enum2::Variant3(true);
46+
let _ = Enum2::Variant3(true);
47+
let _ = Enum2::new_variant8();
48+
let _ = Enum2::new_variant9();
49+
let _ = Enum2::new_variant10();
3050
}

src/test/ui/lint/dead-code/lint-dead-code-5.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ LL | Variant6(isize),
2323
| ^^^^^^^^^^^^^^^
2424

2525
error: enum is never used: `Enum3`
26-
--> $DIR/lint-dead-code-5.rs:18:6
26+
--> $DIR/lint-dead-code-5.rs:35:6
2727
|
2828
LL | enum Enum3 {
2929
| ^^^^^

0 commit comments

Comments
 (0)