https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114327
--- Comment #3 from Zdenek Sojka <zsojka at seznam dot cz> --- It's not only % 1; wrong results are also for: B x = foo (3, -0x9e9b9fe60); or for B foo (char c, B b) { return b / c; } B x = foo (-0x6, 0); /* 0 / -6 = 0 */ in all these cases, the result is the same: -1 << 64.