string/memmove.c has rettype inhibit_loop_to_libcall MEMMOVE (a1const void *a1, a2const void *a2, size_t len) { unsigned long int dstp = (long int) dest; unsigned long int srcp = (long int) src; /* This test makes the forward copying code be used whenever possible. Reduces the working set. */ if (dstp - srcp >= len) /* *Unsigned* compare! */ ^^^^^^^^^^^^ This doesn't work with tagged address. { ... } Processor specific memmove may have the same issue. sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S: 247 L(start_movsb): 248 mov %RDX_LP, %RCX_LP 249 cmp %RSI_LP, %RDI_LP ^^^^^^^^^^^^^^^^^^^^^^^^ This has the same issue. 250 jb 1f
Overlapping pointers should have the same tag.