https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108910
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- As I've tried to explain in the past, C/C++ considers float * and float *__attribute__((aligned (64))) types to be compatible, similarly to int and int __attribute__((aligned (64))), so in calling convention one should ignore alignment on scalar types of passed arguments at least, because they can be pretty much random. Though extern void foo (long, long, long); void baz (void *); void bar (void *p) { long __attribute__((aligned (64))) q = 1; asm volatile ("" : "+r" (q)); foo (0.0L, q, q); } doesn't ICE.