https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82210
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |aldyh at gcc dot gnu.org --- Comment #3 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- Even with aligned, as Richard points out: struct { __attribute__((aligned(16))) struct { short aa; } a[size]; int b[size]; } s; the .original dump setting s.b[i]=0 is: s.b{off: (sizetype) SAVE_EXPR <size> * 2}[i] = 0; I would have expected size * 2 plus magic to round up to 16 bytes. It looks like we're throwing away the alignment. As a reference, without the aligned attribute we get: s.b{off: (sizetype) SAVE_EXPR <size> * 2 + 3 & 18446744073709551612}[i] = 0; Note: C operator precedence actually yields (size * 2 + 3) & blah Which is rounding up to 4 byte alignment. I'll investigate.