summaryrefslogtreecommitdiffstats
path: root/tests/ui/const-generics/occurs-check/unused-substs-2.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/const-generics/occurs-check/unused-substs-2.rs')
-rw-r--r--tests/ui/const-generics/occurs-check/unused-substs-2.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/ui/const-generics/occurs-check/unused-substs-2.rs b/tests/ui/const-generics/occurs-check/unused-substs-2.rs
new file mode 100644
index 000000000..9b1212694
--- /dev/null
+++ b/tests/ui/const-generics/occurs-check/unused-substs-2.rs
@@ -0,0 +1,28 @@
+#![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();
+ // `t` is `ty::Infer(TyVar(_#1t))`
+ // `foo` contains `ty::Infer(TyVar(_#1t))` in its substs
+ t = foo;
+ //~^ ERROR mismatched types
+ //~| NOTE cyclic type
+}