https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96760
Thomas Koenig <tkoenig at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |tkoenig at gcc dot gnu.org Resolution|--- |INVALID --- Comment #1 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- The loop for (a = 20; a; a++) { increases a, which is a char, beyond its value range, and then tests against zero. This is undefined behavior. N4659, Clause 8: # If during the evaluation of an expression, the result is not mathematically # defined or not in the range of representable values for its type, the # behavior is undefined. If you had made a an unsigned type (for example an unsigned char), then the results would probably have been closer to what you expected.