https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71264
--- Comment #3 from ikonomisma at googlemail dot com --- I've just found a small change to the testcase that causes a *different* ICE to appear: void test(uint8_t *ptr, uint8_t *mask) { footype mv = {0,1,2,3}; for (size_t i = 0; i < 16; i += 4) { footype temp; memcpy(&temp, &ptr[i], sizeof(temp)); temp ^= mv; memcpy(&ptr[i], &temp, sizeof(temp)); } } Maybe this can help track down the cause.