https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112563
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So, what is the Solaris/sparc native as syntax for something similar? Strangely, non-weak aliases in config/sparc/sysv4.h use the x = y syntax rather than .set x, y that is used on most targets. Would using extern "C" void *memcpy (void *, const void *, decltype (sizeof 0)) __asm ("__sanitizer_internal_memcpy"); extern "C" void *memmove (void *, const void *, decltype (sizeof 0)) __asm ("__sanitizer_internal_memmove"); extern "C" void *memset (void *, int, decltype (sizeof 0)) __asm ("__sanitizer_internal_memset"); extern "C" void *__builtin_memcpy (void *, const void *, decltype (sizeof 0)) __asm ("__sanitizer_internal_memcpy"); extern "C" void *__builtin_memmove (void *, const void *, decltype (sizeof 0)) __asm ("__sanitizer_internal_memmove"); extern "C" void *__builtin_memset (void *, int, decltype (sizeof 0)) __asm ("__sanitizer_internal_memset"); instead work there? At least on x86_64-linux, I get the same effects when using e.g. void foo (void *r, void *s, void *t, void *u) { memcpy (r, s, 512); __builtin_memcpy (t, u, 512); } with -O2 -mstringop-strategy=libcall