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