https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96153
--- Comment #6 from Iain Buclaw <ibuclaw at gdcproject dot org> --- The distinction between x86_64 passing and SPARC64 failing seems to be whether the struct returns in memory, or via registers. If via registers, alignment holes that were filled are ignored by the caller (values are copied away from the returned struct, so holes will not be carried over to the destination). By that measure then, all initialization of any struct type that doesn't satisfy identity_compare_p will require pre-filling with zeros. There are still some cases where this does not happen, such as in this testcase: toHash(checked(12));