Package: gcc-4.4 Version: 4.4.3-4 Severity: grave Since gcc-4.4 version 4.4.3-4 (and yes -5 is still affected), gcc miscompiles __builtin_expect when no optimization is set (at least).
Test case: int foo(int t) { if (__builtin_expect(t & 0x100, 0)) return 0; return 1; } Bad assembly: gcc -O0 -S -o /dev/stdout a.c .file "a.c" .text .globl foo .type foo, @function foo: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 movq %rsp, %rbp .cfi_offset 6, -16 .cfi_def_cfa_register 6 movl %edi, -4(%rbp) movl -4(%rbp), %eax cltq andl $256, %eax movzbl %al, %eax <--------------------- testq %rax, %rax je .L2 movl $0, %eax jmp .L3 .L2: movl $1, %eax .L3: leave ret .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (Debian 4.4.3-5) 4.4.3" .section .note.GNU-stack,"",@progbits The buggy line is marked with the arrow. gcc-4.4 version 4.4.3-3 is correct and doesn't perform the buggy movzbl. -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org