diff options
| author | kennytm <kennytm@gmail.com> | 2017-11-01 13:32:14 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-01 13:32:14 +0800 |
| commit | cf0fe06bb9d0d5bb8200ec752a9b51bf746d3f5a (patch) | |
| tree | 28c25ea21d61e3b85ddc2f14db824d45f08f3016 /src | |
| parent | 26af3e1c4ec460703da391af037bf8c2999ea61f (diff) | |
| parent | b67d72b4345822de3172ddcd83e95ceab0b8d6b2 (diff) | |
| download | rust-cf0fe06bb9d0d5bb8200ec752a9b51bf746d3f5a.tar.gz rust-cf0fe06bb9d0d5bb8200ec752a9b51bf746d3f5a.zip | |
Rollup merge of #45646 - sinkuu:dead-code-alias-in-pat, r=arielb1
Count type aliases used in patterns as usage by dead_code lint Fixes #45614.
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc/middle/dead.rs | 12 | ||||
| -rw-r--r-- | src/test/run-pass/dead-code-alias-in-pat.rs | 18 |
2 files changed, 24 insertions, 6 deletions
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index a9d9f6f28ec..259794e9d0e 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -51,7 +51,7 @@ struct MarkSymbolVisitor<'a, 'tcx: 'a> { tables: &'a ty::TypeckTables<'tcx>, live_symbols: Box<FxHashSet<ast::NodeId>>, struct_has_extern_repr: bool, - ignore_non_const_paths: bool, + in_pat: bool, inherited_pub_visibility: bool, ignore_variant_stack: Vec<DefId>, } @@ -75,10 +75,10 @@ impl<'a, 'tcx> MarkSymbolVisitor<'a, 'tcx> { fn handle_definition(&mut self, def: Def) { match def { - Def::Const(_) | Def::AssociatedConst(..) => { + Def::Const(_) | Def::AssociatedConst(..) | Def::TyAlias(_) => { self.check_def_id(def.def_id()); } - _ if self.ignore_non_const_paths => (), + _ if self.in_pat => (), Def::PrimTy(..) | Def::SelfTy(..) | Def::Local(..) | Def::Upvar(..) => {} Def::Variant(variant_id) | Def::VariantCtor(variant_id, ..) => { @@ -289,9 +289,9 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> { _ => () } - self.ignore_non_const_paths = true; + self.in_pat = true; intravisit::walk_pat(self, pat); - self.ignore_non_const_paths = false; + self.in_pat = false; } fn visit_path(&mut self, path: &'tcx hir::Path, _: ast::NodeId) { @@ -429,7 +429,7 @@ fn find_live<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, tables: &ty::TypeckTables::empty(None), live_symbols: box FxHashSet(), struct_has_extern_repr: false, - ignore_non_const_paths: false, + in_pat: false, inherited_pub_visibility: false, ignore_variant_stack: vec![], }; diff --git a/src/test/run-pass/dead-code-alias-in-pat.rs b/src/test/run-pass/dead-code-alias-in-pat.rs new file mode 100644 index 00000000000..a37d671e5c1 --- /dev/null +++ b/src/test/run-pass/dead-code-alias-in-pat.rs @@ -0,0 +1,18 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![deny(dead_code)] + +fn main() { + struct Foo<T> { x: T } + type Bar = Foo<u32>; + let spam = |Bar { x }| x != 0; + println!("{}", spam(Foo { x: 10 })); +} |
