[Bug middle-end/78918] New: missing -Wrestrict on memcpy copying over self

msebor at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sat Dec 24 00:32:00 GMT 2016


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

            Bug ID: 78918
           Summary: missing -Wrestrict on memcpy copying over self
           Product: gcc
           Version: 7.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: ---

Calling memcpy to copy objects that overlap violates the strict aliasing rules
and is undefined.  As the dump below shows, GCC eliminates some such calls
implying it "knows" the objects overlap (even though optimizing undefined code
seems questionable) but it doesn't issue any diagnostic.  With the -Wrestrict
warning GCC should flag at least the basic cases.

$ cat z.c && gcc -O2 -S -Wall -Wextra -Wpedantic -Wrestrict
-fdump-tree-optimized=/dev/stdout z.c
void f (void *p, void *q, unsigned n)
{
  p = q;
  __builtin_memcpy (p, q, n);
}

;; Function f (f, funcdef_no=0, decl_uid=1797, cgraph_uid=0, symbol_order=0)

f (void * p, void * q, unsigned int n)
{
  <bb 2> [100.00%]:
  return;

}


More information about the Gcc-bugs mailing list