This is due to #3598 (that is, the fact that `Option<T>` is invariant with respect to `T`). `itd.next()` yields a `Option<&'a [u8]>` where `'a` is the lifetime of the thing being iterated over, and `Some(bytes!("..."))` yields an `Option<&'b [u8]>` where `'b` is the current statement, and because `Option` is currently invariant, those two types cannot be related. This is why I had to match to pull out and compare the `&'a [u8]` and `&'b [u8]` directly, since then we were able to find a common superlifetime `'c` and relate that. At least I think that's what was going on, I don't think I dug into the logs, just took a guess and it seemed to work. ;)

It's worth fixing #3598 soon -- that should actually be pretty easy now, most of the infrastructure is in place (though I want to fix that Cell soundness issue you found first...). I'll add a FIXME to this location, too.