https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67382
--- Comment #1 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Uroš Bizjak from comment #0) > compiles to unoptimized code on x86_64-linux-gnu with -O2: > > movl $-1, %edx > movl $-4, %eax > subq $24, %rsp > addl %edx, %eax > adcl %edx, %eax > cmpl $-2, %eax > movl %eax, 12(%rsp) > jne .L5 > addq $24, %rsp > ret > .L5: > call abort Bah, the above is the *OPTIMIZED* case when we change the assignment to: unsigned int x = 0xFFFFFFFC; The *UNOPTIMIZED* code from the original, unmodified test is: movl $-1, %eax --> xorl %edx, %edx subq $24, %rsp --> addb $-1, %dl --> movl %eax, %edx --> adcl %eax, %edx adcl %edx, %eax cmpl $-2, %eax movl %eax, 12(%rsp) jne .L5 addq $24, %rsp ret .L5: call abort