re PR c++/71737 (ICE following 2x pack expansion in non-pack with template alias)
authorPaolo Carlini <paolo@gcc.gnu.org>
Fri, 10 Feb 2017 13:14:05 +0000 (13:14 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 10 Feb 2017 13:14:05 +0000 (13:14 +0000)
/cp
2017-02-10  Paolo Carlini  <paolo.carlini@oracle.com>

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  <paolo.carlini@oracle.com>

PR c++/71737
* g++.dg/cpp0x/pr71737.C: New.

From-SVN: r245327

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/pr71737.C

index f615f90..0c5d165 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       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  <jakub@redhat.com>
            Jason Merrill  <jason@redhat.com>
 
index 0a4510c..c23c14c 100644 (file)
@@ -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;
index 3cf1cb2..050bd52 100644 (file)
@@ -1,5 +1,10 @@
+2017-02-10  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/71737
+       * g++.dg/cpp0x/pr71737.C: New.
+
 2017-02-10  Prasad Ghangal  <prasad.ghangal@gmail.com>
-       Richard Biener  <rguenther@suse.de>
+           Richard Biener  <rguenther@suse.de>
 
        * gcc.dg/gimplefe-error-1.c: New testcase.
        * gcc.dg/gimplefe-error-2.c: New testcase.
index e69de29..384d947 100644 (file)
@@ -0,0 +1,13 @@
+// PR c++/78765
+// { dg-do compile { target c++11 } }
+
+template <template <typename ...> class TT>
+struct quote {
+  template <typename ...Ts>
+  using apply = TT<Ts...>;  // { dg-error "pack expansion" }
+};
+
+template <typename>
+using to_int_t = int;
+
+using t = quote<quote<to_int_t>::apply>::apply<int>;