| // 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: () }; |
| } |