https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63406
Bug ID: 63406 Summary: -Warray-bounds false positive with -O3 Product: gcc Version: 4.9.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: jakub at gcc dot gnu.org int total_objs = 0; #ifndef N #define N 2 #endif void *objs[N]; void del_obj (void *obj) { int i = 0; while (i < total_objs && objs[i] != obj) ++i; if (i >= total_objs) return; while (++i < total_objs) objs[i - 1] = objs[i]; --total_objs; } Both loops seem to be unrolled N times (although the second loop clearly could be only executed N-1 times, because otherwise it triggers undefined behavior in the loop), and after unrolling the misdesigned -Warray-bounds warning complains on the last iteration of the unrolled loop.