https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94609
--- Comment #8 from Iain Buclaw <ibuclaw at gdcproject dot org> --- (In reply to H.J. Lu from comment #6) > (In reply to Iain Buclaw from comment #5) > > 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. > > Does x32 return it in a single 64-bit register? Two 64-bit registers. The size of struct Scoped is 32 bytes on x86_64, 16 bytes on x32.