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