https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112112
Thomas Koenig <tkoenig at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |tkoenig at gcc dot gnu.org --- Comment #5 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- (In reply to κΉλμ from comment #4) > From your perspective, do you think this could be a compiler bug? When > tested with various compiler options following the GCC bug reporting > guidelines, the binary compiles without any warnings, yet exhibits these > behaviors It definitely sounds wrong, there should be consistent results. Just to make the effect of the signs clear: Could you maybe run the program $ cat a.c #include <stdio.h> SIGN char v1 = -1; short v2 = 1; int main() { printf("result for " OPT " \"" STR "\" = %d\n", v1 <= v2); return 0; } with the shell script $ cat do_all.sh for s in signed unsigned "" do for o in -O0 -O1 -O2 -O3 do gcc $o -DOPT='"'$o'"' -DSTR='"'$s'"' -DSIGN=$s a.c && ./a.out done done and post the results? For reference, on x86_64 (which has signed chars) this gets result for -O0 "signed" = 1 result for -O1 "signed" = 1 result for -O2 "signed" = 1 result for -O3 "signed" = 1 result for -O0 "unsigned" = 0 result for -O1 "unsigned" = 0 result for -O2 "unsigned" = 0 result for -O3 "unsigned" = 0 result for -O0 "" = 1 result for -O1 "" = 1 result for -O2 "" = 1 result for -O3 "" = 1