https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65258
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |diagnostic, | |missed-optimization Status|UNCONFIRMED |ASSIGNED Last reconfirmed| |2015-03-02 Component|c |tree-optimization Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org Ever confirmed|0 |1 Known to fail| |4.8.3, 4.9.2, 5.0 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Early unrolling peels the a[i] = 0 loop 10 times. VRP where we perform the array bound warning still isn't able to prove that the last iterations are not executed. So we end up with <bb 3>: # j_12 = PHI <j_3(7), j_13(9)> i_9 = j_12 >> 3; i_25 = i_9 + 4294967295; a[i_25] = 0; i_29 = i_9 + 4294967294; a[i_29] = 0; i_33 = i_9 + 4294967293; if (i_29 != 0) goto <bb 4>; else goto <bb 6>; <bb 4>: a[i_33] = 0; i_37 = i_9 + 4294967292; if (i_33 != 0) goto <bb 5>; else goto <bb 6>; <bb 5>: a[i_37] = 0; i_41 = i_9 + 4294967291; a[i_41] = 0; i_45 = i_9 + 4294967290; a[i_45] = 0; ... I believe that's also partly because we have propagated the increments to be based on the initial value and thus we don't get any additional asserts registered after the preceeding checks for != 0. Let me see if I can do anything about this.