emitting templates, differences between g++ 3.2 and 3.3?

bert hubert ahu@ds9a.nl
Tue May 27 13:05:00 GMT 2003


Hi,

I'm trying to move the ISIP production system
http://www.isip.msstate.edu/projects/speech/software/ to g++ 3.3 and
am encountering some problems.

It appears that where g++ 3.2 did not emit a lot of template functions to
the .o as 'T', 3.3 often does.

A somewhat mangled version of the diff between the outputs of nm is below,
lots of weak symbols suddenly becoming T. This is based on:

~/cvs/ISIP/class/math/scalar/MScalar$ g++
-I/home/ahu/cvs/include -Wall -ftemplate-depth-50 -c -O6 -o
mscl_02.float.float32~complex-3.3.o mscl_02.cc
-DISIP_TEMPLATE_TARGET=float,float32 -DISIP_TEMPLATE_T0=float
-DISIP_TEMPLATE_T1=float32 -DISIP_TEMPLATE_T2=mscl_02.float.float32
-DISIP_TEMPLATE_float_float32 -DISIP_TEMPLATE_complex

versus:

~/cvs/ISIP/class/math/scalar/MScalar$ g++-3.2
-I/home/ahu/cvs/include -Wall -ftemplate-depth-50 -c -O6 -o
mscl_02.float.float32~complex-3.2.o mscl_02.cc
-DISIP_TEMPLATE_TARGET=float,float32 -DISIP_TEMPLATE_T0=float
-DISIP_TEMPLATE_T1=float32 -DISIP_TEMPLATE_T2=mscl_02.float.float32
-DISIP_TEMPLATE_float_float32 -DISIP_TEMPLATE_complex

Any clues on how to get gcc to do the old thing? I now end up with heaps and
heaps of duplicate symbols on linking. 

I tried -fno-implicit-templates, lowering -ftemplate-depth, removing -O,
playing with -O, -fno-implicit-inline-templates all to no effect.

Thanks.

--- 3.2.nm	2003-05-27 14:32:13.000000000 +0200
+++ 3.3.nm	2003-05-27 14:32:07.000000000 +0200
@@ -20,227 +20,167 @@
 U Error::handle(SysString const&, wchar_t const*, long, char*, long, Error::EXIT, SysString const&)
 U Random::GLOBAL_UNIFORM
 U Random::GLOBAL_GAUSSIAN
-W Random::seed(long)
-W String::String[in-charge](wchar_t const*)
-W String::String[in-charge](long)
-W String::~String [in-charge]()
-W Console::decreaseIndention()
-W Console::increaseIndention()
 U Console::put(wchar_t const*)
 U Console::put(SysString const&)
 U Console::cons_d
