https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106070
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Single file testcase: #include <stdio.h> unsigned int var_2 = 1; int var_4 = -1; signed char var_10 = (signed char)(-127 - 1); unsigned long long int arr_252; [[gnu::noipa]] void test() { for (unsigned a = 0; a < (unsigned char)var_10; a += 2) arr_252 = var_2 != var_4 ? var_4 : (long)var_2; } void test(); int main() { test(); printf("%llx\n", arr_252); if (arr_252 != 0xffffffffffffffff) __builtin_abort(); } (The [[gnu::noipa]] makes things easier for single file testcases so no inlining or other IPA passes on the function).