Change:
EDITED: MCVE is here: with From the code (Offending implementation at the top, specifically : Changing to does not fix the crash. Changing to compiles. The latter is the correct implementation and I discovered this crash in the middle of some refactoring so I did not expect anything specific to happen except a type checking error. The crash also happens in nightly 2018-7-23 and 2018-7-30.
Do you think you could create a reproducer that doesn't depend on external crates?
I gave it a shot but I think I'm getting other confounding bugs and I can't get the type checking to pass. It's been over a year since I've looked at this Cthulhu's nest of code so I can't even tell if I'm moving in the right direction. Good news is, it still crashes in its original form on ! (from a parent workspace)
ping ICEBreaker-Cleanup-Crew
Error: This team () cannot be pinged via this command;it may need to be to on the master branch. Please let know if you're having trouble with this bot.
Let's see if we can get some help reducing the bug. ping icebreakers-cleanup-crew
Hey Cleanup Crew ICE-breakers! This bug has been identified as a good "Cleanup ICE-breaking candidate". In case it's useful, here are some [instructions] for tackling these sorts of bugs. Maybe take a look? Thanks! <3 [instructions]: https://rust- cc
Hi! First time I have some time to do some ICE work. I could remove the frunk/frunk_core dependency and some trait implementations + simplify the clause, and still have the compiler error : (thanks ) (other older bigger versions : ) You could make and the same type but unless you change the as described above, you will get : Which is I think the intended behavior by the author (once the rustc bug is fixed). Removing type from also stops the bug from occuring. Curious to know how it pans out.
removing all comments is also recommended ;) but good work so far!
Thanks to the Rust playground provided by I was able to reduce a little bit more the example, removing a bunch more generic constraints, some functions, some useless body functions.
No longer ICEs since

Discussion:
<ins> // check-pass // // regression test for #88071 #![feature(const_btree_new)] #![feature(const_fn_trait_bound)] use std::collections::BTreeMap; pub struct CustomMap<K, V>(BTreeMap<K, V>); impl<K, V> CustomMap<K, V> where K: Ord, { pub const fn new() -> Self { CustomMap(BTreeMap::new()) } } fn main() {} </ins>

<ins> #![feature(generic_associated_types)] trait PointerFamily { type Pointer<T>; } struct Rc<T>(Box<T>); struct RcFamily; impl PointerFamily for RcFamily { type Pointer<T> = Rc<T>; } #[allow(dead_code)] enum Node<T, P: PointerFamily> where P::Pointer<Node<T, P>>: Sized { Cons(P::Pointer<Node<T, P>>), } fn main() { let _list: <RcFamily as PointerFamily>::Pointer<Node<i32, RcFamily>>; //~^ ERROR overflow evaluating the requirement `Node<i32, RcFamily>: Sized` } </ins>

<ins> error[E0275]: overflow evaluating the requirement `Node<i32, RcFamily>: Sized` --> $DIR/issue-87750.rs:20:16 | LL |     let _list: <RcFamily as PointerFamily>::Pointer<Node<i32, RcFamily>>; |                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error For more information about this error, try `rustc --explain E0275`. </ins>

<ins> // check-fail // // regression test for issue 52893 trait At<Name> { type AtRes; fn at(self) -> Self::AtRes; } trait Push<T> { type PushRes; fn push(self, other: T) -> Self::PushRes; } trait AddClass<Name, F> { type AddRes; fn init(self, func: F); } trait ToRef { type RefRes; fn to_ref(&self) -> Self::RefRes; } struct Class<P>(P); impl<P> Class<P> { fn with<Name, F>(self) -> <Self as AddClass<Name, F>>::AddRes where Self: AddClass<Name, F>, { todo!() } fn from<F>(self) -> <Self as AddClass<P, F>>::AddRes where Self: AddClass<P, F>, { todo!() } } impl<F, Name, P> AddClass<Name, F> for Class<P> where Self: At<Name>, <Self as At<Name>>::AtRes: Push<F>, <<Self as At<Name>>::AtRes as Push<F>>::PushRes: ToRef<RefRes = Self> + Push<F>, { type AddRes = (); fn init(self, func: F) { let builder = self.at().push(func); let output = builder.to_ref(); builder.push(output); //~ ERROR mismatched types [E0308] } } fn main() {} </ins>

<ins> error[E0308]: mismatched types --> $DIR/issue-52893.rs:53:22 | LL | impl<F, Name, P> AddClass<Name, F> for Class<P> |      - this type parameter ... LL |         builder.push(output); |                      ^^^^^^ expected type parameter `F`, found struct `Class` | = note: expected type parameter `F` found struct `Class<P>` error: aborting due to previous error For more information about this error, try `rustc --explain E0308`. </ins>

<ins> // check-fail // // regression test for #68295 struct Matrix<R, C, S>(R, C, S); impl<R, C, S> Matrix<R, C, S> { fn into_owned(self) -> Matrix<R, C, Owned<R, C, ()>> where (): Allocator<R, C>, { unimplemented!() } } impl<D, S> Matrix<D, D, S> { fn hermitian_part(&self) -> Matrix<D, D, Owned<D, D, ()>> where (): Allocator<D, D>, { unimplemented!() } } trait Allocator<R, C> { type Buffer; } trait Trait<R, C, A> { type Power; } impl<R, C, A: Allocator<R, C>> Trait<R, C, A> for () { type Power = A::Buffer; } type Owned<R, C, G> = <G as Trait<R, C, ()>>::Power; fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32> where (): Allocator<R, C>, { input.into_owned() //~^ ERROR mismatched types [E0308] } fn main() {} </ins>

<ins> error[E0308]: mismatched types --> $DIR/issue-68295.rs:43:5 | LL | fn crash<R, C>(input: Matrix<R, C, ()>) -> Matrix<R, C, u32> |                                            ----------------- expected `Matrix<R, C, u32>` because of return type ... LL |     input.into_owned() |     ^^^^^^^^^^^^^^^^^^ expected `u32`, found associated type | = note: expected struct `Matrix<_, _, u32>` found struct `Matrix<_, _, <() as Allocator<R, C>>::Buffer>` = help: consider constraining the associated type `<() as Allocator<R, C>>::Buffer` to `u32` = note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html error: aborting due to previous error For more information about this error, try `rustc --explain E0308`. </ins>