https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84762
--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> --- The problem in trunk happens at expand time already: it loads the 32-bit word it created from stack, and then shifts it left by -8 bits.