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