about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2018-10-07 19:30:24 +0000
committerbors <bors@rust-lang.org>2018-10-07 19:30:24 +0000
commitb2d6ea98b0db53889c5427e5a23cddb3bcb63040 (patch)
treebd63322b8fb1b86ea70912c2d81a79d7633f4afb
parent0ee045ea09127e5318e9cb1fff85ec34b9e3e6eb (diff)
parente24f4d57b01be3eb3b36c49385cbe89e096586bc (diff)
downloadrust-b2d6ea98b0db53889c5427e5a23cddb3bcb63040.tar.gz
rust-b2d6ea98b0db53889c5427e5a23cddb3bcb63040.zip
Auto merge of #54810 - 1aim:unused-impl-trait, r=oli-obk
Fix dead code lint for functions using impl Trait

Fixes https://github.com/rust-lang/rust/issues/54754

This is a minimal fix that doesn't add any new queries or touches unnecessary code. Please nominate for beta backport if wanted.
-rw-r--r--src/librustc/middle/dead.rs8
-rw-r--r--src/test/run-pass/async-await.rs1
-rw-r--r--src/test/ui/impl-trait/existential-minimal.rs (renamed from src/test/run-pass/impl-trait/existential-minimal.rs)2
-rw-r--r--src/test/ui/impl-trait/issue-42479.rs (renamed from src/test/run-pass/impl-trait/issue-42479.rs)2
-rw-r--r--src/test/ui/impl-trait/issue-49376.rs (renamed from src/test/run-pass/impl-trait/issue-49376.rs)2
-rw-r--r--src/test/ui/issue-49556.rs (renamed from src/test/run-pass/issues/issue-49556.rs)2
-rw-r--r--src/test/ui/lint/lint-dead-code-1.rs4
-rw-r--r--src/test/ui/lint/lint-dead-code-1.stderr8
-rw-r--r--src/test/ui/traits/conservative_impl_trait.rs (renamed from src/test/run-pass/traits/conservative_impl_trait.rs)2
9 files changed, 24 insertions, 7 deletions
diff --git a/src/librustc/middle/dead.rs b/src/librustc/middle/dead.rs
index 2ac185b681e..ea90922b110 100644
--- a/src/librustc/middle/dead.rs
+++ b/src/librustc/middle/dead.rs
@@ -398,7 +398,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.rs b/src/test/run-pass/async-await.rs
index 0cd9bad03af..59da7580354 100644
--- a/src/test/run-pass/async-await.rs
+++ b/src/test/run-pass/async-await.rs
@@ -170,6 +170,7 @@ fn main() {
         async_closure,
         async_fn,
         async_fn_with_internal_borrow,
+        Foo::async_method,
         |x| {
             async move {
                 unsafe { await!(unsafe_async_fn(x)) }
diff --git a/src/test/run-pass/impl-trait/existential-minimal.rs b/src/test/ui/impl-trait/existential-minimal.rs
index bae4c685e7c..ff9209251aa 100644
--- a/src/test/run-pass/impl-trait/existential-minimal.rs
+++ b/src/test/ui/impl-trait/existential-minimal.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// run-pass
+// compile-pass
 
 fn main() {}
 
diff --git a/src/test/run-pass/impl-trait/issue-42479.rs b/src/test/ui/impl-trait/issue-42479.rs
index 1da5cd36ca9..fbf2c3f8a4e 100644
--- a/src/test/run-pass/impl-trait/issue-42479.rs
+++ b/src/test/ui/impl-trait/issue-42479.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// run-pass
+// compile-pass
 
 use std::iter::once;
 
diff --git a/src/test/run-pass/impl-trait/issue-49376.rs b/src/test/ui/impl-trait/issue-49376.rs
index 10379dad37d..1dfea0b9573 100644
--- a/src/test/run-pass/impl-trait/issue-49376.rs
+++ b/src/test/ui/impl-trait/issue-49376.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// run-pass
+// compile-pass
 
 // Tests for nested self-reference which caused a stack overflow.
 
diff --git a/src/test/run-pass/issues/issue-49556.rs b/src/test/ui/issue-49556.rs
index aeeb55d6c60..7f7b349c3a0 100644
--- a/src/test/run-pass/issues/issue-49556.rs
+++ b/src/test/ui/issue-49556.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// run-pass
+// compile-pass
 fn iter<'a>(data: &'a [usize]) -> impl Iterator<Item = usize> + 'a {
     data.iter()
         .map(
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
 
diff --git a/src/test/run-pass/traits/conservative_impl_trait.rs b/src/test/ui/traits/conservative_impl_trait.rs
index b6abeb916a9..3f119affd8c 100644
--- a/src/test/run-pass/traits/conservative_impl_trait.rs
+++ b/src/test/ui/traits/conservative_impl_trait.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// run-pass
+// compile-pass
 // #39665
 
 fn batches(n: &u32) -> impl Iterator<Item=&u32> {