http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59387
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Note already the chrec is {c_lsm.11_15, +, -1}_2 with char type everywhere (but the 2 which is int, but that is irrelevant), so the information that the decrement was performed carefully in non-wrapping type is lost at that point. Dunno if we want and whether it would be possible to generate a chrec with unsigned char type in that case instead (i.e. (char) {(unsigned char)c_lsm.11_15, +, 255}_2 instead), or some special bit on the chrec to tell us that it is wrapping.