The attached program causes gcc341_crash.cc:56: instantiated from here gcc341_crash.cc:34: internal compiler error: in tsubst, at cp/pt.c:6629 with gcc 3.4.1. This works with gcc 3.3.3, so it appears to be a regression from 3.3. I've also attached preprocessed source for both 3.4.1 and 3.3.3. Jens Maurer
Created attachment 6877 [details] Program that crashes the compiler.
Created attachment 6878 [details] Preprocessed source for gcc 3.3.3 (works)
Created attachment 6879 [details] Preprocessed source for gcc 3.4.1 (crashes the compiler)
Confirmed. Here's a shorter example =============================================== struct A { int operator[](int) const; }; template<int> A foo(); template<typename T> T bar(T(*)()); template<int> int baz() { return A(bar(&foo<0>))[0]; } template int baz<0>(); ===============================================
: Search converges between 2003-07-08-trunk (#288) and 2003-07-09-trunk (#289).
Here is another example (removing some templates): struct A { int operator[](int) const; }; template<int> A foo(); A bar(A(*)()); template<int> int baz() { return (bar(&foo<0>))[0]; } template int baz<0>();
Subject: Bug 16870 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: mmitchel@gcc.gnu.org 2004-08-12 00:34:33 Modified files: gcc : ChangeLog gcc/cp : ChangeLog call.c pt.c gcc/ginclude : stddef.h gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/init: ptrmem1.C gcc/testsuite/g++.dg/parse: offsetof5.C gcc/testsuite/g++.dg/template: overload3.C Log message: PR c++/16618 * ginclude/stddef.h (offsetof): Refine C++ definition. PR c++/16853 * call.c (standard_conversion): Do not accept conversions between pointers to members if the class types are unrelated. PR c++/16870 * pt.c (tsubst): Just return the unknown_type_node. PR c++/16853 * g++.dg/init/ptrmem1.C: New test. PR c++/16618 * g++.dg/parse/offsetof5.C: New test. PR c++/16870 * g++.dg/template/overload3.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.578&r2=2.2326.2.579 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3892.2.141&r2=1.3892.2.142 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/call.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.452.2.20&r2=1.452.2.21 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.816.2.37&r2=1.816.2.38 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ginclude/stddef.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.20&r2=1.20.4.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.3389.2.244&r2=1.3389.2.245 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/ptrmem1.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/offsetof5.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.2.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/overload3.C.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=NONE&r2=1.1.2.1
Subject: Bug 16870 CVSROOT: /cvs/gcc Module name: gcc Changes by: mmitchel@gcc.gnu.org 2004-08-12 00:43:47 Modified files: gcc/cp : ChangeLog call.c parser.c pt.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/init: ptrmem1.C gcc/testsuite/g++.dg/parse: offsetof5.C gcc/testsuite/g++.dg/template: overload3.C Log message: PR c++/16853 * call.c (standard_conversion): Do not accept conversions between pointers to members if the class types are unrelated. PR c++/16618 * parser.c (cp_parser_builtin_offsetof): Cast to "const volatile char &" instead of just "char &". PR c++/16870 * pt.c (tsubst): Just return the unknown_type_node. PR c++/16853 * g++.dg/init/ptrmem1.C: New test. PR c++/16618 * g++.dg/parse/offsetof5.C: New test. PR c++/16870 * g++.dg/template/overload3.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.4270&r2=1.4271 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/call.c.diff?cvsroot=gcc&r1=1.498&r2=1.499 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/parser.c.diff?cvsroot=gcc&r1=1.234&r2=1.235 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/pt.c.diff?cvsroot=gcc&r1=1.902&r2=1.903 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.4119&r2=1.4120 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/init/ptrmem1.C.diff?cvsroot=gcc&r1=1.1&r2=1.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/parse/offsetof5.C.diff?cvsroot=gcc&r1=1.1&r2=1.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/template/overload3.C.diff?cvsroot=gcc&r1=1.1&r2=1.2
GCC 3.4.2.