[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