diff options
author | Jason Merrill <jason@redhat.com> | 2011-04-27 21:53:34 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-04-27 21:53:34 -0400 |
commit | c12ff9d8f0f20cd2de63de6f14b9f0330e7ceb66 (patch) | |
tree | 7fc7f017ff214e07e3790efe9c01bfe2b4b52bdb /gcc/c-family | |
parent | fbaf0d0c082815cf67d958b7c9f596b1f814eca0 (diff) | |
download | gcc-c12ff9d8f0f20cd2de63de6f14b9f0330e7ceb66.zip gcc-c12ff9d8f0f20cd2de63de6f14b9f0330e7ceb66.tar.gz gcc-c12ff9d8f0f20cd2de63de6f14b9f0330e7ceb66.tar.bz2 |
re PR c++/40975 (ICE in copy_tree_r on array new)
PR c++/40975
* cp-tree.def (VEC_INIT_EXPR): Add third operand.
* cp-tree.h (VEC_INIT_EXPR_NELTS): New.
* cp-gimplify.c (cp_gimplify_expr) [VEC_INIT_EXPR]: Handle it.
* tree.c (build_vec_init_expr): Handle getting pointer/nelts.
(build_vec_init_elt): Don't expect an array type.
(build_array_copy): Adjust.
* init.c (perform_member_init): Adjust.
(build_new_1): Use build_vec_init_expr.
From-SVN: r173056
Diffstat (limited to 'gcc/c-family')
-rw-r--r-- | gcc/c-family/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-family/c-common.c | 11 | ||||
-rw-r--r-- | gcc/c-family/c-common.h | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 6c6ca98..8864a32 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2011-04-27 Jason Merrill <jason@redhat.com> + + * c-common.c (make_tree_vector_from_list): New. + * c-common.h: Declare it. + 2011-04-26 Richard Guenther <rguenther@suse.de> PR preprocessor/48248 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 63277ca..802040d 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -9580,6 +9580,17 @@ make_tree_vector_single (tree t) return ret; } +/* Get a new tree vector of the TREE_VALUEs of a TREE_LIST chain. */ + +VEC(tree,gc) * +make_tree_vector_from_list (tree list) +{ + VEC(tree,gc) *ret = make_tree_vector (); + for (; list; list = TREE_CHAIN (list)) + VEC_safe_push (tree, gc, ret, TREE_VALUE (list)); + return ret; +} + /* Get a new tree vector which is a copy of an existing one. */ VEC(tree,gc) * diff --git a/gcc/c-family/c-common.h b/gcc/c-family/c-common.h index 09aa6000..ad6da6b 100644 --- a/gcc/c-family/c-common.h +++ b/gcc/c-family/c-common.h @@ -959,6 +959,7 @@ extern void set_underlying_type (tree x); extern VEC(tree,gc) *make_tree_vector (void); extern void release_tree_vector (VEC(tree,gc) *); extern VEC(tree,gc) *make_tree_vector_single (tree); +extern VEC(tree,gc) *make_tree_vector_from_list (tree); extern VEC(tree,gc) *make_tree_vector_copy (const VEC(tree,gc) *); /* In c-gimplify.c */ |