Static rustc_lint_defs::builtin::COHERENCE_LEAK_CHECK
source · pub static COHERENCE_LEAK_CHECK: &Lint
Expand description
The coherence_leak_check
lint detects conflicting implementations of
a trait that are only distinguished by the old leak-check code.
Example
trait SomeTrait { }
impl SomeTrait for for<'a> fn(&'a u8) { }
impl<'a> SomeTrait for fn(&'a u8) { }
{{produces}}
Explanation
In the past, the compiler would accept trait implementations for identical functions that differed only in where the lifetime binder appeared. Due to a change in the borrow checker implementation to fix several bugs, this is no longer allowed. However, since this affects existing code, this is a future-incompatible lint to transition this to a hard error in the future.
Code relying on this pattern should introduce “newtypes”,
like struct Foo(for<'a> fn(&'a u8))
.
See issue #56105 for more details.