From mboxrd@z Thu Jan 1 00:00:00 1970 From: garloff@suse.de To: gcc-gnats@gcc.gnu.org Subject: libstdc++/3377: missing std::__cmath_power(double,unsigned) Date: Fri, 22 Jun 2001 11:06:00 -0000 Message-id: <200106221804.UAA14984@gum07.etpnet.phys.tue.nl> X-SW-Source: 2001-06/msg00992.html List-Id: >Number: 3377 >Category: libstdc++ >Synopsis: missing std::__cmath_power(double,unsigned) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Fri Jun 22 11:06:00 PDT 2001 >Closed-Date: >Last-Modified: >Originator: Kurt Garloff >Release: 3.0.1 20010620 (prerelease) >Organization: TU/e, SuSE >Environment: System: Linux gum07.etpnet.phys.tue.nl 2.4.0-test13-pre3 #18 Sat Dec 23 00:22:26 CET 2000 i686 unknown Architecture: i686 Libraries: glibc-2.1.3 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: i686-pc-linux-gnu configured with: ../configure --with-gcc-version-trigger=/usr/src/gcc-2.96/gcc/version.c --host=i686-pc-linux-gnu --prefix=/usr/src/i686-pc-gcc297 --enable-shared --with-gnu-as --with-gnu-ld --enable-haifa --with-system-zlib : (reconfigured) : (reconfigured) : (reconfigured) : (reconfigured) : (reconfigured) : (reconfigured) >Description: http://gcc.gnu.org/ml/gcc/2001-06/msg01190.html compiling my templated C++ numeric library with gcc-3.0.0, I use -fno-implicit-templates to prevent multiple instantiations and explicitly instantiate all the templates that are supposed to be in the library. I stumbled across this: ../lina/bin-ix86/libtbcidouble.so: undefined reference to double std::__cmath_power(double, unsigned)' I'm rather sure this is a bug: -fno-implicit-templates is not supposed to change the underlying C++ std library, is it? The compiler probably can't just ignore the flag for included C++ std headers, but then, those symbols should be (weakly) present in libstdc++.so. At least for the templates only used internally. >How-To-Repeat: Compile this program with -fno-inline-functions /** cmath_pow.cc * * Trying to reproduce linking errors for * double std::__cmath_power(double, unsigned) * in gcc-3.0.0, if -fno=implicit-templates is used. * The flag also affects the internally used (invisible) templates * from the C++ std library :-( and at least std::__cmath_power * is missing from libstdc++.so. * * (c) Kurt Garloff, garloff@suse.de, 2001-06-20, GNU GPL * * Compile with g++ -o cmath_pow cmath_pow.cc -fno-implicit-templates * */ #include #include #include namespace testns { template double our_pow (const T v, const int pw) { return std::pow ((double)v, pw); }; }; // Explicitly instantiate (needed because -fno-implicit-templates) namespace testns { template double our_pow (const long, const int); }; int main (int argc, char* argv[]) { long int arg = 2; int pw = 4; if (argc >= 2) arg = std::atol (argv[1]); if (argc >= 3) pw = std::atol (argv[2]); long int res = (long int) testns::our_pow (arg, pw); std::printf ("%li\n", res); return 0; } // The problem ... #ifdef WORKAROUND template double std::__cmath_power(double, unsigned); #endif >Fix: Workaround: Add -DWORKAROUND to the compiler switches. Fix: Add the needed std::__cmath_power<*>(*,unsigned) to libstdc++. >Release-Note: >Audit-Trail: >Unformatted: