From be00f578ec251393182c202bd130350c30f9b088 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Sat, 29 May 2004 16:24:37 -0400 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/gimplify.c | 23 +++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3081c84b099..662bf28e60f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-05-29 Jason Merrill + + * gimplify.c (gimplify_expr): Don't build a statement list + if no gimplification was necessary. + 2004-05-29 Joseph S. Myers * pretty-print.c (pp_base_format_text): Support %< instead of %` diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 621569bf593..e40052c7938 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;