https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70153
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- Slightly cleaned up test case: void foo () { unsigned long long int i = 0ULL; unsigned long long int v; v = 2ULL * ((1 + (unsigned long int) +1) * i); } Note the +1 - without the '+' this problem doesn't occur.