https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109821
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Using: typedef uint64_t ua64_t __attribute__((aligned(1), may_alias)); #define UNALIGNED_LOAD64(_p) (*reinterpret_cast<const ua64_t *>(_p)) #define UNALIGNED_STORE64(_p, _val) (*reinterpret_cast<ua64_t *>(_p) = (_val)) Does fix the "bug" too. Though not the buffer overflow. increasing src to 100 bytes fixes that.