COHERENCE_LEAK_CHECK in rustc_lint::builtin - Rust
Description: The `coherence_leak_check` lint detects conflicting implementations of a trait that are only distinguished by the old leak-check code.

Skip to main content

## COHERENCE_LEAK_CHECK

# Static COHERENCE_LEAK_CHECK

Source

    pub static COHERENCE_LEAK_CHECK: &'static 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.