91535ad026
we don't track them when canonicalizing or when freshening, resulting in instable caching in the old solver, and issues when instantiating query responses in the new one.
30 lines
704 B
Rust
30 lines
704 B
Rust
#![feature(generic_const_exprs)]
|
|
#![allow(incomplete_features)]
|
|
|
|
// The goal is to get an unevaluated const `ct` with a `Ty::Infer(TyVar(?1t)` subst.
|
|
//
|
|
// If we are then able to infer `ty::Infer(TyVar(?1t) := Ty<ct>` we introduced an
|
|
// artificial inference cycle.
|
|
struct Foo<const N: usize>;
|
|
|
|
trait Bind<T> {
|
|
fn bind() -> (T, Self);
|
|
}
|
|
|
|
// `N` has to be `ConstKind::Unevaluated`.
|
|
impl<T> Bind<T> for Foo<{ 6 + 1 }> {
|
|
fn bind() -> (T, Self) {
|
|
(panic!(), Foo)
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
let (mut t, foo) = Foo::bind();
|
|
//~^ ERROR mismatched types
|
|
//~| NOTE cyclic type
|
|
|
|
// `t` is `ty::Infer(TyVar(?1t))`
|
|
// `foo` contains `ty::Infer(TyVar(?1t))` in its substs
|
|
t = foo;
|
|
}
|