https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69706

--- Comment #5 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
It's a bug in the original implementation of the SPARC 64-bit calling
conventions dating back to 1998:

              /* There's no need to check this_slotno < SPARC_FP_ARG_MAX.
                 If it wasn't true we wouldn't be here.  */

That's wrong for a 12- or 16-byte FP structure passed in slot #15, which must
be passed half in %d30 and half on the stack according to SCD 2.4.1.

What's annoying is that, while for a 12-byte structure this results in an ICE
as in the case at hand, for a 16-byte structure containing doubles this results
in wrong code, in the form of a violation of the SPARC 64-bit calling
conventions (the second half of the structure is passed in %d32 instead of on
the stack).

So we are faced with the following alternative:
 1. Fix only the ICE and don't change GCC's ABI, IOW keep the ABI bug,
 2. Fix the ICE and the ABI bug, IOW change GCC's ABI.

Reply via email to