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