You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
leak check ignoring region constraints from normalization is sus #305
//@ revisions: current next//@ ignore-compare-mode-next-solver (explicit revisions)//@[next] compile-flags: -Znext-solver//@ check-pass// When proving `C::Val<'a>: for<'b> PartialEq<C::Val<'b>>` there are// two candidates:// - `C::Val<'a>: PartialEq<C::Val<'a>>`// - `for<'b> C::Val<'a>: PartialEq<C::Val<'b>>`//// The first candidate results in an `'!b == 'a` constraint while the// second one has no region constraints. The constraint of the first// candidate means the canonical response has an entry for `'b` in its// `var_values`. This previously caused us to not prefer the second// constraint.//// Now, actually, the first candidate should just result in a leak check// failure, but doesn't. That's a separate issue though :>traitCursor{typeVal<'a>:PartialEq + for<'b>PartialEq<Self::Val<'b>>;}impl<C:Cursor>Cursorfor&C{// for<'b> C::Val<'a>: PartialEq<C::Val<'b>>// - C::Val<'a>: PartialEq<C::Val<'a>>`// - for<'b> C::Val<'a>: PartialEq<C::Val<'b>>typeVal<'a> = C::Val<'a>;}fnmain(){}
We should not ignore the '!b == 'a constraint we get from the Projection(C::Val<'a>[non-rigid], C::Val<'!b>[rigid]) goal in the outer C::Val<'a>: for<'b> PartialEq<C::Val<'b>> goal.
this makes it observable when exactly we're normalizing C::Val<'a>[non-rigid]. This can in theory even result in ICE. Related to rust-lang/rust#155749 where we already propagate constraints from AliasRelate out to the caller. I assume this can result in HIR typeck vs MIR typeck mismatches and ICE.
Activity
Rollup merge of rust-lang#163928 - lcnr:only-merge-eq-modulo-regions,…
Rollup merge of rust-lang#163928 - lcnr:only-merge-eq-modulo-regions,…
Unrolled build for #163928 in rollup 165244