diff --git a/external/gpl3/gcc/dist/gcc/recog.c b/external/gpl3/gcc/dist/gcc/recog.c index 63cdc237240b..a842496785df 100644 --- a/external/gpl3/gcc/dist/gcc/recog.c +++ b/external/gpl3/gcc/dist/gcc/recog.c @@ -1011,8 +1011,12 @@ general_operand (rtx op, machine_mode mode) might be called from cleanup_subreg_operands. ??? This is a kludge. */ - if (!reload_completed && SUBREG_BYTE (op) != 0 - && MEM_P (sub)) + if (!reload_completed + && MEM_P (sub) + && (SUBREG_BYTE (op) > GET_MODE_SIZE (GET_MODE (sub)) + || SUBREG_BYTE (op) % GET_MODE_SIZE (mode) != 0 + ) + ) return 0; #ifdef CANNOT_CHANGE_MODE_CLASS