#![deny(dead_code)] struct T1; //~ ERROR struct `T1` is never constructed pub struct T2(i32); //~ ERROR field `0` is never read struct T3; trait Trait1 { //~ ERROR trait `Trait1` is never used const UNUSED: i32; fn unused(&self) {} fn construct_self() -> Self; } pub trait Trait2 { const USED: i32; fn used(&self) {} } pub trait Trait3 { const USED: i32; fn construct_self() -> Self; } impl Trait1 for T1 { const UNUSED: i32 = 0; fn construct_self() -> Self { Self } } impl Trait1 for T2 { const UNUSED: i32 = 0; fn construct_self() -> Self { T2(0) } } impl Trait2 for T1 { const USED: i32 = 0; } impl Trait2 for T2 { const USED: i32 = 0; } impl Trait3 for T3 { const USED: i32 = 0; fn construct_self() -> Self { Self } } fn main() {}