http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57647
--- Comment #5 from Andreas Schwab <sch...@linux-m68k.org> --- ((unsigned long*)foo)++ and ((unsigned long *)foo++) are not equivalent expressions. The former is the same as foo = (char *)((unsigned long*)foo + 1), the latter is foo += sizeof(*foo) (and the cast has no effect).