From 3c46da8c82dbf1b92a3300b092ef3cc563a5181b Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 12:38:06 +0200 Subject: [PATCH] Fix dead code lint for functions using impl Trait --- src/librustc/middle/dead.rs | 8 ++++- src/test/run-pass/async-await.stderr | 14 ++++++++ .../impl-trait/existential-minimal.stderr | 8 +++++ .../run-pass/impl-trait/issue-42479.stderr | 14 ++++++++ .../run-pass/impl-trait/issue-49376.stderr | 32 +++++++++++++++++++ src/test/run-pass/issues/issue-49556.stderr | 8 +++++ .../traits/conservative_impl_trait.stderr | 8 +++++ src/test/ui/lint/lint-dead-code-1.rs | 4 +++ src/test/ui/lint/lint-dead-code-1.stderr | 8 ++++- 9 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/async-await.stderr create mode 100644 src/test/run-pass/impl-trait/existential-minimal.stderr create mode 100644 src/test/run-pass/impl-trait/issue-42479.stderr create mode 100644 src/test/run-pass/impl-trait/issue-49376.stderr create mode 100644 src/test/run-pass/issues/issue-49556.stderr create mode 100644 src/test/run-pass/traits/conservative_impl_trait.stderr 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 { - 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::>(); 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 { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + 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 + '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 { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = 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 -- 2.44.0