aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorRoger Sayle <roger@eyesopen.com>2003-09-28 04:56:35 +0000
committerRoger Sayle <sayle@gcc.gnu.org>2003-09-28 04:56:35 +0000
commitc67e6e1492b2e8cedf8a95731ee788dc919984be (patch)
tree59d5e4829907404d9cd123482f4ad1565deac1eb /gcc/java
parentedaf3e0357bbc16c01ff9f341016a1e6969a617d (diff)
downloadgcc-c67e6e1492b2e8cedf8a95731ee788dc919984be.zip
gcc-c67e6e1492b2e8cedf8a95731ee788dc919984be.tar.gz
gcc-c67e6e1492b2e8cedf8a95731ee788dc919984be.tar.bz2
toplev.c (flag_evaluation_order): New global variable.
* toplev.c (flag_evaluation_order): New global variable. * flags.h (flag_evaluation_order): Prototype here. * expr.c (expand_operands): If we need to preserve observable evaluation order, protect exp1 from clobbering exp0's result. * java/lang.c (java_init_options): Set flag_evaluation_order. * java/expr.c (force_evaluation_order): Don't attempt to force evaluation order of binary operations using save_expr. * java/parse.y (java_complete_lhs): No longer need to call force_evaluation_order when constructing binary operators. From-SVN: r71873
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog8
-rw-r--r--gcc/java/expr.c15
-rw-r--r--gcc/java/lang.c3
-rw-r--r--gcc/java/parse.y2
4 files changed, 17 insertions, 11 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index a79d73a..514c097 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,11 @@
+2003-09-27 Roger Sayle <roger@eyesopen.com>
+
+ * lang.c (java_init_options): Set flag_evaluation_order.
+ * expr.c (force_evaluation_order): Don't attempt to force
+ evaluation order of binary operations using save_expr.
+ * parse.y (java_complete_lhs): No longer need to call
+ force_evaluation_order when constructing binary operators.
+
2003-09-27 Alexandre Petit-Bianco <apbianco@redhat.com>
Bryce McKinlay <bryce@mckinlay.net.nz>
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 803c2de..272cb35 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -3324,16 +3324,11 @@ force_evaluation_order (tree node)
{
if (flag_syntax_only)
return node;
- if (TREE_CODE_CLASS (TREE_CODE (node)) == '2')
- {
- if (TREE_SIDE_EFFECTS (TREE_OPERAND (node, 1)))
- TREE_OPERAND (node, 0) = save_expr (TREE_OPERAND (node, 0));
- }
- else if (TREE_CODE (node) == CALL_EXPR
- || TREE_CODE (node) == NEW_CLASS_EXPR
- || (TREE_CODE (node) == COMPOUND_EXPR
- && TREE_CODE (TREE_OPERAND (node, 0)) == CALL_EXPR
- && TREE_CODE (TREE_OPERAND (node, 1)) == SAVE_EXPR))
+ if (TREE_CODE (node) == CALL_EXPR
+ || TREE_CODE (node) == NEW_CLASS_EXPR
+ || (TREE_CODE (node) == COMPOUND_EXPR
+ && TREE_CODE (TREE_OPERAND (node, 0)) == CALL_EXPR
+ && TREE_CODE (TREE_OPERAND (node, 1)) == SAVE_EXPR))
{
tree arg, cmp;
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index 5ade4c0..a3ed327 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -685,6 +685,9 @@ java_init_options (unsigned int argc ATTRIBUTE_UNUSED,
/* In Java arithmetic overflow always wraps around. */
flag_wrapv = 1;
+ /* Java requires left-to-right evaluation of subexpressions. */
+ flag_evaluation_order = 1;
+
jcf_path_init ();
return CL_Java;
diff --git a/gcc/java/parse.y b/gcc/java/parse.y
index e409719..ebcf680 100644
--- a/gcc/java/parse.y
+++ b/gcc/java/parse.y
@@ -12265,7 +12265,7 @@ java_complete_lhs (tree node)
TREE_OPERAND (node, 1) = nn;
}
- return force_evaluation_order (patch_binop (node, wfl_op1, wfl_op2));
+ return patch_binop (node, wfl_op1, wfl_op2);
case INSTANCEOF_EXPR:
wfl_op1 = TREE_OPERAND (node, 0);