https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66894
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- <bb 6>: d_21 = (char) a.0_6; if (d_21 != 0) goto <bb 7>; else goto <bb 8>; <bb 7>: _22 = (int) d_21; _23 = 1 / _22; iftmp.1_24 = (short int) _23; <bb 8>: # iftmp.1_25 = PHI <0(6), iftmp.1_24(7)> b = iftmp.1_25; if (a.0_6 != 0) goto <bb 9>; else goto <bb 3>; <bb 9>: if (d_21 != 0) ok, so here we derive from a.0_6 != 0 that (char) a.0_6 != 0 which isn't true obviously. Looks like we can't derive any inequality from truncations.