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

            Bug ID: 83842
           Summary: extend -Wmemset-elt-size to memcpy and memmove
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

The -Wmemset-elt-size warning is helpful in pointing out the mistake of passing
the number of array elements to memset rather than the number of bytes.  The
same mistake can happen when calling memcpy and memmove.  It would be useful to
extend the -Wmemset-elt-size to those functions as well (either under the same
option or under a new one).

$ cat z.c && gcc -S -Wall z.c
int a[2];

void f (void)
{
  __builtin_memset (a, 0, 2);   // -Wmemset-elt-size (good)
}

void g (const int *p)
{
  __builtin_memcpy (a, p, 2);   // missing -Wmemcpy-elt-size
}

void h0 (void)
{
  __builtin_memmove (a, &a[1], 2);   // missing -Wmemmove-elt-size 
}

void h1 (void)
{
  __builtin_memmove (&a[1], a, 2);   // missing -Wmemmove-elt-size
}

z.c: In function ‘f’:
z.c:5:3: warning: ‘memset’ used with length equal to number of elements without
multiplication by element size [-Wmemset-elt-size]
   __builtin_memset (a, 0, 2);   // -Wmemset-elt-size (good)
   ^~~~~~~~~~~~~~~~

Reply via email to