https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101351
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|ice-on-valid-code |ice-on-invalid-code Ever confirmed|0 |1 Last reconfirmed| |2021-07-07 Status|UNCONFIRMED |NEW --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Richard Biener from comment #1) > I think this is invalid code but hard to diagnose (_Complex long doesn't fit > "rax", not sure if we're supposed to allocate a register pair here > magically). The register pair part is done by ix86_hard_regno_nregs which has: if (COMPLEX_MODE_P (mode)) return 2; I noticed in VALID_INT_MODE_P accepts C*Imode's. I don't know if it that is expected or not. Note on aarch64 if I use x1 instead of eax, I get: error: register specified for 'a' isn't suitable for data type Because the aarch64 backend rejects the complex integer modes. I really doubt the complex integer modes show up in RTL these days anyways. The only thing to take care of is making sure the ABI is the same for complex int arguments.