about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2019-03-13 03:33:53 +0100
committerGitHub <noreply@github.com>2019-03-13 03:33:53 +0100
commitb70a98f261d8cef1ba2b76a4d2d19b5076b04dbf (patch)
tree34ad4b328fc5d327a1a14b6496bcaefa1c524d80
parentf3dc0463628a492d74b2987bd4f0fbd224d24567 (diff)
parent2027459f77eb38450374367bc2335d5162cc1bcf (diff)
downloadrust-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.rs13
-rw-r--r--src/test/ui/lint/lint-dead-code-impl-trait.rs18
-rw-r--r--src/test/ui/lint/lint-dead-code-impl-trait.stderr14
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
+