[Bug 10804] New: [3.4 regression] missing implicit instantiation of template static methods

gcc-bugzilla@gcc.gnu.org gcc-bugzilla@gcc.gnu.org
Wed May 21 17:51:00 GMT 2003

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.


           Summary: [3.4 regression] missing implicit instantiation of
                    template static methods
           Product: gcc
           Version: 3.4
            Status: NEW
          Severity: major
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: harinath@cs.umn.edu
                CC: bangerth@dealii.org,gcc-bugs@gcc.gnu.org

Linking fails on the following file:

template<class T>
struct A
  A() { const void (*a)() = foo; }
  static const void foo() {}

int main(int argc, char *argv[])
  A<int> a;

with the error:
/tmp/ccube68X.o(.gnu.linkonce.t._ZN1AIiEC1Ev+0x9): In function `A<int>::A[in-charge]()':
: undefined reference to `A<int>::foo()'
collect2: ld returned 1 exit status

There is no problem with GCC 3.2.

gcc version 3.4 20030512 (experimental)


c++ implicit-instantiation.cc

Here's the output of nm with GCC 3.4:

         U A<int>::foo()
00000000 W A<int>::A[in-charge]()
00000000 T main

and here's the output with GCC 3.2

00000000 W A<int>::foo()
00000000 W A<int>::A[in-charge]()
         U __gxx_personality_v0
00000000 T main

Notice that GCC 3.4 did DTRT with the constructor.  If I replace the use of foo in the code with a direct method call, then there's no problem either.
------- Additional Comments From bangerth@dealii.org  2003-15-05 18:36 -------
State-Changed-From-To: open->analyzed
State-Changed-Why: Confirmed. A mainline regression

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

More information about the Gcc-bugs mailing list