-W MScalar<double, double>::assign(MScalar<double, double> const&)
-W bool MScalar<double, double>::assign<double>(double)
-W MScalar<double, double>::MScalar[in-charge](MScalar<double, double> const&)
-W MScalar<double, double>::MScalar[in-charge]()
-W MScalar<double, double>::~MScalar [in-charge]()
-W MScalar<float, float>::centerClip(float, float, float)
-W MScalar<float, float>::abs(float)
-W MScalar<float, float>::add(float, float)
-W MScalar<float, float>::bls(float, float)
-W MScalar<float, float>::bor(float, float)
-W MScalar<float, float>::brs(float, float)
-W MScalar<float, float>::cos(float)
-W MScalar<float, float>::div(float, float)
-W MScalar<float, float>::exp(float)
-W MScalar<float, float>::exp()
-W MScalar<float, float>::log(float)
-W MScalar<float, float>::max(float, float)
-W MScalar<float, float>::min(float, float)
-W MScalar<float, float>::mod(float, float)
-W MScalar<float, float>::neg(float)
-W MScalar<float, float>::pow(float)
-W MScalar<float, float>::pow(float, float)
-W MScalar<float, float>::sin(float)
-W MScalar<float, float>::sub(float, float)
-W MScalar<float, float>::tan(float)
-W MScalar<float, float>::acos(float)
-W MScalar<float, float>::acos()
-W MScalar<float, float>::asin(float)
-W MScalar<float, float>::asin()
-W MScalar<float, float>::atan(float)
-W MScalar<float, float>::atan()
-W MScalar<float, float>::band(float, float)
-W MScalar<float, float>::bxor(float, float)
-W float MScalar<float, float>::ceil<float>(float)
-W MScalar<float, float>::cosh(float)
-W MScalar<float, float>::exp2(float)
-W MScalar<float, float>::exp2()
-W MScalar<float, float>::log2(float)
-W MScalar<float, float>::mult(float, float)
+T MScalar<double, double>::bls(double, double)
+T MScalar<double, double>::bor(double, double)
+T MScalar<double, double>::brs(double, double)
+T MScalar<double, double>::mod(double, double)
+T MScalar<double, double>::band(double, double)
+T MScalar<double, double>::bxor(double, double)
+T MScalar<double, double>::bcmpl(double)
+T MScalar<double, double>::fraction(double)
+T MScalar<double, double>::operator%=(double)
+T MScalar<float, float>::bls(float, float)
+T MScalar<float, float>::bor(float, float)
+T MScalar<float, float>::brs(float, float)
+T MScalar<float, float>::mod(float, float)
+T MScalar<float, float>::band(float, float)
+T MScalar<float, float>::bxor(float, float)
 U MScalar<float, float>::rand(Random&)
 U MScalar<float, float>::rand(float, float, Random&)
-W MScalar<float, float>::sign(float)
-W MScalar<float, float>::sinh(float)
-W MScalar<float, float>::sqrt(float)
-W MScalar<float, float>::tanh(float)
-W MScalar<float, float>::acosh(float)
-W MScalar<float, float>::acosh()
-W MScalar<float, float>::asinh(float)
-W MScalar<float, float>::asinh()
-W MScalar<float, float>::atanh(float)
-W MScalar<float, float>::atanh()
-W MScalar<float, float>::bcmpl(float)
-W MScalar<float, float>::clear(Integral::CMODE)
-W MScalar<float, float>::exp10(float)
-W MScalar<float, float>::exp10()
-W float MScalar<float, float>::floor<float>(float)
+T MScalar<float, float>::bcmpl(float)
 U MScalar<float, float>::grand(float, float, Random&)
-W MScalar<float, float>::limit(float, float, float)
-W MScalar<float, float>::log10(float)
-W MScalar<float, float>::log1p(float)
-W MScalar<float, float>::rceil(float)
-W float MScalar<float, float>::round<float>(float)
-W MScalar<float, float>::assign(String const&)
-W MScalar<float, float>::assign(MScalar<float, float> const&)
-W bool MScalar<float, float>::assign<MScalar<double, double> >(MScalar<double, double>)
-W bool MScalar<float, float>::assign<MScalar<unsigned char, unsigned char> >(MScalar<unsigned char, unsigned char>)
-W bool MScalar<float, float>::assign<MScalar<long, long> >(MScalar<long, long>)
-W bool MScalar<float, float>::assign<MScalar<unsigned long, unsigned long> >(MScalar<unsigned long, unsigned long>)
-W bool MScalar<float, float>::assign<MScalar<short, short> >(MScalar<short, short>)
-W bool MScalar<float, float>::assign<MScalar<unsigned short, unsigned short> >(MScalar<unsigned short, unsigned short>)
-W bool MScalar<float, float>::assign<MScalar<long long, long long> >(MScalar<long long, long long>)
-W bool MScalar<float, float>::assign<MScalar<unsigned long long, unsigned long long> >(MScalar<unsigned long long, unsigned long long>)
-W bool MScalar<float, float>::assign<double>(double)
-W bool MScalar<float, float>::assign<float>(float)
-W bool MScalar<float, float>::assign<int>(int)
-W bool MScalar<float, float>::assign<long>(long)
-W MScalar<float, float>::rfloor(float)
-W MScalar<float, float>::square(float)
-W MScalar<float, float>::square()
-W MScalar<float, float>::inverse(float)
-W MScalar<float, float>::inverse()
-W MScalar<float, float>::fraction(float)
-W MScalar<float, float>::limitMag(float, float, float)
+T MScalar<float, float>::fraction(float)
 U MScalar<float, float>::DEF_VALUE
