https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96760
--- Comment #4 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- The increment is addition of 1 in type int (after integer promotions), followed by conversion back to char. Converting an out-of-range integer value to a narrower signed integer type is implementation-defined, not undefined, and GCC defines that conversion as a modulo operation.