I understand why this optimization was introduced. But. Shouldn't it produce warning? Cases like Send, Sync etc. can be tracked by compiler. But moving drop execution point simply breaks code in certain cases. At runtime.
UPDATE: If you replace u32 with any non-copy type like string, it works just as expected: Rust Playground . Looks like footgun to me.