https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88178
Uroš Bizjak <ubizjak at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Target|x86_64-unknown-linux-gnu |x86 Status|ASSIGNED |RESOLVED Resolution|--- |FIXED --- Comment #5 from Uroš Bizjak <ubizjak at gmail dot com> --- Fixed for 9.0, no backport planned. (In reply to Jakub Jelinek from comment #3) > void foo (void) > { > register int r19 asm ("19"); > } > > ICEs with -g too. > Similar effects with "16", "argp" or "frame". > Guess it would be nice to reject these regs somewhere early, but there > doesn't seem to be a target hook for that. There is accessible_reg_set > which only mips uses, wonder if we could make them unaccessible and what > effect that would have. > I think it removes those registers from operand_reg_set and thus they > wouldn't be general_operand though. It looks to me that accesible_reg_set is intended to disable registers when certain ISA is not available. x86 disables registers by clearing their names, in addition to setting fixed_reg flag on the register. The registers that are now marked as IGNORED_DWARF_REGNUM can sneak to dwarf2 processing via invalid code paths, so they should be marked as ignored nevertheless. I'll play a bit with accessible_reg_set, maybe we can also disable unavailable reg in a more elegant way than currently implemented. This is something to consider after the release branch is branched, though.