https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93781
--- Comment #2 from vfdff <zhongyunde at huawei dot com> --- For more test, I find the following case2 can get the expect result, while the case1 can't. == [case1] ====================================== unsigned int foo (unsigned int arg) { unsigned int C000003FE = 4; if ((int)(arg -3) < 0) C000003FE = 0x1 << arg; return C000003FE < 5; } == [case2] ====================================== unsigned int foo (unsigned int arg) { unsigned int C000003FE = 4; if (arg < 3) C000003FE = 0x1 << arg; return C000003FE < 5; }