diff options
author | Jakub Jelinek <jakub@redhat.com> | 2016-07-18 20:40:12 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2016-07-18 20:40:12 +0200 |
commit | f4d902955b3d123937ab85866c51f9b665591604 (patch) | |
tree | 8238e32a411871e52a341e9c9430771dcdacfd71 /gcc | |
parent | f2111a364039343a3314736d376990dfa549e650 (diff) | |
download | gcc-f4d902955b3d123937ab85866c51f9b665591604.zip gcc-f4d902955b3d123937ab85866c51f9b665591604.tar.gz gcc-f4d902955b3d123937ab85866c51f9b665591604.tar.bz2 |
re PR c++/71822 (ICE: in gimplify_expr, at gimplify.c:11025)
PR c++/71822
* cp-gimplify.c (cp_gimplify_expr) <case VEC_INIT_EXPR>: Recursively
fold *expr_p before genericizing it.
* g++.dg/template/defarg21.C: New test.
From-SVN: r238440
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/cp-gimplify.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/defarg21.C | 21 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 888d4aa..3cd6b13 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-07-18 Jakub Jelinek <jakub@redhat.com> + PR c++/71822 + * cp-gimplify.c (cp_gimplify_expr) <case VEC_INIT_EXPR>: Recursively + fold *expr_p before genericizing it. + PR c++/71871 * typeck.c (build_x_conditional_expr): Revert the 2012-10-25 change. diff --git a/gcc/cp/cp-gimplify.c b/gcc/cp/cp-gimplify.c index 8496d7c..de6c929 100644 --- a/gcc/cp/cp-gimplify.c +++ b/gcc/cp/cp-gimplify.c @@ -621,6 +621,8 @@ cp_gimplify_expr (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p) init, VEC_INIT_EXPR_VALUE_INIT (*expr_p), from_array, tf_warning_or_error); + hash_set<tree> pset; + cp_walk_tree (expr_p, cp_fold_r, &pset, NULL); cp_genericize_tree (expr_p); ret = GS_OK; input_location = loc; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index aa35fb2..2f6471a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2016-07-18 Jakub Jelinek <jakub@redhat.com> + PR c++/71822 + * g++.dg/template/defarg21.C: New test. + PR c++/71871 * g++.dg/ext/vector31.C: New test. diff --git a/gcc/testsuite/g++.dg/template/defarg21.C b/gcc/testsuite/g++.dg/template/defarg21.C new file mode 100644 index 0000000..6ac2276 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/defarg21.C @@ -0,0 +1,21 @@ +// PR c++/71822 +// { dg-do compile } + +int bar (int); + +template <typename T> +struct A +{ + explicit A (int x = bar (sizeof (T))); +}; + +struct B +{ + A <int> b[2]; +}; + +void +baz () +{ + B b; +} |