Skip to content

Commit 10ed1f1

Browse files
committed
Fix false "never constructed" warnings for Self:: variant paths
1 parent fe6d05a commit 10ed1f1

File tree

3 files changed

+27
-13
lines changed

3 files changed

+27
-13
lines changed

src/librustc/middle/dead.rs

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

238238
fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
239239
match expr.node {
240-
hir::ExprKind::Path(ref qpath @ hir::QPath::TypeRelative(..)) => {
241-
let res = self.tables.qpath_res(qpath, expr.hir_id);
242-
self.handle_res(res);
243-
}
244240
hir::ExprKind::MethodCall(..) => {
245241
self.lookup_and_handle_method(expr.hir_id);
246242
}
@@ -280,10 +276,6 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
280276
let res = self.tables.qpath_res(path, pat.hir_id);
281277
self.handle_field_pattern_match(pat, res, fields);
282278
}
283-
PatKind::Path(ref qpath) => {
284-
let res = self.tables.qpath_res(qpath, pat.hir_id);
285-
self.handle_res(res);
286-
}
287279
_ => ()
288280
}
289281

@@ -292,9 +284,11 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> {
292284
self.in_pat = false;
293285
}
294286

295-
fn visit_path(&mut self, path: &'tcx hir::Path, _: hir::HirId) {
296-
self.handle_res(path.res);
297-
intravisit::walk_path(self, path);
287+
fn visit_qpath(&mut self, qpath: &'tcx hir::QPath,
288+
id: hir::HirId, span: syntax_pos::Span) {
289+
let res = self.tables.qpath_res(qpath, id);
290+
self.handle_res(res);
291+
intravisit::walk_qpath(self, qpath, id, span);
298292
}
299293

300294
fn visit_ty(&mut self, ty: &'tcx hir::Ty) {

src/test/ui/lint/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/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:1
26+
--> $DIR/lint-dead-code-5.rs:35:1
2727
|
2828
LL | enum Enum3 {
2929
| ^^^^^^^^^^

0 commit comments

Comments
 (0)