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

            Bug ID: 92363
           Summary: wrong subscript value printed when indexing into an
                    empty array
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

The -Warray-bounds code takes a shortcut when it detects an access to an array
whose lower bound is equal to its upper bound and prints the same warning
message regardless of the subscript:

  /* Empty array.  */
  if (up_bound && tree_int_cst_equal (low_bound, up_bound_p1))
    warned = warning_at (location, OPT_Warray_bounds,
                         "array subscript %E is above array bounds of %qT",
                         low_bound, artype);

That can cause the message to mention the wrong subscript value such as in the
test case below:

$ cat b.c && gcc -O2 -S -Wall -Warray-bounds b.c
int f (void)
{
  int a[] = { };
  return a[-1];
}
b.c: In function ‘f’:
b.c:4:11: warning: array subscript 0 is above array bounds of ‘int[0]’
[-Warray-bounds]
    4 |   return a[-1];
      |          ~^~~~
b.c:3:7: note: while referencing ‘a’
    3 |   int a[] = { };
      |       ^

Reply via email to