Skip to content

Commit

Permalink
dead_code: look at trait impls even if they don't contain items
Browse files Browse the repository at this point in the history
  • Loading branch information
lcnr committed Sep 22, 2020
1 parent e0bc267 commit 438d229
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
5 changes: 4 additions & 1 deletion compiler/rustc_passes/src/dead.rs
Expand Up @@ -369,7 +369,7 @@ fn has_allow_dead_code_or_lang_attr(
// - This is because lang items are always callable from elsewhere.
// or
// 2) We are not sure to be live or not
// * Implementation of a trait method
// * Implementations of traits and trait methods
struct LifeSeeder<'k, 'tcx> {
worklist: Vec<hir::HirId>,
krate: &'k hir::Crate<'k>,
Expand Down Expand Up @@ -415,6 +415,9 @@ impl<'v, 'k, 'tcx> ItemLikeVisitor<'v> for LifeSeeder<'k, 'tcx> {
}
}
hir::ItemKind::Impl { ref of_trait, items, .. } => {
if of_trait.is_some() {
self.worklist.push(item.hir_id);
}
for impl_item_ref in items {
let impl_item = self.krate.impl_item(impl_item_ref.id);
if of_trait.is_some()
Expand Down
21 changes: 21 additions & 0 deletions src/test/ui/const-generics/issues/issue-70225.rs
@@ -0,0 +1,21 @@
// check-pass
#![feature(const_generics)]
#![allow(incomplete_features)]
#![deny(dead_code)]

// We previously incorrectly linted `L` as unused here.
const L: usize = 3;

fn main() {
let p = Printer {};
p.print();
}

trait Print<const N: usize> {
fn print(&self) -> usize {
3
}
}

struct Printer {}
impl Print<L> for Printer {}
19 changes: 19 additions & 0 deletions src/test/ui/lint/dead-code/trait-impl.rs
@@ -0,0 +1,19 @@
// check-pass
#![deny(dead_code)]

enum Foo {
Bar,
}

fn main() {
let p = [0; 0];
p.bar();
}

trait Bar {
fn bar(&self) -> usize {
3
}
}

impl Bar for [u32; Foo::Bar as usize] {}

0 comments on commit 438d229

Please sign in to comment.