From a97728cfa9eb7aa797ddf6dd766900d1a87b2640 Mon Sep 17 00:00:00 2001 From: Volker Reichelt Date: Thu, 17 Aug 2006 08:02:39 +0000 Subject: [PATCH] re PR c++/28711 (ICE on invalid initializer for multidimensional array) PR c++/28711 * pt.c (tsubst_copy_and_build) : Robustify. * g++.dg/template/ctor8.C: New test. From-SVN: r116210 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/ctor8.C | 11 +++++++++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/ctor8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7048c5f1411..650e393cbc0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2006-08-17 Volker Reichelt + + PR c++/28711 + * pt.c (tsubst_copy_and_build) : Robustify. + 2006-08-17 Paolo Bonzini PR c++/28573 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 27b6d111a26..c9e28c85b1c 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -9201,6 +9201,9 @@ tsubst_copy_and_build (tree t, tree type = tsubst (TREE_TYPE (t), args, complain, in_decl); bool process_index_p; + if (type == error_mark_node) + return error_mark_node; + /* digest_init will do the wrong thing if we let it. */ if (type && TYPE_PTRMEMFUNC_P (type)) return t; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 624a2f23d73..6805eb1e6a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-08-17 Volker Reichelt + + PR c++/28711 + * g++.dg/template/ctor8.C: New test. + 2006-08-17 Paolo Bonzini * PR c++/28573 diff --git a/gcc/testsuite/g++.dg/template/ctor8.C b/gcc/testsuite/g++.dg/template/ctor8.C new file mode 100644 index 00000000000..859bded4197 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ctor8.C @@ -0,0 +1,11 @@ +// PR c++/28711 +// { dg-do compile } +// { dg-options "" } + +template struct A +{ + int x[1][1]; + A() : x((int[1][]){{0}}) {} // { dg-error "except the first" } +}; + +A<0> a; -- 2.30.2