| // Regression test for rust-lang/rust#63154 | |
| // | |
| // Before, we would ICE after failing to normalize the destination type | |
| // when checking call destinations and also when checking MIR | |
| // assignment statements. | |
| //@ check-pass | |
| trait HasAssocType { | |
| type Inner; | |
| } | |
| impl HasAssocType for () { | |
| type Inner = (); | |
| } | |
| trait Tr<I, T>: Fn(I) -> Option<T> {} | |
| impl<I, T, Q: Fn(I) -> Option<T>> Tr<I, T> for Q {} | |
| fn f<T: HasAssocType>() -> impl Tr<T, T::Inner> { | |
| |_| None | |
| } | |
| fn g<T, Y>(f: impl Tr<T, Y>) -> impl Tr<T, Y> { | |
| f | |
| } | |
| fn h() { | |
| g(f())(()); | |
| } | |
| fn main() { | |
| h(); | |
| } |