From 3c46da8c82dbf1b92a3300b092ef3cc563a5181b Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 12:38:06 +0200 Subject: [PATCH 1/7] 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 66305ae8836ee..5ec4ba204238a 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 0000000000000..b0bdf17cecd12 --- /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 0000000000000..dd1f749788674 --- /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 0000000000000..5a6a3031d0b01 --- /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 0000000000000..f5f36002b4222 --- /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 0000000000000..8657d4ac2f290 --- /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 0000000000000..26c29bf2bb2b5 --- /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 2fe72365bab1c..944d57b5ba8f5 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 9802b7e8f383b..9d8e44c25d87e 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 From 2e1ac08cb3bfa90cbb7864bfb4957d182fd1c6aa Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 14:44:46 +0200 Subject: [PATCH 2/7] Call Foo::async_method in the async-await test --- src/test/run-pass/async-await.rs | 1 + src/test/run-pass/async-await.stderr | 14 -------------- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 src/test/run-pass/async-await.stderr diff --git a/src/test/run-pass/async-await.rs b/src/test/run-pass/async-await.rs index 0cd9bad03af9f..59da758035466 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/async-await.stderr b/src/test/run-pass/async-await.stderr deleted file mode 100644 index b0bdf17cecd12..0000000000000 --- a/src/test/run-pass/async-await.stderr +++ /dev/null @@ -1,14 +0,0 @@ -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 { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - From 62e9a09cfb400ff68f0b105673cc1563b9de5f53 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 14:47:46 +0200 Subject: [PATCH 3/7] Convert impl-trait/issue-42479.rs to compile-pass --- src/test/run-pass/impl-trait/issue-42479.stderr | 14 -------------- .../{run-pass => ui}/impl-trait/issue-42479.rs | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 src/test/run-pass/impl-trait/issue-42479.stderr rename src/test/{run-pass => ui}/impl-trait/issue-42479.rs (97%) diff --git a/src/test/run-pass/impl-trait/issue-42479.stderr b/src/test/run-pass/impl-trait/issue-42479.stderr deleted file mode 100644 index 5a6a3031d0b01..0000000000000 --- a/src/test/run-pass/impl-trait/issue-42479.stderr +++ /dev/null @@ -1,14 +0,0 @@ -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-42479.rs b/src/test/ui/impl-trait/issue-42479.rs similarity index 97% rename from src/test/run-pass/impl-trait/issue-42479.rs rename to src/test/ui/impl-trait/issue-42479.rs index 1da5cd36ca949..fbf2c3f8a4e49 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; From 12cabc824b7fd7c94a5add3ad268e02f80749e34 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 14:51:26 +0200 Subject: [PATCH 4/7] Convert existential-minimal.rs to compile-pass --- src/test/run-pass/impl-trait/existential-minimal.stderr | 8 -------- .../{run-pass => ui}/impl-trait/existential-minimal.rs | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100644 src/test/run-pass/impl-trait/existential-minimal.stderr rename src/test/{run-pass => ui}/impl-trait/existential-minimal.rs (97%) diff --git a/src/test/run-pass/impl-trait/existential-minimal.stderr b/src/test/run-pass/impl-trait/existential-minimal.stderr deleted file mode 100644 index dd1f749788674..0000000000000 --- a/src/test/run-pass/impl-trait/existential-minimal.stderr +++ /dev/null @@ -1,8 +0,0 @@ -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/existential-minimal.rs b/src/test/ui/impl-trait/existential-minimal.rs similarity index 97% rename from src/test/run-pass/impl-trait/existential-minimal.rs rename to src/test/ui/impl-trait/existential-minimal.rs index bae4c685e7c48..ff9209251aa37 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() {} From 7e5a13163ec0a724e67faf222d2f5b0872dc48d1 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 14:53:16 +0200 Subject: [PATCH 5/7] Convert issue-49376.rs to compile-pass --- .../run-pass/impl-trait/issue-49376.stderr | 32 ------------------- .../impl-trait/issue-49376.rs | 2 +- 2 files changed, 1 insertion(+), 33 deletions(-) delete mode 100644 src/test/run-pass/impl-trait/issue-49376.stderr rename src/test/{run-pass => ui}/impl-trait/issue-49376.rs (98%) diff --git a/src/test/run-pass/impl-trait/issue-49376.stderr b/src/test/run-pass/impl-trait/issue-49376.stderr deleted file mode 100644 index f5f36002b4222..0000000000000 --- a/src/test/run-pass/impl-trait/issue-49376.stderr +++ /dev/null @@ -1,32 +0,0 @@ -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/impl-trait/issue-49376.rs b/src/test/ui/impl-trait/issue-49376.rs similarity index 98% rename from src/test/run-pass/impl-trait/issue-49376.rs rename to src/test/ui/impl-trait/issue-49376.rs index 10379dad37d9e..1dfea0b957329 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. From 31d5878a056e315b244be4e6c3264a4ce510c50f Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 14:55:40 +0200 Subject: [PATCH 6/7] Convert issue-49556.rs to compile-pass --- src/test/run-pass/issues/issue-49556.stderr | 8 -------- src/test/{run-pass/issues => ui}/issue-49556.rs | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100644 src/test/run-pass/issues/issue-49556.stderr rename src/test/{run-pass/issues => ui}/issue-49556.rs (97%) diff --git a/src/test/run-pass/issues/issue-49556.stderr b/src/test/run-pass/issues/issue-49556.stderr deleted file mode 100644 index 8657d4ac2f290..0000000000000 --- a/src/test/run-pass/issues/issue-49556.stderr +++ /dev/null @@ -1,8 +0,0 @@ -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/issues/issue-49556.rs b/src/test/ui/issue-49556.rs similarity index 97% rename from src/test/run-pass/issues/issue-49556.rs rename to src/test/ui/issue-49556.rs index aeeb55d6c6006..7f7b349c3a0bf 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 + 'a { data.iter() .map( From e24f4d57b01be3eb3b36c49385cbe89e096586bc Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Thu, 4 Oct 2018 14:57:31 +0200 Subject: [PATCH 7/7] Convert conservative_impl_trait.rs to compile-pass --- src/test/run-pass/traits/conservative_impl_trait.stderr | 8 -------- .../{run-pass => ui}/traits/conservative_impl_trait.rs | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100644 src/test/run-pass/traits/conservative_impl_trait.stderr rename src/test/{run-pass => ui}/traits/conservative_impl_trait.rs (97%) diff --git a/src/test/run-pass/traits/conservative_impl_trait.stderr b/src/test/run-pass/traits/conservative_impl_trait.stderr deleted file mode 100644 index 26c29bf2bb2b5..0000000000000 --- a/src/test/run-pass/traits/conservative_impl_trait.stderr +++ /dev/null @@ -1,8 +0,0 @@ -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/run-pass/traits/conservative_impl_trait.rs b/src/test/ui/traits/conservative_impl_trait.rs similarity index 97% rename from src/test/run-pass/traits/conservative_impl_trait.rs rename to src/test/ui/traits/conservative_impl_trait.rs index b6abeb916a9ee..3f119affd8c9b 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 {