https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112563
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Maybe extern "C" { static void *memcpy (void *, const void *, decltype (sizeof 0)) __attribute__ ((weakref ("__sanitizer_internal_memcpy"))); static void *memmove (void *, const void *, decltype (sizeof 0)) __attribute__ ((weakref ("__sanitizer_internal_memmove"))); static void *memset (void *, int, decltype (sizeof 0)) __attribute__ ((weakref ("__sanitizer_internal_memset"))); } struct S { char s[512]; }; void foo (S *p, S *q) { *p = *q; } void bar (int, void *r, void *s) { memcpy (r, s, 512); } void baz (int, int, void *t, void *u) { __builtin_memcpy (t, u, 512); } works instead. But in any case, I'd use it only when what is in doesn't really work.