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

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|---                         |INVALID
                 CC|                            |msebor at gcc dot gnu.org
           Keywords|                            |diagnostic
             Blocks|                            |84774

--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
The warning is correct (at -O0 GCC issues a -Wuninitialized for dereferencing
the uninitialized pBlb), but I suspect you're expecting it to be suppressed
because the memcpy call is eliminated.  I've simplified the test case and
changed the names in it to make it easier to see what I assume you're really
pointing out:

$ cat pr102386.c && gcc -O2 -S  -Wall pr102386.c
struct S { int n, a[8]; };

static int n = 0;                   // not const but not modified

void f (struct S *p)
{
  if (n)                            // folded to false by ccp2
    {
      void *q = p->a, *r = p->a;
      int n = 8;
      __builtin_memcpy (q, r, n);   // -Wrestrict
    }
}
pr102386.c: In function ‘f’:
pr102386.c:11:7: warning: ‘__builtin_memcpy’ accessing 8 bytes at offsets 4 and
4 overlaps 8 bytes at offset 4 [-Wrestrict]
   11 |       __builtin_memcpy (q, r, n);
      |       ^~~~~~~~~~~~~~~~~~~~~~~~~~

Although the memcpy call does ultimately end up removed (by ccp2) as
unreachable because the static global variable N is never set in the file, the
warning is issued before that happens, during folding.  This might change
if/when warnings are deferred until the end of compilation but I don't see this
use case as compelling enough to consider this particular instance a bug.  Feel
free to reopen it if you have a more compelling use case.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84774
[Bug 84774] [meta-bug] bogus/missing -Wrestrict

Reply via email to