Package: g++-4.2 Version: 4.2.2-3 Severity: minor
the following snippet of code shows two cases of bad optimization behaviour on gcc 4.1.3 and 4.2.3 (debian unstable). #define PTS_MASK ((1LL << 33)-1) #define PTS_WRAP (1LL << 33) #define PTS_WRAP2 (1LL << 32) long long ptsdiff_mod2_33(long long a, long long b) { long long d = (b + PTS_WRAP - a) & PTS_MASK; return (d >= PTS_WRAP2) ? d - PTS_WRAP : d; } the following assembler code is generated: .file "test4.cpp" .text .align 2 .p2align 4,,15 .globl _Z15ptsdiff_mod2_33xx .type _Z15ptsdiff_mod2_33xx, @function _Z15ptsdiff_mod2_33xx: .LFB2: pushl %ebp .LCFI0: movl %esp, %ebp .LCFI1: movl 16(%ebp), %eax movl 20(%ebp), %edx pushl %ebx .LCFI2: addl $0, %eax adcl $2, %edx subl 8(%ebp), %eax sbbl 12(%ebp), %edx movl %eax, %ecx movl %edx, %ebx andl $1, %ebx cmpl $0, %ebx jl .L2 jle .L2 addl $0, %ecx adcl $-2, %ebx .L2: movl %ebx, %edx movl %ecx, %eax popl %ebx popl %ebp ret .LFE2: .size _Z15ptsdiff_mod2_33xx, .-_Z15ptsdiff_mod2_33xx .globl __gxx_personality_v0 .ident "GCC: (GNU) 4.1.3 20071019 (prerelease) (Debian 4.1.2-17)" .section .note.GNU-stack,"",@progbits two obvious optimization faults: 1) addl $0, reg is totally pointless 2) jl label followed by jle label is equivalent to just jle label i reported that bug too to gcc, but their mailer blocked the mail. -- System Information: Debian Release: lenny/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.23.1 (PREEMPT) Locale: [EMAIL PROTECTED], [EMAIL PROTECTED] (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages g++-4.2 depends on: ii gcc-4.2 4.2.2-3 The GNU C compiler ii gcc-4.2-base 4.2.2-3 The GNU Compiler Collection (base ii libc6 2.6.1-6 GNU C Library: Shared libraries ii libstdc++6-4.2-dev 4.2.2-3 The GNU Standard C++ Library v3 (d g++-4.2 recommends no packages. -- no debconf information -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]