// Checks that derived implementations of Clone and Debug do not // contribute to dead code analysis (issue #84647). #![forbid(dead_code)] struct A { f: () } //~^ ERROR: field `f` is never read #[derive(Clone)] struct B { f: () } //~^ ERROR: field `f` is never read #[derive(Debug)] struct C { f: () } //~^ ERROR: field `f` is never read #[derive(Debug,Clone)] struct D { f: () } //~^ ERROR: field `f` is never read struct E { f: () } //~^ ERROR: field `f` is never read // Custom impl, still doesn't read f impl Clone for E { fn clone(&self) -> Self { Self { f: () } } } struct F { f: () } // Custom impl that actually reads f impl Clone for F { fn clone(&self) -> Self { Self { f: self.f } } } fn main() { let _ = A { f: () }; let _ = B { f: () }; let _ = C { f: () }; let _ = D { f: () }; let _ = E { f: () }; let _ = F { f: () }; }