https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65215
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I mean something like: unsigned int foo (unsigned char *p) { return ((unsigned int) p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]; } on strict align big endian machines, let me add another testcase.