https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105396
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I think the bug is visible in -fdump-rtl-expand-details dump: Partition 2: size 40 align 16 c Partition 1: size 8 align 8 b Partition 0: size 4 align 4 a_1 Partition 3: size 4 align 8 d Flushing rzbuffer at offset -160 with: f1 f1 f1 f1 Flushing rzbuffer at offset -128 with: 04 f2 00 00 Flushing rzbuffer at offset -128 with: 00 00 00 f2 Flushing rzbuffer at offset -96 with: f2 f2 00 00 Flushing rzbuffer at offset -64 with: 00 00 00 f3 Flushing rzbuffer at offset -32 with: f3 f3 f3 f3 There is a wrong flush such that the store of what I think should be 04 f2 00 f2 is done in 2 separate overlapping stores. Because the first var is just 4 bytes, after f1 f1 f1 f1 there should be 04 to indicate that only first 4 bytes of the 8 are valid, then f2 for the inter-var gap, then 00 for the 8 byte b variable, then 3 f2 bytes for 24 bytes of gap and then 5 00 bytes for 40 bytes of c and then f3s till end of the frame.