From: Jason Merrill Date: Thu, 12 Nov 2009 22:49:59 +0000 (-0500) Subject: re PR c++/37037 (ICE on template class member function definition after explicit... X-Git-Tag: releases/gcc-4.5.0~2373 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7b3ad9f90078038c6bce4b69d07653aec4d446a6;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: r154131 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index e0b5f2771da5..333c84d88b58 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2009-11-12 Jason Merrill + PR c++/37037 + * decl.c (grokdeclarator): Don't generate a void PARM_DECL. + PR c++/42013 * call.c (build_conditional_expr): Check specifically for folding to CALL_EXPR rather than TREE_SIDE_EFFECTS. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 5e2f85fd9d4d..e23634f3f6ef 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -8993,7 +8993,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 d5115fd09ac8..49f2e6ab2d10 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2009-11-12 Jason Merrill + PR c++/37037 + * g++.dg/template/typedef21.C: New. + PR c++/42013 * g++.dg/cpp0x/decltype19.C: New. 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) +{} +