https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61185
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- But, if you want to use the source type before this conversion, make sure to also test stuff like: int main () { unsigned long long l = 0xffffffff00000001ULL; volatile int u = 9; u <<= l; return 0; } where the shift count after (int) conversion is in range, while before the conversion it is not (ILP32 and LP64 targets only here).