https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86223

            Bug ID: 86223
           Summary: missing -Warray-bounds on an access to an implicitly
                    zeroed out array
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

When both bounds of an array index are out of range, GCC diagnoses the use of
the index to refer beyond the bounds of a local array whose elements have all
been explicitly initialized, but it fails to diagnose the same out-of-bounds
access when the array has not been fully initialized.

$ cat d.c && gcc -O2 -S -Wall d.c
void f (int);

void g (unsigned i)
{
  if (i < 5 || 123 < i)
    i = 5;

  int a[3] = { 0 };
  f (a[i]);           // missing -Warray-bounds
}

void h (unsigned i)
{
  if (i < 5 || 123 < i)
    i = 5;

  int a[3] = { 0, 0, 0 };
  f (a[i]);           // -Warray-bounds (good)
}

d.c: In function ‘h’:
d.c:18:3: warning: array subscript 5 is above array bounds of ‘int[3]’
[-Warray-bounds]
   f (a[i]);           // -Warray-bounds (good)
   ^~~~~~~~

Reply via email to