http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58442
--- Comment #9 from Martin Husemann <martin at netbsd dot org> --- Please correct me if I am wrong, but in the bitfield cotexts in vax.md there are multiple places with similar constructs like: 219 && (REG_P (operands[0]) 220 || ! mode_dependent_address_p (XEXP (operands[0], 0), 221 MEM_ADDR_SPACE (operands[0]))))) If I read the code correctly, MEM_ADDR_SPACE() might only be called if MEM_P() is true. The expression at hand is a SUBREG, so neither REG_P() nor MEM_P() is true, and we end up invoking MEM_ADDR_SPACE() and should cause a call to rtl_check_failed_code1(), causing an internal error and abort. No clue why that fails (and how). I do not understand VAX good enough, but as THE cisc arch would expect the moves generated here to work for subregs as well - so maybe we need to check for REG_P() || SUBREG_P(), where SUBREG_P would be new (GET_CODE(X) == SUBRECT)?