From a7c8ed0c361b549da67f9b83f91725fe1c84dbdb Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 10 Feb 2017 13:14:05 +0000 Subject: [PATCH] re PR c++/71737 (ICE following 2x pack expansion in non-pack with template alias) /cp 2017-02-10 Paolo Carlini PR c++/71737 * pt.c (tsubst_decl): Don't try to preserve a typedef that names an error_mark_node as type. /testsuite 2017-02-10 Paolo Carlini PR c++/71737 * g++.dg/cpp0x/pr71737.C: New. From-SVN: r245327 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 4 ++-- gcc/testsuite/ChangeLog | 7 ++++++- gcc/testsuite/g++.dg/cpp0x/pr71737.C | 13 +++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f615f908f5e..0c5d1654bad 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2017-02-10 Paolo Carlini + + PR c++/71737 + * pt.c (tsubst_decl): Don't try to preserve a typedef that names + an error_mark_node as type. + 2017-02-09 Jakub Jelinek Jason Merrill diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 0a4510c8ebe..c23c14c9e38 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12877,11 +12877,11 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) args, complain, in_decl); /* Preserve a typedef that names a type. */ - if (is_typedef_decl (r)) + if (is_typedef_decl (r) && type != error_mark_node) { DECL_ORIGINAL_TYPE (r) = NULL_TREE; set_underlying_type (r); - if (TYPE_DECL_ALIAS_P (r) && type != error_mark_node) + if (TYPE_DECL_ALIAS_P (r)) /* An alias template specialization can be dependent even if its underlying type is not. */ TYPE_DEPENDENT_P_VALID (TREE_TYPE (r)) = false; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3cf1cb24574..050bd52b15b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ +2017-02-10 Paolo Carlini + + PR c++/71737 + * g++.dg/cpp0x/pr71737.C: New. + 2017-02-10 Prasad Ghangal - Richard Biener + Richard Biener * gcc.dg/gimplefe-error-1.c: New testcase. * gcc.dg/gimplefe-error-2.c: New testcase. diff --git a/gcc/testsuite/g++.dg/cpp0x/pr71737.C b/gcc/testsuite/g++.dg/cpp0x/pr71737.C index e69de29bb2d..384d9478452 100644 --- a/gcc/testsuite/g++.dg/cpp0x/pr71737.C +++ b/gcc/testsuite/g++.dg/cpp0x/pr71737.C @@ -0,0 +1,13 @@ +// PR c++/78765 +// { dg-do compile { target c++11 } } + +template