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

            Bug ID: 82612
           Summary: missing -Warray-bounds on a non-zero offset from the
                    address of a non-array object
           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: ---

More testing of my -Warray-bounds patch for pr82588 et al. exposed a missing
warning on the following corner case (and similar cases like it).

$ cat a.c && gcc -O2 -S -Warray-bounds a.c
int g (int i)
{
  int *p = &i;

  return p[2];
}

To detect this the implementation could check the operand of the address-of
operator and trigger if it's a non-array object.  It should even be possible to
detect the out-of-bounds index in the following:

int a[3];
int b[5];

int f (int i)
{
  int *p = i < 0 ? a : b;

  return p[7];
}

Reply via email to