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.