Compiling the Code

---------------------------------------
#include <iostream>
#include <iomanip>
typedef long long unsigned Significant;

Significant conv(double v)
{
 return *(Significant*)&v;
}

double v=1.0;
int main(unsigned argc,char* args[])
{
 std::cerr<<std::hex<<conv(v)<<"\n";
}
---------------------------------------

with -O1 gives the correct result:

  0x3ff0000000000000

however compiling the same code with -O2 gives (for example):

  0xb7f7c8d8b7f7fff4

The assembler output:
---------------------------------------
_Z4convd:
.LFB1453:
        pushl   %ebp
.LCFI2:
        movl    %esp, %ebp
.LCFI3:
        subl    $8, %esp        ;dont read the value form stack
.LCFI4:
        movl    -8(%ebp), %eax
        movl    -4(%ebp), %edx
        leave
        ret
---------------------------------------

Output of:
 g++ -v


Target: i686-pc-linux-gnu
Configured with: /var/tmp/portage/gcc-4.1.1/work/gcc-4.1.1/configure 
 --prefix=/usr 
 --bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.1.1 
 --includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include 
 --datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1 
 --mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man 
 --infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/info 
 --with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.1.1/include/g++-v4 
 --host=i686-pc-linux-gnu 
 --build=i686-pc-linux-gnu 
 --disable-altivec 
 --enable-nls 
 --without-included-gettext 
 --with-system-zlib 
 --disable-checking 
 --disable-werror 
 --disable-libunwind-exceptions 
 --disable-multilib 
 --disable-libmudflap 
 --disable-libssp 
 --disable-libgcj 
 --enable-languages=c,c++,fortran 
 --enable-shared 
 --enable-threads=posix 
 --enable-__cxa_atexit 
 --enable-clocale=gnu
Thread model: posix
gcc version 4.1.1 (Gentoo 4.1.1)

Best regards

Hans Buchmann


-- 
           Summary: double: conversion to bits
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: hans dot buchmann at fhso dot ch
 GCC build triplet:  i686-pc-linux-gnu
  GCC host triplet:  i686-pc-linux-gnu
GCC target triplet:  i686-pc-linux-gnu


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

Reply via email to