g++-4.0 did not optimize const double as a const, it put it in BSS. This bug
does not exist in g++-3.4, it also exist in g++-4.1.

The versions:
g++-3.4: gcc version 3.4.5 20050821 (prerelease) (Debian 3.4.4-8)
g++-4.0: gcc version 4.0.2 20050913 (prerelease) (Debian 4.0.1-7)
g++-4.1(gcc-snapshot): gcc version 4.1.0 20050904 (experimental)

$ cat const.cpp
//const.cpp

extern const double minute;

const double second = 1.0;
const double minute = 60.0 * second;
$ g++-3.4 -c const.cpp; nm const.o
00000000 R minute
00000008 r second
$ g++-3.4 -c -O3 const.cpp; nm const.o
00000000 R minute
$ g++-4.0 -c const.cpp; nm const.o
00000032 t _GLOBAL__I_minute
00000000 B minute
00000000 r second
00000000 t _Z41__static_initialization_and_destruction_0ii
$ g++-4.0 -c -O3 const.cpp; nm const.o
00000030 t _GLOBAL__I_minute
00000000 B minute
00000000 r second
00000000 t _Z41__static_initialization_and_destruction_0ii
$ /usr/lib/gcc-snapshot/bin/g++ -c const.cpp && nm const.o | c++filt
00000032 t global constructors keyed to minute
00000000 B minute
00000008 r second
00000000 t __static_initialization_and_destruction_0(int, int)
$ /usr/lib/gcc-snapshot/bin/g++ -c -O3 const.cpp && nm const.o | c++filt
00000030 t global constructors keyed to minute
00000000 B minute
00000000 t __static_initialization_and_destruction_0(int, int)

-- 
           Summary: do not optimize for a 'const double'
           Product: gcc
           Version: 4.0.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: lidaobing at gmail dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-linux-gnu
  GCC host triplet: i686-linux-gnu
GCC target triplet: i686-linux-gnu


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

Reply via email to