| //@ check-pass | 
 | //@ edition:2021 | 
 |  | 
 | struct Cat; | 
 | struct Wrap<T>(T); | 
 |  | 
 | fn main() { | 
 |     impl From<Cat> for () { | 
 |     //~^ WARN non-local `impl` definition | 
 |         fn from(_: Cat) -> () { | 
 |             todo!() | 
 |         } | 
 |     } | 
 |  | 
 |     #[derive(Debug)] | 
 |     struct Elephant; | 
 |  | 
 |     impl From<Wrap<Wrap<Elephant>>> for () { | 
 |         fn from(_: Wrap<Wrap<Elephant>>) -> Self { | 
 |             todo!() | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | pub trait StillNonLocal {} | 
 |  | 
 | impl StillNonLocal for &str {} | 
 |  | 
 | fn only_global() { | 
 |     struct Foo; | 
 |     impl StillNonLocal for &Foo {} | 
 | } | 
 |  | 
 | struct GlobalSameFunction; | 
 |  | 
 | fn same_function() { | 
 |     struct Local1(GlobalSameFunction); | 
 |     impl From<Local1> for GlobalSameFunction { | 
 |         fn from(x: Local1) -> GlobalSameFunction { | 
 |             x.0 | 
 |         } | 
 |     } | 
 |  | 
 |     struct Local2(GlobalSameFunction); | 
 |     impl From<Local2> for GlobalSameFunction { | 
 |         fn from(x: Local2) -> GlobalSameFunction { | 
 |             x.0 | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | struct GlobalDifferentFunction; | 
 |  | 
 | fn diff_function_1() { | 
 |     struct Local(GlobalDifferentFunction); | 
 |  | 
 |     impl From<Local> for GlobalDifferentFunction { | 
 |         fn from(x: Local) -> GlobalDifferentFunction { | 
 |             x.0 | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | fn diff_function_2() { | 
 |     struct Local(GlobalDifferentFunction); | 
 |  | 
 |     impl From<Local> for GlobalDifferentFunction { | 
 |         fn from(x: Local) -> GlobalDifferentFunction { | 
 |             x.0 | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | // https://github.com/rust-lang/rust/issues/121621#issuecomment-1976826895 | 
 | fn commonly_reported() { | 
 |     struct Local(u8); | 
 |     impl From<Local> for u8 { | 
 |         fn from(x: Local) -> u8 { | 
 |             x.0 | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | // https://github.com/rust-lang/rust/issues/121621#issue-2153187542 | 
 | pub trait Serde {} | 
 |  | 
 | impl Serde for &[u8] {} | 
 | impl Serde for &str {} | 
 |  | 
 | fn serde() { | 
 |     struct Thing; | 
 |     impl Serde for &Thing {} | 
 | } |