From: Jason Merrill Date: Thu, 12 Nov 2009 23:22:10 +0000 (-0500) Subject: re PR c++/37037 (ICE on template class member function definition after explicit... X-Git-Tag: releases/gcc-4.3.5~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84d7c17a34891c30c329cb909e59d136bb619d9b;p=thirdparty%2Fgcc.git re PR c++/37037 (ICE on template class member function definition after explicit template class instantation) PR c++/37037 * decl.c (grokdeclarator): Don't generate a void PARM_DECL. From-SVN: r154135 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 283b2399ad79..0990ca687e01 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2009-11-12 Jason Merrill + + PR c++/37037 + * decl.c (grokdeclarator): Don't generate a void PARM_DECL. + 2009-11-09 Jason Merrill PR c++/41972 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index cef56338016c..c737169837ca 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -8635,7 +8635,9 @@ grokdeclarator (const cp_declarator *declarator, tree decls = NULL_TREE; tree args; - for (args = TYPE_ARG_TYPES (type); args; args = TREE_CHAIN (args)) + for (args = TYPE_ARG_TYPES (type); + args && args != void_list_node; + args = TREE_CHAIN (args)) { tree decl = cp_build_parm_decl (NULL_TREE, TREE_VALUE (args)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cf487e7f93f8..ef66c3ee5f07 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-11-12 Jason Merrill + + PR c++/37037 + * g++.dg/template/typedef21.C: New. + 2009-11-09 Jason Merrill PR c++/41972 diff --git a/gcc/testsuite/g++.dg/template/typedef21.C b/gcc/testsuite/g++.dg/template/typedef21.C new file mode 100644 index 000000000000..3185331be9f5 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typedef21.C @@ -0,0 +1,11 @@ +// PR c++/37037 + +typedef void F(void); +template struct S +{ + static F f; +}; +template class S; +template void S::f(void) +{} +