https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70941
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- That looks fine indeed. The r217348 to r217349 *.original diff is similar (there is already the (OVF), but that is probably not it, after all we strip OVF flag away during gimplification: - a = (char) ((-(unsigned char) b - (unsigned char) ((signed char) ((signed char) d != 0 && (signed char) c != 0) ^ -128(OVF))) + 19); + a = (char) (((unsigned char) -((signed char) ((signed char) d != 0 && (signed char) c != 0) ^ -128(OVF)) - (unsigned char) b) + 19);