https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120895
--- Comment #33 from Jakub Jelinek <jakub at gcc dot gnu.org> --- If you want a type that will be always 64-byte aligned, it can be easily defined, e.g. by typedef float m512 __attribute__ ((__vector_size__ (64), __may_alias__, __aligned__ (64))); and you can then use it instead of m512. Changing __m512 is an ABI change, it has been working like that for many years, has been intentional and is not going to change, no matter what you think is right. The __m512 type is really meant to be only used in AVX512F and later code, like __m256 is meant to be only used in AVX and later code and __m128 in SSE and later code, if you use it for something else, it behaves as a standard GNU vector_size attribute extension.