On Mon, Dec 18, 2017 at 05:03:22PM -0700, Martin Sebor wrote:
> > Your warning is about restrict and argument overlap, what does it have to do
> > with unprototyped calls?  Nothing.  There is no restrict in that case, and
> > it isn't handled as builtin if it doesn't match the builtin's prototype.
> 
> $ cat a.c && gcc -O2 -S -Wrestrict a.c
> void* memcpy ();
> 
> char a[5];
> 
> void f (void)
> {
>   memcpy (a, a + 1, 3);
> }
> a.c: In function ‘f’:
> a.c:7:3: warning: ‘memcpy’ accessing 3 bytes at offsets 0 and 1 overlaps 2
> bytes at offset 1 [-Wrestrict]
>    memcpy (a, a + 1, 3);
>    ^~~~~~~~~~~~~~~~~~~~
> 
> By insisting on using gimple_call_builtin_p() you're effectively
> arguing to disable the warning above, for no good reason that I
> can see.

Because it is wrong.

Consider e.g.
void *mempcpy ();

void
foo (int *a)
{
  mempcpy (a, (float *) a + 1, ' ');
}

mempcpy isn't defined in ISO C99, so it is fine if you define it yourself
with void *mempcpy (int *, float *, char); prototype and do whatever you
want in there.  Warning about restrict doesn't make sense in that case.

        Jakub

Reply via email to