2021-08-27 11:04:57 -05:00
|
|
|
#![feature(generic_const_exprs)]
|
2020-09-09 02:43:53 -05:00
|
|
|
#![allow(incomplete_features)]
|
|
|
|
|
2022-10-12 11:12:19 -05:00
|
|
|
// The goal is to get an unevaluated const `ct` with a `Ty::Infer(TyVar(_#1t)` subst.
|
2020-09-09 02:43:53 -05:00
|
|
|
//
|
|
|
|
// 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();
|
|
|
|
// `t` is `ty::Infer(TyVar(_#1t))`
|
|
|
|
// `foo` contains `ty::Infer(TyVar(_#1t))` in its substs
|
|
|
|
t = foo;
|
2021-01-24 13:08:12 -06:00
|
|
|
//~^ ERROR mismatched types
|
|
|
|
//~| NOTE cyclic type
|
2020-09-09 02:43:53 -05:00
|
|
|
}
|