https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82515
--- Comment #1 from Yibiao Yang <yangyibiao at nju dot edu.cn> --- While using clang to compile this code, the output is also 1. This, at a certain extent, indicates that the problem was caused by the arm-linux-gnueabic-gcc compiler. $ clang -w -static test.c; ./a.out 1 Here is the GIMPLE representation by gcc-x86. $ gcc -static -fdump-tree-gimple test.c; cat test.c.004t.gimple main () { _Bool D.2287; int D.2288; int t; t = -83685192; D.2287 = t < 0; D.2288 = (int) D.2287; printf ("%X\n", D.2288); } Here is the GIMPLE representation by gcc-arm. We can found that t was converted to long unsigned int in arm-linux-gnueabi-gcc. $ arm-linux-gnueabi-gcc -static -fdump-tree-gimple test.c; cat test.c.004t.gimple main () { long unsigned int t.0; _Bool D.4677; int D.4678; int t; t = -83685192; t.0 = (long unsigned int) t; D.4677 = t.0 > 4294967291; D.4678 = (int) D.4677; printf ("%X\n", D.4678); } Note that this issue was found by Yibiao Yang and shqking.