diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-03-06 16:19:11 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-03-06 16:19:11 +0100 |
commit | 9ebced778018ed88eb330f8474cd25491de2bf40 (patch) | |
tree | e581f1f6366f4843d8c124abb850c7c4d9fe8a61 /gcc | |
parent | 6632162b03440cc01113262b6700ed6ab3ba11ff (diff) | |
download | gcc-9ebced778018ed88eb330f8474cd25491de2bf40.zip gcc-9ebced778018ed88eb330f8474cd25491de2bf40.tar.gz gcc-9ebced778018ed88eb330f8474cd25491de2bf40.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/tree.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/typename20.C | 11 |
4 files changed, 23 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7691189..8a59234 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-03-06 Jakub Jelinek <jakub@redhat.com> + + PR c++/56543 + * tree.c (strip_typedefs): Don't copy args if they are NULL. + 2013-03-05 Jakub Jelinek <jakub@redhat.com> * parser.c (cp_parser_braced_list): For {} initialize diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 75b4d51..b57b44a 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 57df6fc..d4273c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-03-06 Jakub Jelinek <jakub@redhat.com> + + PR c++/56543 + * g++.dg/template/typename20.C: New test. + 2013-03-05 Jakub Jelinek <jakub@redhat.com> 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 0000000..d5bd51f --- /dev/null +++ b/gcc/testsuite/g++.dg/template/typename20.C @@ -0,0 +1,11 @@ +// PR c++/56543 + +template <typename> +struct S; + +template <typename T> +struct U +{ + typedef typename S <T>::template V <> W; + S <W> x; +}; |