https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69224
Bug ID: 69224 Summary: -Warray-bounds false positive with -O3 and struct pointer parameter Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: nightstrike at gmail dot com Target Milestone: --- There are a lot of -Warray-bounds false positives at -O3, but this one is interesting: struct S { int a; int b; int c; int d; int e; float x[5]; float y[5]; // Comment these two lines out to float z[5 - 1]; // remove the warning }; void f(struct S *s, float a[], float **b, float c[]) { if ((s->b == 1) && (s->d > 0)) { for (int i = 0; i < s->a; i++) { if (a[i] != 0.0) { for (int j = 0; j < s->d - 1; j++) { if ((c[i] >= s->x[j]) && (c[i] <= s->x[j + 1])) { b[2*j][i] = s->x[j]; break; } } } } } } If you comment out those two variables in the struct, both of which are unused, then the warning goes away. Note that in this particular case, since the loop boundary is passed in at run time, there's no way for the compiler to ever know if we are exceeding the array bounds. I've included a few of the other -Warray-bounds bugs in the See Also lists in the hopes that maybe some of these would be related.