public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/13323] New: Template code does not compile in presence of typedef
@ 2003-12-05 21:01 david dot lee at teracruz dot com
2003-12-05 21:12 ` [Bug c++/13323] [3.3/3.4 regression] " bangerth at dealii dot org
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: david dot lee at teracruz dot com @ 2003-12-05 21:01 UTC (permalink / raw)
To: gcc-bugs
The following code compiles fine with gcc 3.2. However, with 3.3.2, I get an
error.
[dlee@d100-devel cpp]$ cat > bug.cpp <<EOF
typedef int INT_TYPEDEF;
template<class T>
class TypedIfc
{
public:
virtual ~TypedIfc() { }
virtual operator const T&() const = 0;
virtual const T& operator= (const T& t) = 0;
};
template<class Tnative>
class NullIfc : public TypedIfc<Tnative>
{
public:
const Tnative& operator= (const Tnative& t) { return t; }
operator const Tnative&() const { return *(Tnative *)0; }
};
#ifndef DONTBREAK // -DDONTBREAK to get a build that works.
typedef TypedIfc<INT_TYPEDEF> INT_TYPEDEFIfc;
#endif
NullIfc<int> i32;
EOF
[dlee@d100-devel cpp]$ i686-linux-g++ bug.cpp -o /dev/null -c -DDONTBREAK
[dlee@d100-devel cpp]$ i686-linux-g++ bug.cpp -o /dev/null -c
bug.cpp:24: error: cannot declare variable `i32' to be of type `NullIfc<int>'
bug.cpp:24: error: because the following virtual functions are abstract:
bug.cpp:8: error: TypedIfc<T>::operator const T&() const [with T =
INT_TYPEDEF]
Here's the info for my compiler:
[dlee@d100-devel cpp]$ i686-linux-g++ --verbose
Reading specs from /tools/i386/lib/gcc-lib/i686-linux/3.3.2/specs
Configured with: /src/gcc-3.3.2/configure --target=i686-linux --host=i686-
host_pc-linux-gnu --prefix=/tools/i386 --with-headers=/tools/i386/i686-
linux/include --disable-nls --enable-symvers=gnu --enable-threads=posix --
enable-__cxa_atexit --enable-languages=c,c++ --enable-clocale=gnu --with-local-
prefix=/home/dlee/vcs/Products/Breeze/Dev/Prj/LinuxRH8/tscale2/tools/i386/i686-
linux --disable-multilib
Thread model: posix
gcc version 3.3.2
--
Summary: Template code does not compile in presence of typedef
Product: gcc
Version: 3.3.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: david dot lee at teracruz dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux
GCC host triplet: i686-pc-linux
GCC target triplet: i686-pc-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/13323] [3.3/3.4 regression] Template code does not compile in presence of typedef
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
@ 2003-12-05 21:12 ` bangerth at dealii dot org
2003-12-06 2:46 ` pinskia at gcc dot gnu dot org
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: bangerth at dealii dot org @ 2003-12-05 21:12 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bangerth at dealii dot org 2003-12-05 21:12 -------
This is clearly a bug, and a regression on 3.3/mainline w.r.t. 3.2.x.
Here's an extract:
-------------------------
template <class T> struct B {
virtual operator T() const = 0;
};
template <class T>
struct D : B<T> {
virtual operator T() const;
};
typedef int i;
typedef B<i> Bi;
D<int> i32;
---------------------------
g/x> /home/bangerth/bin/gcc-3.2.3/bin/c++ -c x.cc
g/x> /home/bangerth/bin/gcc-3.3.3-pre/bin/c++ -c x.cc
x.cc:13: error: cannot declare variable `i32' to be of type `D<int>'
x.cc:13: error: because the following virtual functions are abstract:
x.cc:2: error: B<T>::operator T() const [with T = i]
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Keywords| |rejects-valid
Last reconfirmed|0000-00-00 00:00:00 |2003-12-05 21:12:51
date| |
Summary|Template code does not |[3.3/3.4 regression]
|compile in presence of |Template code does not
|typedef |compile in presence of
| |typedef
Target Milestone|--- |3.3.3
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/13323] [3.3/3.4 regression] Template code does not compile in presence of typedef
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
2003-12-05 21:12 ` [Bug c++/13323] [3.3/3.4 regression] " bangerth at dealii dot org
@ 2003-12-06 2:46 ` pinskia at gcc dot gnu dot org
2003-12-06 22:11 ` cvs-commit at gcc dot gnu dot org
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-12-06 2:46 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2003-12-06 02:46 -------
>From Phil's regression hunter: Search converges between 2003-06-17-trunk (#316) and 2003-06
-18-trunk (#317).
: Search converges between 2003-06-14-3.3 (#145) and 2003-06-22-3.3 (#146).
Related to bug 11928 and PR 11713 (the ones caused also in the same time period, both of them
the same patch).
So it is most likely the same patch:
2003-06-17 Mark Mitchell <mark@codesourcery.com>
PR c++/11105
* cp-tree.h (DECL_CONV_FN_TYPE): New method.
* decl.c (lookup_name_real): Backport conversion operator code
from mainline.
* mangle.c (struct globals): Remove internal_mangling_p.
(write_unqualified_name): Use DECL_CONV_FN_TYPE.
(write_template_parm): Don't write out the level number.
(conv_type_names): New variable.
(hash_type): New function.
(compare_type): Likewise.
(mangle_conv_op_name_for_type): Don't try to mangle conversion
operator names.
* search.c (lookup_conversion_operator): New function.
(lookup_fnfields_1): Use it.
Mark could you look at this one?
--
What |Removed |Added
----------------------------------------------------------------------------
CC| |mark at codesourcery dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/13323] [3.3/3.4 regression] Template code does not compile in presence of typedef
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
2003-12-05 21:12 ` [Bug c++/13323] [3.3/3.4 regression] " bangerth at dealii dot org
2003-12-06 2:46 ` pinskia at gcc dot gnu dot org
@ 2003-12-06 22:11 ` cvs-commit at gcc dot gnu dot org
2003-12-06 22:19 ` cvs-commit at gcc dot gnu dot org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2003-12-06 22:11 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2003-12-06 22:11 -------
Subject: Bug 13323
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: mmitchel@gcc.gnu.org 2003-12-06 22:11:46
Modified files:
gcc/cp : ChangeLog class.c
gcc/testsuite : ChangeLog
Added files:
gcc/testsuite/g++.dg/inherit: operator2.C
Log message:
PR c++/13323
* class.c (same_signature_p): Handle conversion operators
correctly.
(check_for_override): Likewise.
PR c++/13323
* g++.dg/inherit/operator2.C: New test.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3785&r2=1.3786
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/class.c.diff?cvsroot=gcc&r1=1.583&r2=1.584
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3234&r2=1.3235
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/inherit/operator2.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/13323] [3.3/3.4 regression] Template code does not compile in presence of typedef
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
` (2 preceding siblings ...)
2003-12-06 22:11 ` cvs-commit at gcc dot gnu dot org
@ 2003-12-06 22:19 ` cvs-commit at gcc dot gnu dot org
2003-12-06 22:20 ` mmitchel at gcc dot gnu dot org
2003-12-08 22:17 ` david dot lee at teracruz dot com
5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2003-12-06 22:19 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2003-12-06 22:19 -------
Subject: Bug 13323
CVSROOT: /cvs/gcc
Module name: gcc
Branch: gcc-3_3-branch
Changes by: mmitchel@gcc.gnu.org 2003-12-06 22:19:31
Modified files:
gcc/cp : ChangeLog class.c
gcc/testsuite : ChangeLog
Added files:
gcc/testsuite/g++.dg/inherit: operator2.C
Log message:
PR c++/13323
* class.c (same_signature_p): Handle conversion operators
correctly.
(check_for_override): Likewise.
PR c++/13323
* g++.dg/inherit/operator2.C: New test.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.3076.2.221&r2=1.3076.2.222
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/class.c.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.499.2.24&r2=1.499.2.25
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=1.2261.2.324&r2=1.2261.2.325
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/inherit/operator2.C.diff?cvsroot=gcc&only_with_tag=gcc-3_3-branch&r1=NONE&r2=1.1.2.1
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/13323] [3.3/3.4 regression] Template code does not compile in presence of typedef
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
` (3 preceding siblings ...)
2003-12-06 22:19 ` cvs-commit at gcc dot gnu dot org
@ 2003-12-06 22:20 ` mmitchel at gcc dot gnu dot org
2003-12-08 22:17 ` david dot lee at teracruz dot com
5 siblings, 0 replies; 7+ messages in thread
From: mmitchel at gcc dot gnu dot org @ 2003-12-06 22:20 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mmitchel at gcc dot gnu dot org 2003-12-06 22:20 -------
Fixed in GCC 3.3.3 and GCC 3.4.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/13323] [3.3/3.4 regression] Template code does not compile in presence of typedef
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
` (4 preceding siblings ...)
2003-12-06 22:20 ` mmitchel at gcc dot gnu dot org
@ 2003-12-08 22:17 ` david dot lee at teracruz dot com
5 siblings, 0 replies; 7+ messages in thread
From: david dot lee at teracruz dot com @ 2003-12-08 22:17 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From david dot lee at teracruz dot com 2003-12-08 22:17 -------
Thanks for the prompt response! This fix gets me going again :-)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13323
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2003-12-08 22:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-12-05 21:01 [Bug c++/13323] New: Template code does not compile in presence of typedef david dot lee at teracruz dot com
2003-12-05 21:12 ` [Bug c++/13323] [3.3/3.4 regression] " bangerth at dealii dot org
2003-12-06 2:46 ` pinskia at gcc dot gnu dot org
2003-12-06 22:11 ` cvs-commit at gcc dot gnu dot org
2003-12-06 22:19 ` cvs-commit at gcc dot gnu dot org
2003-12-06 22:20 ` mmitchel at gcc dot gnu dot org
2003-12-08 22:17 ` david dot lee at teracruz dot com
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).