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; }