https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91029
--- Comment #8 from Bruno Haible <bruno at clisp dot org> --- > what is the reason to require that b >= 0 in all of this? In the 1990ies there were portability problems with a%b, b < 0. ANSI C said that the result was machine-dependent if a < 0 or b < 0. Fortunately the result is formally specified now, since ISO C 99. You're right: Since GCC emits the instructions for the % operation, and supposedly in compliance with ISO C and ISO C++, it can assume that negative operands behave as specified. > So, shouldn't the rules be Yes, these 4 rules look correct.