https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94609
--- Comment #5 from Iain Buclaw <ibuclaw at gdcproject dot org> --- The struct is built as a POD type. As the struct is nested, it should be considered non-POD, otherwise it gets left up to aggregate_value_p to decide how to pass it around. i386 returns true from aggregate_value_p because flag_pcc_struct_return=1. x86_64 returns true from aggregate_value_p because targetm.calls.return_in_memory returns true. x32 returns false from aggregate_value_p because the halved size makes it small enough to pass around in registers.