First Last Prev Next    No search results available      Search page      Enter new bug
Bug#: 3797
Product:  
Component:  
Status: RESOLVED
Resolution: FIXED
Assigned To: Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>
Host:
Reported against  
Priority:  
Severity:  
Target Milestone:  
 
 
Target:
Reporter: Martin Sebor <sebor@roguewave.com>
Add CC:
CC:
Remove selected CCs
Build:
URL:
Summary:
Keywords:
Known to work:
Known to fail:

Attachment Description Type Created Size Actions
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 3797 depends on: Show dependency tree
Show dependency graph
Bug 3797 blocks:

Additional Comments:






View Bug Activity   |   Format For Printing   |   Clone This Bug


Description:   Last confirmed: Opened: 2001-07-24 11:36
Declaring the explicit specialization of the member of the
class template causes the compiler to 'forget' to emit the
out-of-line symbol for the explicit specialization defined
later.

$ cat t.cpp
template <class T>
struct S
{
    int foo () { return 0; }
};

template <>
int S<int>::foo ();

template <>
int S<int>::foo () { return 1; }
$ g++ -c -v t.cpp   
Reading specs from /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0/configure --prefix=/usr/local/gcc-3.0 --enable-shared
Thread model: single
gcc version 3.0
 /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/cc1plus -v -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ t.cpp -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -quiet -dumpbase t.cpp -version -o /tmp/ccoYegSb.s
GNU CPP version 3.0 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.0 (i686-pc-linux-gnu)
        compiled by GNU C version 2.95.2 19991024 (release).
ignoring nonexistent directory "/usr/local/gcc-3.0/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/gcc-3.0/include/g++-v3
 /usr/local/gcc-3.0/include/g++-v3/i686-pc-linux-gnu
 /usr/local/gcc-3.0/include/g++-v3/backward
 /usr/local/gcc-3.0/include
 /usr/local/gcc-3.0/lib/gcc-lib/i686-pc-linux-gnu/3.0/include
 /usr/include
End of search list.
 as --traditional-format -V -Qy -o t.o /tmp/ccoYegSb.s
GNU assembler version 2.9.1 (i386-redhat-linux), using BFD version 2.9.1.0.23
$ nm t.o
$

Release:
gcc version 3.0

How-To-Repeat:
template <class T>
struct S
{
    int foo () { return 0; }
};

template <>
int S<int>::foo ();

template <>
int S<int>::foo () { return 1; }

------- Comment #1 From Martin Sebor 2001-07-24 11:36 -------
Fix:
Omit the declaration of the specialization or the definition
of the member of the primary template (neither is acceptable
if the specialization is to exist in a portable library).

------- Comment #2 From Kriang Lerdsuwanakij 2002-05-26 08:08 -------
State-Changed-From-To: open->analyzed
State-Changed-Why: Confirmed.

------- Comment #3 From Kriang Lerdsuwanakij 2002-06-01 08:09 -------
Responsible-Changed-From-To: unassigned->lerdsuwa
Responsible-Changed-Why: Patch in progress.

------- Comment #4 From Kriang Lerdsuwanakij 2002-07-17 07:27 -------
State-Changed-From-To: analyzed->closed
State-Changed-Why: Fixed in the main trunk (future GCC 3.3).

------- Comment #5 From Kriang Lerdsuwanakij 2002-07-17 14:07 -------
From: lerdsuwa@gcc.gnu.org
To: gcc-gnats@gcc.gnu.org
Cc:  
Subject: c++/3797
Date: 17 Jul 2002 14:07:43 -0000

 CVSROOT:	/cvs/gcc
 Module name:	gcc
 Changes by:	lerdsuwa@gcc.gnu.org	2002-07-17 07:07:43
 
 Modified files:
 	gcc/cp         : ChangeLog decl.c 
 
 Log message:
 	PR c++/3797
 	* decl.c (duplicate_decls): Don't propagate inlining parameters from
 	olddecl to newdecl when newdecl is a specialization of the
 	instantiation olddecl.
 
 Patches:
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.2884&r2=1.2885
 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/decl.c.diff?cvsroot=gcc&r1=1.920&r2=1.921
 

First Last Prev Next    No search results available      Search page      Enter new bug