> On Dec 2, 2025, at 7:46 PM, John Hubbard <[email protected]> wrote: > > On 12/2/25 4:42 PM, Timur Tabi wrote: >>> On Tue, 2025-12-02 at 16:35 -0800, John Hubbard wrote: >>> for chunk in data.chunks_exact(4) { >>> // PANIC: `chunks_exact(4)` guarantees each chunk is exactly 4 >>> bytes. >>> let word = u32::from_le_bytes(chunk.try_into().unwrap()); >>> regs::NV_PFALCON_FALCON_EMEM_DATA::default() >>> .set_data(word) >>> .write(bar, &Fsp::ID); >>> } >>> >>> ...but actually, I think your way is better, because you don't have >>> just justify an .unwrap(). >>> >>> What do you think? >> >> I agree. Avoiding unwrap(), even with a comment, is always a good idea. >> >>> I figured you'd enjoy this, coming as it does just one email after I >>> wrote "never .unwrap()". haha :) >> >> I think your code is effectively identical to mine, except that I don't need >> the PANIC comment. I > > Yes. I'm changing my code over to the non-unwrap approach now. That > really is clearly better. > > >> suspect that in both cases, the compiler cannot tell that each chunk is >> always 4 bytes and >> try_into() will never panic. In my case, word[3] always exists and will >> never panic either. So I'm >> guess that the compiler will still emit code to check for panic. I don't >> know. >> > > Good question. Maybe someone with Rust experience can enlighten us on > that one.
If the optimizer could not eliminate the dead code, IMO that is a bug, pretty much like how we rely on dead code elimination optimization for build_assert. It is worth compiling and checking but I am almost certain the dead code for an unreachable case (in this case, panicking, will be eliminated). Thanks.
