This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/28016] New: GCC 4.2 emitting static template constants as global symbols?
- From: "bredelin at ucla dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 13 Jun 2006 18:07:04 -0000
- Subject: [Bug c++/28016] New: GCC 4.2 emitting static template constants as global symbols?
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
I have some software that uses the BOOST matrix library UBLAS (1.33.1). This
software compiles and links with GCC 4.1.1 (Debian Linux system - GNU ld) but
gives linking errors with GCC 4.2:
substitution.o:(.data+0x0): multiple definition of
`_ZN5boost7numeric5ublas21scalar_divides_assignIT_T0_E8computedE'
alignment.o:(.data+0x0): first defined here
Here is from the definition of the static const member of a template class in
boost/numeric/ublas/functional.hpp:
template<class T1, class T2>
struct scalar_divides_assign:
public scalar_binary_assign_functor<T1, T2> {
... stuff ...
};
template<class T1, class T2>
const bool scalar_divides_assign<T1,T2>::computed = true;
GCC 4.2, but not 4.1 actually emits this constant in the global data section.
With 4.2:
$ nm alignment.o | grep divides
0000000000000180 t
_GLOBAL__I__ZN5boost7numeric5ublas21scalar_divides_assignIT_T0_E8computedE
0000000000000000 D
_ZN5boost7numeric5ublas21scalar_divides_assignIT_T0_E8computedE
With 4.1 neither of these two symbols (or is it one symbol, mentioned twice?)
is emitted.
--
Summary: GCC 4.2 emitting static template constants as global
symbols?
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: bredelin at ucla dot edu
GCC build triplet: x86_64-unknown-linux-gnu
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28016