From: Jakub Jelinek Date: Wed, 6 Mar 2013 15:19:11 +0000 (+0100) Subject: re PR c++/56543 (ICE on valid code in copy_node_stat) X-Git-Tag: releases/gcc-4.8.0~166 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9ebced778018ed88eb330f8474cd25491de2bf40;p=thirdparty%2Fgcc.git re PR c++/56543 (ICE on valid code in copy_node_stat) PR c++/56543 * tree.c (strip_typedefs): Don't copy args if they are NULL. * g++.dg/template/typename20.C: New test. From-SVN: r196491 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 76911896908c..8a5923459107 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-03-06 Jakub Jelinek + + PR c++/56543 + * tree.c (strip_typedefs): Don't copy args if they are NULL. + 2013-03-05 Jakub Jelinek * parser.c (cp_parser_braced_list): For {} initialize diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 75b4d5121ed4..b57b44ad149d 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1222,7 +1222,8 @@ strip_typedefs (tree t) case TYPENAME_TYPE: { tree fullname = TYPENAME_TYPE_FULLNAME (t); - if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR) + if (TREE_CODE (fullname) == TEMPLATE_ID_EXPR + && TREE_OPERAND (fullname, 1)) { tree args = TREE_OPERAND (fullname, 1); tree new_args = copy_node (args); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57df6fc2f3f4..d4273c50c105 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-03-06 Jakub Jelinek + + PR c++/56543 + * g++.dg/template/typename20.C: New test. + 2013-03-05 Jakub Jelinek PR debug/56510 diff --git a/gcc/testsuite/g++.dg/template/typename20.C b/gcc/testsuite/g++.dg/template/typename20.C new file mode 100644 index 000000000000..d5bd51f356d4 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typename20.C @@ -0,0 +1,11 @@ +// PR c++/56543 + +template +struct S; + +template +struct U +{ + typedef typename S ::template V <> W; + S x; +};