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-rc-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to