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

            Bug ID: 97495
           Summary: -Wstringop-overflow where -Warray-bounds would be more
                    appropriate
           Product: gcc
           Version: 11.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: ---

-Wstringop-overflow is documented to "Warn for calls to string manipulation
functions such as memcpy and strcpy that are determined to overflow the
destination buffer" but in GCC 11 it's issued even for user-defined functions
that don't manipulate strings.  GCC should issue -Warray-bounds for those
instead.  In addition, mentioning array indices rather than byte counts might
make the warnings easier to interpret.

$ cat z.c && gcc -O2 -S -Wall z.c
void f (int[static 4]);

void g (void)
{
  int a[2];
  f (a);
}

z.c: In function ‘g’:
z.c:6:3: warning: ‘f’ accessing 16 bytes in a region of size 8
[-Wstringop-overflow=]
    6 |   f (a);
      |   ^~~~~
z.c:6:3: note: referencing argument 1 of type ‘int *’
z.c:1:6: note: in a call to function ‘f’
    1 | void f (int[static 4]);
      |      ^


Clang issues -Warray-bounds as expected:

z.c:6:3: warning: array argument is too small; contains 2 elements, callee
      requires at least 4 [-Warray-bounds]
  f (a);
  ^  ~
z.c:1:12: note: callee declares array parameter as static here
void f (int[static 4]);
           ^~~~~~~~~~
1 warning generated.

Reply via email to