http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55857
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> 2013-01-03 10:50:26 UTC --- One that reproduces the checking failure: void foo (int *data, unsigned len, const int qlp_coeff[], unsigned order, int lp, int residual[]) { int i; int sum; if(order == 2) for(i = 0; i < (int)len; i++) { sum = 0; sum += qlp_coeff[1] * data[i-2]; sum += qlp_coeff[0] * data[i-1]; residual[i] = data[i] - (sum >> lp); } else for(i = 0; i < (int)len; i++) residual[i] = data[i] - ((qlp_coeff[0] * data[i-1]) >> lp); }