https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70687
H.J. Lu <hjl.tools at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2016-04-15 Ever confirmed|0 |1 --- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> --- This works for me: diff --git a/gcc/combine.c b/gcc/combine.c index 1d0e8be..197b9da 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11101,6 +11101,9 @@ change_zero_ext (rtx *src) && subreg_lowpart_p (XEXP (x, 0))) { size = GET_MODE_PRECISION (GET_MODE (XEXP (x, 0))); + /* Check for undefined shift. */ + if (size >= HOST_BITS_PER_WIDE_INT) + continue; x = SUBREG_REG (XEXP (x, 0)); } else