From 23a3541f271216b1a518ecb6f713500b76949172 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 19 Dec 2011 16:38:06 +0100 Subject: [PATCH] re PR c++/51619 ([c++0x] [4.6 Regression] ICE with array class member) PR c++/51619 * semantics.c (cxx_eval_vec_init_1): If init is NULL for multidimensional array, just set eltinit to NULL_TREE. * g++.dg/cpp0x/pr51619.C: New test. From-SVN: r182485 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/semantics.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/pr51619.C | 7 +++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr51619.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d8b30df5547..d9e194978d0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-12-19 Jakub Jelinek + PR c++/51619 + * semantics.c (cxx_eval_vec_init_1): If init is NULL for + multidimensional array, just set eltinit to NULL_TREE. + * cp-gimplify.c (gimplify_must_not_throw_expr): Use gimple_seq_add_stmt_without_update instead of gimplify_seq_add_stmt. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index e73b40a0e4f..2788daaba1e 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -7065,7 +7065,7 @@ cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init, if (TREE_CODE (elttype) == ARRAY_TYPE) { /* A multidimensional array; recurse. */ - if (value_init) + if (value_init || init == NULL_TREE) eltinit = NULL_TREE; else eltinit = cp_build_array_ref (input_location, init, idx, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 57a5dc844ac..a64fd8b2a93 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-19 Jakub Jelinek + + PR c++/51619 + * g++.dg/cpp0x/pr51619.C: New test. + 2011-12-19 Tobias Burnus PR fortran/51605 diff --git a/gcc/testsuite/g++.dg/cpp0x/pr51619.C b/gcc/testsuite/g++.dg/cpp0x/pr51619.C new file mode 100644 index 00000000000..dd51679158d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr51619.C @@ -0,0 +1,7 @@ +// PR c++/51619 +// { dg-do compile } +// { dg-options "-std=c++0x" } + +struct A { virtual ~A(); }; +struct B { A a[1][1]; } b; +struct C { A a[3][3]; } c; -- 2.30.2