-W MScalar<float, float>::factorial(float)
-W MScalar<float, float>::MScalar[in-charge](float)
-W MScalar<float, float>::MScalar[in-charge]()
-W MScalar<float, float>::~MScalar [in-charge]()
-W MScalar<float, float>::operator/=(float)
-W MScalar<float, float>::operator-=(float)
-W MScalar<float, float>::operator*=(float)
-W MScalar<float, float>::operator--(int)
-W MScalar<float, float>::operator--()
-W MScalar<float, float>::operator+=(float)
-W MScalar<float, float>::operator++(int)
-W MScalar<float, float>::operator++()
-W MScalar<float, float>::operator%=(float)
-W MScalar<unsigned char, unsigned char>::assign(MScalar<unsigned char, unsigned char> const&)
-W bool MScalar<unsigned char, unsigned char>::assign<unsigned char>(unsigned char)
-W MScalar<unsigned char, unsigned char>::MScalar[in-charge](MScalar<unsigned char, unsigned char> const&)
-W MScalar<unsigned char, unsigned char>::MScalar[in-charge]()
-W MScalar<unsigned char, unsigned char>::~MScalar [in-charge]()
-W MScalar<long, long>::assign(MScalar<long, long> const&)
-W bool MScalar<long, long>::assign<long>(long)
-W MScalar<long, long>::MScalar[in-charge](MScalar<long, long> const&)
-W MScalar<long, long>::MScalar[in-charge]()
-W MScalar<long, long>::~MScalar [in-charge]()
-W MScalar<unsigned long, unsigned long>::assign(MScalar<unsigned long, unsigned long> const&)
-W bool MScalar<unsigned long, unsigned long>::assign<unsigned long>(unsigned long)
-W MScalar<unsigned long, unsigned long>::MScalar[in-charge](MScalar<unsigned long, unsigned long> const&)
-W MScalar<unsigned long, unsigned long>::MScalar[in-charge]()
-W MScalar<unsigned long, unsigned long>::~MScalar [in-charge]()
-W MScalar<short, short>::assign(MScalar<short, short> const&)
-W bool MScalar<short, short>::assign<short>(short)
-W MScalar<short, short>::MScalar[in-charge](MScalar<short, short> const&)
-W MScalar<short, short>::MScalar[in-charge]()
-W MScalar<short, short>::~MScalar [in-charge]()
-W MScalar<unsigned short, unsigned short>::assign(MScalar<unsigned short, unsigned short> const&)
-W bool MScalar<unsigned short, unsigned short>::assign<unsigned short>(unsigned short)
-W MScalar<unsigned short, unsigned short>::MScalar[in-charge](MScalar<unsigned short, unsigned short> const&)
-W MScalar<unsigned short, unsigned short>::MScalar[in-charge]()
-W MScalar<unsigned short, unsigned short>::~MScalar [in-charge]()
-W MScalar<long long, long long>::assign(MScalar<long long, long long> const&)
-W bool MScalar<long long, long long>::assign<long long>(long long)
-W MScalar<long long, long long>::MScalar[in-charge](MScalar<long long, long long> const&)
-W MScalar<long long, long long>::MScalar[in-charge]()
-W MScalar<long long, long long>::~MScalar [in-charge]()
-W MScalar<unsigned long long, unsigned long long>::assign(MScalar<unsigned long long, unsigned long long> const&)
-W bool MScalar<unsigned long long, unsigned long long>::assign<unsigned long long>(unsigned long long)
-W MScalar<unsigned long long, unsigned long long>::MScalar[in-charge](MScalar<unsigned long long, unsigned long long> const&)
-W MScalar<unsigned long long, unsigned long long>::MScalar[in-charge]()
-W MScalar<unsigned long long, unsigned long long>::~MScalar [in-charge]()
+T MScalar<float, float>::operator%=(float)
+U MScalar<unsigned char, unsigned char>::CLASS_NAME
+T MScalar<unsigned char, unsigned char>::abs(unsigned char)
+T MScalar<unsigned char, unsigned char>::cos(unsigned char)
+T MScalar<unsigned char, unsigned char>::neg(unsigned char)
+T MScalar<unsigned char, unsigned char>::sin(unsigned char)
+T MScalar<unsigned char, unsigned char>::tan(unsigned char)
+T MScalar<unsigned char, unsigned char>::acos(unsigned char)
+T MScalar<unsigned char, unsigned char>::asin(unsigned char)
+T MScalar<unsigned char, unsigned char>::atan(unsigned char)
+T MScalar<unsigned char, unsigned char>::cosh(unsigned char)
+T MScalar<unsigned char, unsigned char>::sign(unsigned char)
+T MScalar<unsigned char, unsigned char>::sinh(unsigned char)
+T MScalar<unsigned char, unsigned char>::tanh(unsigned char)
+T MScalar<unsigned char, unsigned char>::acosh(unsigned char)
+T MScalar<unsigned char, unsigned char>::asinh(unsigned char)
+T MScalar<unsigned char, unsigned char>::atanh(unsigned char)
+T MScalar<unsigned char, unsigned char>::rceil(unsigned char)
+T MScalar<unsigned char, unsigned char>::rfloor(unsigned char)
+U MScalar<long, long>::CLASS_NAME
+T MScalar<long, long>::cos(long)
+T MScalar<long, long>::sin(long)
+T MScalar<long, long>::tan(long)
+T MScalar<long, long>::acos(long)
+T MScalar<long, long>::asin(long)
+T MScalar<long, long>::atan(long)
+T MScalar<long, long>::cosh(long)
+T MScalar<long, long>::sinh(long)
+T MScalar<long, long>::tanh(long)
+T MScalar<long, long>::acosh(long)
+T MScalar<long, long>::asinh(long)
+T MScalar<long, long>::atanh(long)
+T MScalar<long, long>::rceil(long)
+T MScalar<long, long>::rfloor(long)
+U MScalar<unsigned long, unsigned long>::CLASS_NAME
+T MScalar<unsigned long, unsigned long>::abs(unsigned long)
+T MScalar<unsigned long, unsigned long>::cos(unsigned long)
+T MScalar<unsigned long, unsigned long>::neg(unsigned long)
+T MScalar<unsigned long, unsigned long>::sin(unsigned long)
+T MScalar<unsigned long, unsigned long>::tan(unsigned long)
+T MScalar<unsigned long, unsigned long>::acos(unsigned long)
+T MScalar<unsigned long, unsigned long>::asin(unsigned long)
+T MScalar<unsigned long, unsigned long>::atan(unsigned long)
+T MScalar<unsigned long, unsigned long>::cosh(unsigned long)
+T MScalar<unsigned long, unsigned long>::sign(unsigned long)
+T MScalar<unsigned long, unsigned long>::sinh(unsigned long)
+T MScalar<unsigned long, unsigned long>::tanh(unsigned long)
+T MScalar<unsigned long, unsigned long>::acosh(unsigned long)
+T MScalar<unsigned long, unsigned long>::asinh(unsigned long)
+T MScalar<unsigned long, unsigned long>::atanh(unsigned long)
+T MScalar<unsigned long, unsigned long>::rceil(unsigned long)
+T MScalar<unsigned long, unsigned long>::rfloor(unsigned long)
+U MScalar<short, short>::CLASS_NAME
+T MScalar<short, short>::cos(short)
+T MScalar<short, short>::sin(short)
+T MScalar<short, short>::tan(short)
+T MScalar<short, short>::acos(short)
+T MScalar<short, short>::asin(short)
+T MScalar<short, short>::atan(short)
+T MScalar<short, short>::cosh(short)
+T MScalar<short, short>::sinh(short)
+T MScalar<short, short>::tanh(short)
+T MScalar<short, short>::acosh(short)
+T MScalar<short, short>::asinh(short)
+T MScalar<short, short>::atanh(short)
+T MScalar<short, short>::rceil(short)
+T MScalar<short, short>::rfloor(short)
+U MScalar<unsigned short, unsigned short>::CLASS_NAME
+T MScalar<unsigned short, unsigned short>::abs(unsigned short)
+T MScalar<unsigned short, unsigned short>::cos(unsigned short)
+T MScalar<unsigned short, unsigned short>::neg(unsigned short)
+T MScalar<unsigned short, unsigned short>::sin(unsigned short)
+T MScalar<unsigned short, unsigned short>::tan(unsigned short)
+T MScalar<unsigned short, unsigned short>::acos(unsigned short)
+T MScalar<unsigned short, unsigned short>::asin(unsigned short)
+T MScalar<unsigned short, unsigned short>::atan(unsigned short)
+T MScalar<unsigned short, unsigned short>::cosh(unsigned short)
+T MScalar<unsigned short, unsigned short>::sign(unsigned short)
+T MScalar<unsigned short, unsigned short>::sinh(unsigned short)
+T MScalar<unsigned short, unsigned short>::tanh(unsigned short)
+T MScalar<unsigned short, unsigned short>::acosh(unsigned short)
+T MScalar<unsigned short, unsigned short>::asinh(unsigned short)
+T MScalar<unsigned short, unsigned short>::atanh(unsigned short)
+T MScalar<unsigned short, unsigned short>::rceil(unsigned short)
+T MScalar<unsigned short, unsigned short>::rfloor(unsigned short)
+U MScalar<long long, long long>::CLASS_NAME
+T MScalar<long long, long long>::cos(long long)
+T MScalar<long long, long long>::sin(long long)
+T MScalar<long long, long long>::tan(long long)
+T MScalar<long long, long long>::acos(long long)
+T MScalar<long long, long long>::asin(long long)
+T MScalar<long long, long long>::atan(long long)
+T MScalar<long long, long long>::cosh(long long)
+T MScalar<long long, long long>::sinh(long long)
+T MScalar<long long, long long>::tanh(long long)
+T MScalar<long long, long long>::acosh(long long)
+T MScalar<long long, long long>::asinh(long long)
+T MScalar<long long, long long>::atanh(long long)
+T MScalar<long long, long long>::rceil(long long)
+T MScalar<long long, long long>::rfloor(long long)
+U MScalar<unsigned long long, unsigned long long>::CLASS_NAME
+T MScalar<unsigned long long, unsigned long long>::abs(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::cos(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::neg(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::sin(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::tan(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::acos(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::asin(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::atan(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::cosh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::sign(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::sinh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::tanh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::acosh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::asinh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::atanh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::rceil(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::rfloor(unsigned long long)
 U Integral::almostEqual(double, double, double, double)
-W Integral::almostEqual(float, float, double, double)
-W Integral::cos(double)
-W Integral::exp(double)
-W Integral::log(double)
-W Integral::max(double, double)
-W Integral::min(double, double)
-W Integral::pow(double, double)
-W Integral::sin(double)
-W Integral::tan(double)
-W Integral::acos(double)
-W Integral::asin(double)
-W Integral::atan(double)
-W Integral::ceil(double)
-W Integral::cosh(double)
-W Integral::exp2(double)
-W Integral::hash(float, unsigned long)
-W Integral::log2(double)
-W Integral::sinh(double)
-W Integral::sqrt(double)
-W Integral::tanh(double)
-W Integral::acosh(double)
-W Integral::asinh(double)
-W Integral::atanh(double)
-W Integral::exp10(double)
-W Integral::floor(double)
-W Integral::log10(double)
-W Integral::log1p(double)
-W Integral::round(double)
-W Integral::hash_32(unsigned long, unsigned long)
-W Integral::fraction(double)
 U SysString::setCapacity(long)
 U SysString::assign(wchar_t const*)
 U SysString::assign(double)
 U SysString::assign(float)
-W SysString::concat(wchar_t const*)
 U SysString::concat(SysString const&)
-W SysString::concat(double)
 U SysString::freeMem()
 U SysString::SysString[in-charge](wchar_t const*)
 U SysString::SysString[in-charge](long)
 U SysString::SysString[not-in-charge](long)
-W SysString::~SysString [in-charge]()
-W SysString::~SysString [not-in-charge]()
-W MScalar<double, double>::operator double() const
-W MScalar<float, float>::almostEqual(float) const
-W MScalar<float, float>::presentValue(double) const
-W MScalar<float, float>::eq(MScalar<float, float> const&) const
-W MScalar<float, float>::eq(float) const
-W MScalar<float, float>::eq(float, float) const
-W MScalar<float, float>::ge(float) const
-W MScalar<float, float>::gt(float) const
-W MScalar<float, float>::le(float) const
-W MScalar<float, float>::lt(float) const
-W MScalar<float, float>::ne(float) const
-W MScalar<float, float>::get(String&) const
-W MScalar<float, float>::hash(unsigned long) const
+T MScalar<SysComplex<double>, double>::presentValue(SysComplex<double>) const
+T MScalar<SysComplex<float>, float>::presentValue(SysComplex<double>) const
+T MScalar<SysComplex<long>, long>::presentValue(SysComplex<double>) const
+T MScalar<double, double>::presentValue(double) const
+T MScalar<double, double>::operator%(double) const
+T MScalar<float, float>::presentValue(double) const
 U MScalar<float, float>::debug(wchar_t const*) const
-W MScalar<float, float>::operator float() const
-W MScalar<float, float>::operator/(float) const
-W MScalar<float, float>::operator==(float) const
-W MScalar<float, float>::operator>=(float) const
-W MScalar<float, float>::operator>(float) const
-W MScalar<float, float>::operator<=(float) const
-W MScalar<float, float>::operator<(float) const
-W MScalar<float, float>::operator-(float) const
-W MScalar<float, float>::operator*(float) const
-W MScalar<float, float>::operator!=(float) const
-W MScalar<float, float>::operator+(float) const
-W MScalar<float, float>::operator%(float) const
-W MScalar<unsigned char, unsigned char>::operator unsigned char() const
-W MScalar<long, long>::operator long() const
-W MScalar<unsigned long, unsigned long>::operator unsigned long() const
-W MScalar<short, short>::operator short() const
-W MScalar<unsigned short, unsigned short>::operator unsigned short() const
-W MScalar<long long, long long>::operator long long() const
-W MScalar<unsigned long long, unsigned long long>::operator unsigned long long() const
+T MScalar<float, float>::operator%(float) const
 U SysString::get(float&) const
-W std::type_info::operator==(std::type_info const&) const
-W std::type_info::operator!=(std::type_info const&) const
 U typeinfo for double
 U typeinfo for float
 U typeinfo for unsigned char
@@ -254,18 +194,14 @@
 U __gxx_personality_v0
 U acos
 U asin
-U atan
-U ceil
 U cos
 U cosh
 U exp
-U floor
 U log
 U log10
 U modf
 U pow
 U sin
 U sinh
-U sqrt
 U tan
 U tanh



-- 
http://www.PowerDNS.com      Open source, database driven DNS Software 
http://lartc.org           Linux Advanced Routing & Traffic Control HOWTO



More information about the Gcc-bugs mailing list