[patch] Remove unused java/expr.c:force_evaluation_order

Steven Bosscher <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.java.patches
Message-ID <CABu31nNN0cVxWovi23OBaECeoN9jUywjAizLMaBF7gMa8BG1tA@mail.gmail.com>
Hello,

Remove force_evaluation_order because the only caller is
force_evaluation_order itself.
Will commit after a few days, if no-one objects.

Ciao!
Steven

java/
        * java-tree.h (force_evaluation_order): Remove prototype.
        * expr.c (force_evaluation_order): Remove unused function.

Index: java-tree.h
===================================================================
--- java-tree.h (revision 189423)
+++ java-tree.h (working copy)
@@ -1094,7 +1094,6 @@ extern int merge_type_state (tree);
 extern int push_type_0 (tree);
 extern void push_type (tree);
 extern void add_interface (tree, tree);
-extern tree force_evaluation_order (tree);
 extern tree java_create_object (tree);
 extern int verify_constant_pool (struct JCF *);
 extern void start_java_method (tree);
Index: expr.c
===================================================================
--- expr.c      (revision 189423)
+++ expr.c      (working copy)
@@ -3689,82 +3689,6 @@ maybe_adjust_start_pc (struct JCF *jcf,
   return start_pc;
 }

-/* Force the (direct) sub-operands of NODE to be evaluated in left-to-right
-   order, as specified by Java Language Specification.
-
-   The problem is that while expand_expr will evaluate its sub-operands in
-   left-to-right order, for variables it will just return an rtx (i.e.
-   an lvalue) for the variable (rather than an rvalue).  So it is possible
-   that a later sub-operand will change the register, and when the
-   actual operation is done, it will use the new value, when it should
-   have used the original value.
-
-   We fix this by using save_expr.  This forces the sub-operand to be
-   copied into a fresh virtual register,
-
-   For method invocation, we modify the arguments so that a
-   left-to-right order evaluation is performed. Saved expressions
-   will, in CALL_EXPR order, be reused when the call will be expanded.
-
-   We also promote outgoing args if needed.  */
-
-tree
-force_evaluation_order (tree node)
-{
-  if (flag_syntax_only)
-    return node;
-  if (TREE_CODE (node) == CALL_EXPR
-      || (TREE_CODE (node) == COMPOUND_EXPR
-         && TREE_CODE (TREE_OPERAND (node, 0)) == CALL_EXPR
-         && TREE_CODE (TREE_OPERAND (node, 1)) == SAVE_EXPR))
-    {
-      tree call, cmp;
-      int i, nargs;
-
-      /* Account for wrapped around ctors.  */
-      if (TREE_CODE (node) == COMPOUND_EXPR)
-        call = TREE_OPERAND (node, 0);
-      else
-       call = node;
-
-      nargs = call_expr_nargs (call);
-
-      /* This reverses the evaluation order. This is a desired effect. */
-      for (i = 0, cmp = NULL_TREE; i < nargs; i++)
-       {
-         tree arg = CALL_EXPR_ARG (call, i);
-         /* Promote types smaller than integer.  This is required by
-            some ABIs.  */
-         tree type = TREE_TYPE (arg);
-         tree saved;
-         if (targetm.calls.promote_prototypes (type)
-             && INTEGRAL_TYPE_P (type)
-             && INT_CST_LT_UNSIGNED (TYPE_SIZE (type),
-                                     TYPE_SIZE (integer_type_node)))
-           arg = fold_convert (integer_type_node, arg);
-
-         saved = save_expr (force_evaluation_order (arg));
-         cmp = (cmp == NULL_TREE ? saved :
-                build2 (COMPOUND_EXPR, void_type_node, cmp, saved));
-
-         CALL_EXPR_ARG (call, i) = saved;
-       }
-
-      if (cmp && TREE_CODE (cmp) == COMPOUND_EXPR)
-       TREE_SIDE_EFFECTS (cmp) = 1;
-
-      if (cmp)
-       {
-         cmp = build2 (COMPOUND_EXPR, TREE_TYPE (node), cmp, node);
-         if (TREE_TYPE (cmp) != void_type_node)
-           cmp = save_expr (cmp);
-         TREE_SIDE_EFFECTS (cmp) = 1;
-         node = cmp;
-       }
-    }
-  return node;
-}
-
 /* Build a node to represent empty statements and blocks. */

 tree
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.