https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84508
--- Comment #1 from Jeffrey Walton <noloader at gmail dot com> --- __m128d is a tad bit cleaner. It does not require the casts. $ cat test.c #include <emmintrin.h> int main(int argc, char* argv[]) { unsigned char t[16+1]; __m128d x = _mm_load_sd((const double *)(t+1)); _mm_store_pd((double*)t, x); return 0; } $ gcc -fsanitize=undefined test.c -o test.exe $ ./test.exe /usr/lib/gcc/x86_64-linux-gnu/6/include/emmintrin.h:140:10: runtime error: load of misaligned address 0x7ffd1cf2dd11 for type 'const double', which requires 8 byte alignment 0x7ffd1cf2dd11: note: pointer points here 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c0 c8 e0 ba c4