http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57748
--- Comment #21 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- Richard, I have one question: does this code at expr.c line 4717 look right? I mean does the code in the if block use the offset at all? misalignp = true; to_rtx = gen_reg_rtx (mode); mem = expand_expr (tem, NULL_RTX, VOIDmode, EXPAND_WRITE); /* If the misaligned store doesn't overwrite all bits, perform rmw cycle on MEM. */ if (bitsize != GET_MODE_BITSIZE (mode)) { create_input_operand (&ops[0], to_rtx, mode); create_fixed_operand (&ops[1], mem); /* The movmisalign<mode> pattern cannot fail, else the assignment would silently be omitted. */ expand_insn (icode, 2, ops); mem = copy_rtx (mem); } what must be done to execute in that block? create a struct with an array of struct of bitfields or something? that happens to be unaligned, and have BLKmode?