Consider this test: http://hinezumilabs.org/alpt/test-pack.c
#define _PACKED_ __attribute__ ((__packed__)) int func(int levels) { struct foo { u_char a; int32_t b[levels]; struct timeval _PACKED_ c[levels]; u_int d[4]; }_PACKED_ pkt; struct bar { u_char a; int32_t b[levels]; struct timeval c[levels]; u_int d[4]; }_PACKED_ pktII; printf("pkt %d, foo %d\n", sizeof(pkt), sizeof(struct foo)); printf("pktII %d, bar %d\n", sizeof(pktII), sizeof(struct bar)); } On a x86 with gcc-3.4.x/3.3.6 it prints: pkt 65, foo 65 pktII 65, bar 65 (this is the right output) while compiled for mips and runned on a BCM3302 (mips) with a gcc-3.4.4 it gives: pkt 68, foo 68 pktII 68, bar 68 On a gentoo's 4.1.1 amd64: pkt 104, foo 104 pktII 104, bar 104 On a x86 with the same version of gcc: pkt 68, foo 68 pktII 68, bar 68 That's all ;) -- Summary: Packed struct of variable length has wrong size Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: alpt at freaknet dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27945