https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122227
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So basically it is the same as: *(volatile unsigned int*)data &= 0; With a known alignment of 1. Let me look into what changed between 4.5 and 4.6 because that might point to why GCC is correct here.
