diff options
Diffstat (limited to 'tests/ui/traits/next-solver/normalize-param-env-4.rs')
| -rw-r--r-- | tests/ui/traits/next-solver/normalize-param-env-4.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/ui/traits/next-solver/normalize-param-env-4.rs b/tests/ui/traits/next-solver/normalize-param-env-4.rs new file mode 100644 index 00000000000..d49f7492297 --- /dev/null +++ b/tests/ui/traits/next-solver/normalize-param-env-4.rs @@ -0,0 +1,34 @@ +// revisions: current next +//[next] compile-flags: -Znext-solver +//[next] known-bug: #92505 +//[current] check-pass + +trait Trait { + type Assoc; +} + +impl<T> Trait for T { + type Assoc = T; +} + +fn impls_trait<T: Trait>() {} + +fn foo<T>() +where + <T as Trait>::Assoc: Trait, +{ + // Trying to use `<T as Trait>::Assoc: Trait` to prove `T: Trait` + // requires normalizing `<T as Trait>::Assoc`. We do not normalize + // using impl candidates if there's a where-bound for that trait. + // + // We therefore check whether `T: Trait` is proven by the environment. + // For that we try to apply the `<T as Trait>::Assoc: Trait` candidate, + // trying to normalize its self type results in overflow. + // + // In the old solver we eagerly normalize the environment, ignoring the + // unnormalized `<T as Trait>::Assoc: Trait` where-bound when normalizing + // `<T as Trait>::Asosc` + impls_trait::<T>(); +} + +fn main() {} |
