Change:
<!-- Thank you for finding an Internal Compiler Error! If possible, try to provide a minimal verifiable example. You can read "Rust Bug Minimization Patterns" for how to create smaller examples. --The code in question is from in Fuchsia. In order to reproduce, first and then . Once that's done, perform the following steps from inside the Fuchsia repository: <!-- If you're using the stable version of the compiler, you should also check if the bug also exists in the beta or nightly versions. --Version from error output: <!-- TRIAGEBOTSTART --<!-- TRIAGEBOTASSIGNSTART --<!-- TRIAGEBOTASSIGNDATASTARTTRIAGEBOTASSIGNDATAEND --<!-- TRIAGEBOTASSIGNEND --<!-- TRIAGEBOT_END --
Easy fix here. I saw this at one point in , but it went away with in the final version of that PR, so I had assumed that as the code evolved, this wouldn't get hit. Anyways, to fix, just make the arm be .
claim
Any way we can get an MCVE for this? Seems like an important test case for normalization under binders. 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://rustc-dev- cc
does that mean this is a stable-to-beta regression? If so, could you add that label (and the 1.56 milestone) to this issue so we can track it better?
good question, I don't know. If this indeed is directly caused by , then it would be, yes. Can somebody check this? I don't personally have the time to right now.
I would have no idea how to do that for the change that caused the issue. I was deep in the middle of tearing my hair out trying to figure out why a certain trait (in a very hairy mess of traits) wasn't implemented. I was confused enough as it was without the ICE MCVE would be great, but I unfortunately can't provide one starting from the offending change. Perhaps someone else can create a snippet tabula rasa based on where the ICE occurred?
This is a terrible MCVE, but it works and panics with two ICE: After fiddling a bit more with this, the culprit is indeed that is not implemented for .
wow! You rock!
Wow, fantastic work, !
This is fixed on nightly, just needs a test () in
claim

Discussion:
<ins> trait BufferMut {} struct Ctx<D>(D); trait BufferUdpStateContext<B> {} impl<B: BufferMut, C> BufferUdpStateContext<B> for C {} trait StackContext where Ctx<()>: for<'a> BufferUdpStateContext<&'a ()>, { type Dispatcher; } trait TimerContext { type Handler; } impl<C> TimerContext for C where C: StackContext, //~^ ERROR: is not satisfied [E0277] { type Handler = Ctx<C::Dispatcher>; //~^ ERROR: is not satisfied [E0277] } struct EthernetWorker<C>(C) where Ctx<()>: for<'a> BufferUdpStateContext<&'a ()>; impl<C> EthernetWorker<C> {} //~^ ERROR: is not satisfied [E0277] fn main() {} </ins>

<ins> error[E0277]: the trait bound `for<'a> &'a (): BufferMut` is not satisfied --> $DIR/issue-89118.rs:19:8 | LL |     C: StackContext, |        ^^^^^^^^^^^^ the trait `for<'a> BufferMut` is not implemented for `&'a ()` | note: required because of the requirements on the impl of `for<'a> BufferUdpStateContext<&'a ()>` for `Ctx<()>` --> $DIR/issue-89118.rs:5:23 | LL | impl<B: BufferMut, C> BufferUdpStateContext<B> for C {} |                       ^^^^^^^^^^^^^^^^^^^^^^^^     ^ note: required by a bound in `StackContext` --> $DIR/issue-89118.rs:9:14 | LL | trait StackContext |       ------------ required by a bound in this LL | where LL |     Ctx<()>: for<'a> BufferUdpStateContext<&'a ()>, |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `StackContext` error[E0277]: the trait bound `for<'a> &'a (): BufferMut` is not satisfied --> $DIR/issue-89118.rs:22:20 | LL |     type Handler = Ctx<C::Dispatcher>; |                    ^^^^^^^^^^^^^^^^^^ the trait `for<'a> BufferMut` is not implemented for `&'a ()` | note: required because of the requirements on the impl of `for<'a> BufferUdpStateContext<&'a ()>` for `Ctx<()>` --> $DIR/issue-89118.rs:5:23 | LL | impl<B: BufferMut, C> BufferUdpStateContext<B> for C {} |                       ^^^^^^^^^^^^^^^^^^^^^^^^     ^ note: required by a bound in `StackContext` --> $DIR/issue-89118.rs:9:14 | LL | trait StackContext |       ------------ required by a bound in this LL | where LL |     Ctx<()>: for<'a> BufferUdpStateContext<&'a ()>, |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `StackContext` error[E0277]: the trait bound `for<'a> &'a (): BufferMut` is not satisfied --> $DIR/issue-89118.rs:29:9 | LL | impl<C> EthernetWorker<C> {} |         ^^^^^^^^^^^^^^^^^ the trait `for<'a> BufferMut` is not implemented for `&'a ()` | note: required because of the requirements on the impl of `for<'a> BufferUdpStateContext<&'a ()>` for `Ctx<()>` --> $DIR/issue-89118.rs:5:23 | LL | impl<B: BufferMut, C> BufferUdpStateContext<B> for C {} |                       ^^^^^^^^^^^^^^^^^^^^^^^^     ^ note: required by a bound in `EthernetWorker` --> $DIR/issue-89118.rs:28:14 | LL | struct EthernetWorker<C>(C) |        -------------- required by a bound in this LL | where LL |     Ctx<()>: for<'a> BufferUdpStateContext<&'a ()>; |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ required by this bound in `EthernetWorker` error: aborting due to 3 previous errors For more information about this error, try `rustc --explain E0277`. </ins>