re PR c++/51398 (ICE with invalid template parameter)
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 23 Jan 2012 17:56:42 +0000 (17:56 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 23 Jan 2012 17:56:42 +0000 (17:56 +0000)
/cp
2012-01-23  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51398
* pt.c (parameter_of_template_p): Skip error_mark_node parameters.

/testsuite
2012-01-23  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/51398
* g++.dg/template/crash111.C: New.

From-SVN: r183445

gcc/cp/ChangeLog
gcc/cp/pt.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/crash111.C [new file with mode: 0644]

index b6bf88f4caacfb7a5fa36b11ffadb46ac6c09420..13f34845818a378bc3a6bd9e70ac529385604058 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51398
+       * pt.c (parameter_of_template_p): Skip error_mark_node parameters.
+
 2012-01-23  Jason Merrill  <jason@redhat.com>
 
        PR c++/51925
index a4460f1d87b19935ac48cd2d031c9d24ecb11275..e440be706cfc3921e5a78126c32fa5044f56b916 100644 (file)
@@ -8157,6 +8157,9 @@ parameter_of_template_p (tree parm, tree templ)
   for (i = 0; i < TREE_VEC_LENGTH (parms); ++i)
     {
       tree p = TREE_VALUE (TREE_VEC_ELT (parms, i));
+      if (p == error_mark_node)
+       continue;
+
       if (parm == p
          || (DECL_INITIAL (parm)
              && DECL_INITIAL (parm) == DECL_INITIAL (p)))
index 41929df32cc70a9389f628a295a900eed30dfae8..37a56147f17593cee7c4f860ec73ea71fceb0dcb 100644 (file)
@@ -1,3 +1,8 @@
+2012-01-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51398
+       * g++.dg/template/crash111.C: New.
+
 2012-01-23  Arnaud Charlet  <charlet@adacore.com>
 
        * ada/acats/tests/cxh/cxh1001.a: Removed, test not suitable on all
diff --git a/gcc/testsuite/g++.dg/template/crash111.C b/gcc/testsuite/g++.dg/template/crash111.C
new file mode 100644 (file)
index 0000000..f711260
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/51398
+
+template<void, int N> struct A   // { dg-error "not a valid type" }
+{
+  static const int i = N;
+};