The following invalid code snippet triggers an ICE since GCC 3.4.0: ======================== struct A {}; typedef void (A::T)(); void foo() { T t; t; } ======================== bug.cc:3: error: typedef name may not be a nested-name-specifier bug.cc: In function 'void foo()': bug.cc:8: internal compiler error: Segmentation fault Please submit a full bug report, [etc.]
Confirmed. #0 maybe_dummy_object (type=???, binfop=???) at /Users/apinski/src/local/gcc/gcc/cp/tree.c:2067
Patch posted here: http://gcc.gnu.org/ml/gcc-patches/2008-09/msg01880.html
Subject: Bug 37555 Author: simartin Date: Tue Sep 30 19:25:35 2008 New Revision: 140794 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=140794 Log: gcc/cp/ 2008-09-30 Simon Martin <simartin@users.sourceforge.net> PR c++/37555 PR c++/37556 * decl.c (grokdeclarator): Set the type for typedefs to a nested-name-specifier to error_mark_node. gcc/testsuite/ 2008-09-30 Simon Martin <simartin@users.sourceforge.net> PR c++/37555 * g++.dg/parse/error32.C: New test. PR c++/37556 * g++.dg/parse/error33.C: New test. Added: trunk/gcc/testsuite/g++.dg/parse/error32.C trunk/gcc/testsuite/g++.dg/parse/error33.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/decl.c trunk/gcc/testsuite/ChangeLog
Subject: Bug 37555 Author: simartin Date: Tue Sep 30 19:56:13 2008 New Revision: 140796 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=140796 Log: gcc/cp/ 2008-09-30 Simon Martin <simartin@users.sourceforge.net> PR c++/37555 * decl.c (grokdeclarator): Set the type for typedefs to a nested-name-specifier to error_mark_node. gcc/testsuite/ 2008-09-30 Simon Martin <simartin@users.sourceforge.net> PR c++/37555 * g++.dg/parse/error32.C: New test. Added: branches/gcc-4_3-branch/gcc/testsuite/g++.dg/parse/error32.C Modified: branches/gcc-4_3-branch/gcc/cp/ChangeLog branches/gcc-4_3-branch/gcc/cp/decl.c branches/gcc-4_3-branch/gcc/testsuite/ChangeLog
Fixed in 4.3.3 and 4.4.0.
Closing 4.2 branch, fixed for 4.3.3 and 4.4.