diff options
author | Jason Merrill <jason@redhat.com> | 2006-09-01 13:59:41 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2006-09-01 13:59:41 -0400 |
commit | 4832214af7070b43375bf34756334536024acdfb (patch) | |
tree | 3c685cb9c8c3dcc588beeaeb56a9d06d2c15b249 /gcc/gimplify.c | |
parent | a56913dd3781809746ff00a6f296acee9bfc5b9a (diff) | |
download | gcc-4832214af7070b43375bf34756334536024acdfb.zip gcc-4832214af7070b43375bf34756334536024acdfb.tar.gz gcc-4832214af7070b43375bf34756334536024acdfb.tar.bz2 |
re PR c++/28899 (gimplification failed)
PR c++/28899
* gimplify.c (gimplify_modify_expr_rhs) [BIND_EXPR]: Handle
want_value.
* gimplify.c (voidify_wrapper_expr): Handle null type.
From-SVN: r116637
Diffstat (limited to 'gcc/gimplify.c')
-rw-r--r-- | gcc/gimplify.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/gcc/gimplify.c b/gcc/gimplify.c index cf48770..a408c01 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -955,9 +955,9 @@ gimple_build_eh_filter (tree body, tree allowed, tree failure) tree voidify_wrapper_expr (tree wrapper, tree temp) { - if (!VOID_TYPE_P (TREE_TYPE (wrapper))) + tree type = TREE_TYPE (wrapper); + if (type && !VOID_TYPE_P (type)) { - tree type = TREE_TYPE (wrapper); tree *p; /* Set p to point to the body of the wrapper. Loop until we find @@ -3415,10 +3415,23 @@ gimplify_modify_expr_rhs (tree *expr_p, tree *from_p, tree *to_p, tree *pre_p, case STATEMENT_LIST: { tree wrap = *from_p; - tree t = voidify_wrapper_expr (wrap, *expr_p); + tree t; + + ret = gimplify_expr (to_p, pre_p, post_p, + is_gimple_min_lval, fb_lvalue); + if (ret != GS_ERROR) + ret = GS_OK; + + t = voidify_wrapper_expr (wrap, *expr_p); gcc_assert (t == *expr_p); - *expr_p = wrap; + if (want_value) + { + gimplify_and_add (wrap, pre_p); + *expr_p = unshare_expr (*to_p); + } + else + *expr_p = wrap; return GS_OK; } |