https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88775
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> --- "hello" string literal surely can be followed by anything else, but don't we consider it UB? int foo (void) { int a = 0; for (int i = 0; i < 32; i++) a += "hello"[i]; return a; } warning: iteration 6 invokes undefined behavior [-Waggressive-loop-optimizations] a += "hello"[i]; ~~~~~~~^~~ So, __builtin_memcpy (xyz, &MEM[(void *)"hello" + 5B], 5); is the same kind of UB. Note, I don't see any: __builtin_memcpy ("hello", ..., 5); in my IL, that would be another UB unless string literals are writable.