gimplify.c (gimplify_expr): Don't build a statement list if no gimplification was...
authorJason Merrill <jason@redhat.com>
Sat, 29 May 2004 20:24:37 +0000 (16:24 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 29 May 2004 20:24:37 +0000 (16:24 -0400)
        * gimplify.c (gimplify_expr): Don't build a statement list
        if no gimplification was necessary.

From-SVN: r82429

gcc/ChangeLog
gcc/gimplify.c

index 3081c84b09992a0453f32e2ae92ffd8166253d4a..662bf28e60fa883d5e5d90f1f92319195c38638a 100644 (file)
@@ -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 %`
index 621569bf5934ba0de6423c4264933c8e41a037dd..e40052c79384cdb3399a0d89611db084cc8313ca 100644 (file)
@@ -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;