This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/69706] internal compiler error: in extract_constrain_insn, at recog.c:2246


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]