about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJonas Schievink <jonasschievink@gmail.com>2018-10-04 12:38:06 +0200
committerJonas Schievink <jonasschievink@gmail.com>2018-10-04 14:14:14 +0200
commit3c46da8c82dbf1b92a3300b092ef3cc563a5181b (patch)
tree4c1c2b0f968542bc0e1cf84a134956514c76de60
parent088fc7384c1ac3f7670d66880c7dcc0ec9160c79 (diff)
downloadrust-3c46da8c82dbf1b92a3300b092ef3cc563a5181b.tar.gz
rust-3c46da8c82dbf1b92a3300b092ef3cc563a5181b.zip
Fix dead code lint for functions using impl Trait
-rw-r--r--src/librustc/middle/dead.rs8
-rw-r--r--src/test/run-pass/async-await.stderr14
-rw-r--r--src/test/run-pass/impl-trait/existential-minimal.stderr8
-rw-r--r--src/test/run-pass/impl-trait/issue-42479.stderr14
-rw-r--r--src/test/run-pass/impl-trait/issue-49376.stderr32
-rw-r--r--src/test/run-pass/issues/issue-49556.stderr8
-rw-r--r--src/test/run-pass/traits/conservative_impl_trait.stderr8
-rw-r--r--src/test/ui/lint/lint-dead-code-1.rs4
-rw-r--r--src/test/ui/lint/lint-dead-code-1.stderr8
9 files changed, 102 insertions, 2 deletions
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs
index 66305ae8836..5ec4ba20423 100644
--- a/src/librustc/middle/dead.rs
+++ b/src/librustc/middle/dead.rs
@@ -395,7 +395,13 @@ fn create_and_seed_worklist<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
                                       krate: &hir::Crate)
                                       -> Vec<ast::NodeId>
 {
-    let worklist = access_levels.map.iter().map(|(&id, _)| id).chain(
+    let worklist = access_levels.map.iter().filter_map(|(&id, level)| {
+        if level >= &privacy::AccessLevel::Reachable {
+            Some(id)
+        } else {
+            None
+        }
+    }).chain(
         // Seed entry point
         tcx.sess.entry_fn.borrow().map(|(id, _, _)| id)
     ).collect::<Vec<_>>();
diff --git a/src/test/run-pass/async-await.stderr b/src/test/run-pass/async-await.stderr
new file mode 100644
index 00000000000..b0bdf17cecd
--- /dev/null
+++ b/src/test/run-pass/async-await.stderr
@@ -0,0 +1,14 @@
+warning: struct is never constructed: `Foo`
+  --> $DIR/async-await.rs:122:1
+   |
+LL | struct Foo;
+   | ^^^^^^^^^^^
+   |
+   = note: #[warn(dead_code)] on by default
+
+warning: method is never used: `async_method`
+  --> $DIR/async-await.rs:129:5
+   |
+LL |     async fn async_method(x: u8) -> u8 {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
diff --git a/src/test/run-pass/impl-trait/existential-minimal.stderr b/src/test/run-pass/impl-trait/existential-minimal.stderr
new file mode 100644
index 00000000000..dd1f7497886
--- /dev/null
+++ b/src/test/run-pass/impl-trait/existential-minimal.stderr
@@ -0,0 +1,8 @@
+warning: function is never used: `foo`
+  --> $DIR/existential-minimal.rs:15:1
+   |
+LL | fn foo() -> impl std::fmt::Debug { "cake" }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: #[warn(dead_code)] on by default
+
diff --git a/src/test/run-pass/impl-trait/issue-42479.stderr b/src/test/run-pass/impl-trait/issue-42479.stderr
new file mode 100644
index 00000000000..5a6a3031d0b
--- /dev/null
+++ b/src/test/run-pass/impl-trait/issue-42479.stderr
@@ -0,0 +1,14 @@
+warning: struct is never constructed: `Foo`
+  --> $DIR/issue-42479.rs:15:1
+   |
+LL | struct Foo {
+   | ^^^^^^^^^^
+   |
+   = note: #[warn(dead_code)] on by default
+
+warning: method is never used: `inside`
+  --> $DIR/issue-42479.rs:20:5
+   |
+LL |     fn inside(&self) -> impl Iterator<Item = &i32> {
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
diff --git a/src/test/run-pass/impl-trait/issue-49376.stderr b/src/test/run-pass/impl-trait/issue-49376.stderr
new file mode 100644
index 00000000000..f5f36002b42
--- /dev/null
+++ b/src/test/run-pass/impl-trait/issue-49376.stderr
@@ -0,0 +1,32 @@
+warning: function is never used: `gen`
+  --> $DIR/issue-49376.rs:18:1
+   |
+LL | fn gen() -> impl PartialOrd + PartialEq + Debug { }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: #[warn(dead_code)] on by default
+
+warning: struct is never constructed: `Bar`
+  --> $DIR/issue-49376.rs:20:1
+   |
+LL | struct Bar {}
+   | ^^^^^^^^^^
+
+warning: function is never used: `foo`
+  --> $DIR/issue-49376.rs:24:1
+   |
+LL | fn foo() -> impl Foo {
+   | ^^^^^^^^^^^^^^^^^^^^
+
+warning: function is never used: `test_impl_ops`
+  --> $DIR/issue-49376.rs:28:1
+   |
+LL | fn test_impl_ops() -> impl Add + Sub + Mul + Div { 1 }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: function is never used: `test_impl_assign_ops`
+  --> $DIR/issue-49376.rs:29:1
+   |
+LL | fn test_impl_assign_ops() -> impl AddAssign + SubAssign + MulAssign + DivAssign { 1 }
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
diff --git a/src/test/run-pass/issues/issue-49556.stderr b/src/test/run-pass/issues/issue-49556.stderr
new file mode 100644
index 00000000000..8657d4ac2f2
--- /dev/null
+++ b/src/test/run-pass/issues/issue-49556.stderr
@@ -0,0 +1,8 @@
+warning: function is never used: `iter`
+  --> $DIR/issue-49556.rs:12:1
+   |
+LL | fn iter<'a>(data: &'a [usize]) -> impl Iterator<Item = usize> + 'a {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: #[warn(dead_code)] on by default
+
diff --git a/src/test/run-pass/traits/conservative_impl_trait.stderr b/src/test/run-pass/traits/conservative_impl_trait.stderr
new file mode 100644
index 00000000000..26c29bf2bb2
--- /dev/null
+++ b/src/test/run-pass/traits/conservative_impl_trait.stderr
@@ -0,0 +1,8 @@
+warning: function is never used: `batches`
+  --> $DIR/conservative_impl_trait.rs:14:1
+   |
+LL | fn batches(n: &u32) -> impl Iterator<Item=&u32> {
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+   = note: #[warn(dead_code)] on by default
+
diff --git a/src/test/ui/lint/lint-dead-code-1.rs b/src/test/ui/lint/lint-dead-code-1.rs
index 2fe72365bab..944d57b5ba8 100644
--- a/src/test/ui/lint/lint-dead-code-1.rs
+++ b/src/test/ui/lint/lint-dead-code-1.rs
@@ -109,6 +109,10 @@ fn bar() { //~ ERROR: function is never used
     foo();
 }
 
+fn baz() -> impl Copy { //~ ERROR: function is never used
+    "I'm unused, too"
+}
+
 // Code with #[allow(dead_code)] should be marked live (and thus anything it
 // calls is marked live)
 #[allow(dead_code)]
diff --git a/src/test/ui/lint/lint-dead-code-1.stderr b/src/test/ui/lint/lint-dead-code-1.stderr
index 9802b7e8f38..9d8e44c25d8 100644
--- a/src/test/ui/lint/lint-dead-code-1.stderr
+++ b/src/test/ui/lint/lint-dead-code-1.stderr
@@ -58,5 +58,11 @@ error: function is never used: `bar`
 LL | fn bar() { //~ ERROR: function is never used
    | ^^^^^^^^
 
-error: aborting due to 9 previous errors
+error: function is never used: `baz`
+  --> $DIR/lint-dead-code-1.rs:112:1
+   |
+LL | fn baz() -> impl Copy { //~ ERROR: function is never used
+   | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 10 previous errors