diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-03-13 03:33:53 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-13 03:33:53 +0100 |
| commit | b70a98f261d8cef1ba2b76a4d2d19b5076b04dbf (patch) | |
| tree | 34ad4b328fc5d327a1a14b6496bcaefa1c524d80 | |
| parent | f3dc0463628a492d74b2987bd4f0fbd224d24567 (diff) | |
| parent | 2027459f77eb38450374367bc2335d5162cc1bcf (diff) | |
| download | rust-b70a98f261d8cef1ba2b76a4d2d19b5076b04dbf.tar.gz rust-b70a98f261d8cef1ba2b76a4d2d19b5076b04dbf.zip | |
Rollup merge of #59129 - sanxiyn:visit-impl-trait, r=varkor
Visit impl Trait for dead_code lint Fix #59085.
| -rw-r--r-- | src/librustc/middle/dead.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/lint/lint-dead-code-impl-trait.rs | 18 | ||||
| -rw-r--r-- | src/test/ui/lint/lint-dead-code-impl-trait.stderr | 14 |
3 files changed, 44 insertions, 1 deletions
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs index 8ffd119f95c..94de999c25d 100644 --- a/src/librustc/middle/dead.rs +++ b/src/librustc/middle/dead.rs @@ -3,7 +3,7 @@ // from live codes are live, and everything else is dead. use crate::hir::Node; -use crate::hir::{self, PatKind}; +use crate::hir::{self, PatKind, TyKind}; use crate::hir::intravisit::{self, Visitor, NestedVisitorMap}; use crate::hir::itemlikevisit::ItemLikeVisitor; @@ -282,6 +282,17 @@ impl<'a, 'tcx> Visitor<'tcx> for MarkSymbolVisitor<'a, 'tcx> { self.handle_definition(path.def); intravisit::walk_path(self, path); } + + fn visit_ty(&mut self, ty: &'tcx hir::Ty) { + match ty.node { + TyKind::Def(item_id, _) => { + let item = self.tcx.hir().expect_item(item_id.id); + intravisit::walk_item(self, item); + } + _ => () + } + intravisit::walk_ty(self, ty); + } } fn has_allow_dead_code_or_lang_attr(tcx: TyCtxt<'_, '_, '_>, diff --git a/src/test/ui/lint/lint-dead-code-impl-trait.rs b/src/test/ui/lint/lint-dead-code-impl-trait.rs new file mode 100644 index 00000000000..a2736d97308 --- /dev/null +++ b/src/test/ui/lint/lint-dead-code-impl-trait.rs @@ -0,0 +1,18 @@ +#![deny(dead_code)] + +trait Trait { + type Type; +} + +impl Trait for () { + type Type = (); +} + +type Used = (); +type Unused = (); //~ ERROR type alias is never used + +fn foo() -> impl Trait<Type = Used> {} + +fn main() { + foo(); +} diff --git a/src/test/ui/lint/lint-dead-code-impl-trait.stderr b/src/test/ui/lint/lint-dead-code-impl-trait.stderr new file mode 100644 index 00000000000..61d0954bf31 --- /dev/null +++ b/src/test/ui/lint/lint-dead-code-impl-trait.stderr @@ -0,0 +1,14 @@ +error: type alias is never used: `Unused` + --> $DIR/lint-dead-code-impl-trait.rs:12:1 + | +LL | type Unused = (); + | ^^^^^^^^^^^^^^^^^ + | +note: lint level defined here + --> $DIR/lint-dead-code-impl-trait.rs:1:9 + | +LL | #![deny(dead_code)] + | ^^^^^^^^^ + +error: aborting due to previous error + |
