https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98884
--- Comment #2 from David Brown <david at westcontrol dot com> --- Yes, ABI issues were my initial thought too. If so, then optimising away the assignments while leaving the stack manipulation (and possibly register allocations) in place would still be a significant improvement. However, I note that clang has no problem with generating ideal code here for the ARM - it is not bothered by the ABI. There could be several reasons for that. Perhaps the clang folk got the ABI wrong and the optimisation is not valid for the ARM EABI. Maybe the EABI used on the "arm (none)" target doesn't specify these details, meaning the optimisation is valid there even if it is not valid on "arm (linux)" targets. I don't know the details of the ABIs well enough to answer. If it is an ABI issue, then I'd be quite happy with an ARM-specific flag to enable an variation on the ABI that lets the compiler skip empty types entirely. When compiling for the Cortex-M devices, you rarely link much to pre-compiled code (other than the C library) and it's usually fine to break standards a bit to get more optimal code (like using "-ffast-math"). It would of course be best to have a general solution that works for all ARM users (and ideally other targets too) without needing a flag.