https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88889
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |jakub at gcc dot gnu.org, | |mark at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Indeed, the generated code looks correct, on the other side for valgrind it will be terribly hard to differentiate this case from when the source is unsigned long long *p = (unsigned long long *) &part[0]; if (*p == 0x37363534333231) __builtin_abort (); where it wants to complain loudly. The only way I see is some on the side data, debuginfo (if it contains information that the cmpq %rax, (%rsp) comes from inlined strcmp), or whatever other way we can tell valgrind about this. For this inlined strcmp case it would want to look at the bytes from memory until first '\0' inclusive and ignore any differences afterwards.