https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66066
--- Comment #3 from Marek Polacek <mpolacek at gcc dot gnu.org> --- The reason is that -1 << 0 is UB in C99, and we should reject the program only when the invalid shift is happening in a context where a constant expression is required. But if it turns out to break too many packages, I guess we'll have to revisit ;(.