Compiler version:

Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.4/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix
gcc version 3.4.4 20050721 (Red Hat 3.4.4-2)

System:

Linux tethys 2.6.12-1.1372_FC3 #1 Fri Jul 15 00:59:10 EDT 2005 i686 athlon i386
GNU/Linux


Code that illustrates the problem

#include <cstdio>

double ulongToDouble(unsigned long lval)
{
    double  work = 1.0;
    ((long *)&work)[1] |= lval & 0x000fffff;
    ((long *)&work)[0] |= lval & 0xfff00000 | 0x00080000;
    return work - 1.0;
}

int main(int argc, char **args)
{
    printf("%27.20f \n", ulongToDouble(0xffffffffUL));
    printf("%27.20f \n", ulongToDouble(0));
    return 1;
}

Unoptimized, correct output:

[EMAIL PROTECTED] workspace]$ g++ -Wall bug.cpp
[EMAIL PROTECTED] workspace]$ ./a.out
     0.99999999988358467817
     0.00000000011641532183

Optimized:

[EMAIL PROTECTED] workspace]$ g++ -Wall -O2 bug.cpp
[EMAIL PROTECTED] workspace]$ ./a.out
     0.00000000000000000000
     0.00000000000000000000

Do you really want the bug.ii file? It is rather lengthy and I don't see how to
attach it.

Chuck

-- 
           Summary: code that compiles and runs correctly with no
                    optimization but code optimizes to nothing.
           Product: gcc
           Version: 3.4.4
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: charris208 at comcast dot net
                CC: gcc-bugs at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23961

Reply via email to