aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2004-05-29 16:24:37 -0400
committerJason Merrill <jason@gcc.gnu.org>2004-05-29 16:24:37 -0400
commitbe00f578ec251393182c202bd130350c30f9b088 (patch)
tree08495109ed7b8e7909c94f0e8eb0a1d973fc3013
parentca09cd34f1e976658a5cc60abaf880b2c4901e10 (diff)
downloadgcc-be00f578ec251393182c202bd130350c30f9b088.zip
gcc-be00f578ec251393182c202bd130350c30f9b088.tar.gz
gcc-be00f578ec251393182c202bd130350c30f9b088.tar.bz2
gimplify.c (gimplify_expr): Don't build a statement list if no gimplification was necessary.
* gimplify.c (gimplify_expr): Don't build a statement list if no gimplification was necessary. From-SVN: r82429
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/gimplify.c23
2 files changed, 18 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3081c84..662bf28 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2004-05-29 Jason Merrill <jason@redhat.com>
+
+ * gimplify.c (gimplify_expr): Don't build a statement list
+ if no gimplification was necessary.
+
2004-05-29 Joseph S. Myers <jsm@polyomino.org.uk>
* pretty-print.c (pp_base_format_text): Support %< instead of %`
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 621569b..e40052c 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -202,6 +202,9 @@ append_to_statement_list_1 (tree t, tree *list_p, bool side_effects)
tree list = *list_p;
tree_stmt_iterator i;
+ if (!side_effects)
+ return;
+
if (!list)
{
if (t && TREE_CODE (t) == STATEMENT_LIST)
@@ -212,9 +215,6 @@ append_to_statement_list_1 (tree t, tree *list_p, bool side_effects)
*list_p = list = alloc_stmt_list ();
}
- if (!side_effects)
- return;
-
i = tsi_last (list);
tsi_link_after (&i, t, TSI_CONTINUE_LINKING);
}
@@ -3023,7 +3023,7 @@ gimplify_target_expr (tree *expr_p, tree *pre_p, tree *post_p)
/* Gimplification of expression trees. */
/* Gimplify an expression which appears at statement context; usually, this
- means replacing it with a suitably gimple COMPOUND_EXPR. */
+ means replacing it with a suitably gimple STATEMENT_LIST. */
void
gimplify_stmt (tree *stmt_p)
@@ -3042,7 +3042,7 @@ gimplify_to_stmt_list (tree *stmt_p)
if (TREE_CODE (*stmt_p) != STATEMENT_LIST)
{
tree t = *stmt_p;
- *stmt_p = NULL;
+ *stmt_p = alloc_stmt_list ();
append_to_statement_list (t, stmt_p);
}
}
@@ -3526,10 +3526,13 @@ gimplify_expr (tree *expr_p, tree *pre_p, tree *post_p,
gimplified form. */
if (is_statement)
{
- append_to_statement_list (*expr_p, &internal_pre);
- append_to_statement_list (internal_post, &internal_pre);
- annotate_all_with_locus (&internal_pre, input_location);
- *expr_p = internal_pre;
+ if (internal_pre || internal_post)
+ {
+ append_to_statement_list (*expr_p, &internal_pre);
+ append_to_statement_list (internal_post, &internal_pre);
+ annotate_all_with_locus (&internal_pre, input_location);
+ *expr_p = internal_pre;
+ }
goto out;
}
@@ -3725,7 +3728,7 @@ gimplify_body (tree *body_p, tree fndecl)
tree b = build (BIND_EXPR, void_type_node, NULL_TREE,
NULL_TREE, NULL_TREE);
TREE_SIDE_EFFECTS (b) = 1;
- append_to_statement_list (body, &BIND_EXPR_BODY (b));
+ append_to_statement_list_force (body, &BIND_EXPR_BODY (b));
body = b;
}
*body_p = body;