https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79319
Bug ID: 79319 Summary: sizeof returns the wrong size of a union containing aligned members Product: gcc Version: 6.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: erik at ehofman dot com Target Milestone: --- It looks like sizeof() returns an incorrect size if a union contains an aligned member: Consider the following code: #include <stdio.h> typedef float vec4_t[4] __attribute__((aligned(32))); typedef union { float s4[4]; vec4_t v4; } vec4f_t; int main() { printf("float[4]: %zi\n", sizeof(float[4])); printf("vec4_t: %zi\n", sizeof(vec4_t)); printf("vec4f_t: %zi\n\n", sizeof(vec4f_t)); } when running it prints: __m128: 16 vec4_t: 16 vec4f_t: 32 As you can see both union members are 16-bytes but when quiring the size of the union it returns the size of the alignment (change it to aligned(64) and the size becomes 64).