https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81471
--- Comment #4 from Gian-Carlo Pascutto <gcp at sjeng dot org> --- Further reduced testcase: #include <stdint.h> uint64_t f(uint64_t x) { return ((uint32_t)x << 55) | ((uint32_t)x >> -23); } This makes it more clear the code is UB, but AFAIK a compiler ICE doesn't fall under allowable UB :-)