aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/java/ChangeLog4
-rw-r--r--gcc/java/expr.c7
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index af1c42b..756fbcf 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,5 +1,9 @@
2006-09-12 Tom Tromey <tromey@redhat.com>
+ * expr.c (push_value): Always flush quick stack.
+
+2006-09-12 Tom Tromey <tromey@redhat.com>
+
PR java/29013:
* jcf-write.c (generate_bytecode_insns) <CALL_EXPR>: Always note
the push of the called method's return result.
diff --git a/gcc/java/expr.c b/gcc/java/expr.c
index 26cd7da..3cb3db7 100644
--- a/gcc/java/expr.c
+++ b/gcc/java/expr.c
@@ -301,6 +301,13 @@ push_value (tree value)
TREE_CHAIN (node) = quick_stack;
quick_stack = node;
}
+ /* If the value has a side effect, then we need to evaluate it
+ whether or not the result is used. If the value ends up on the
+ quick stack and is then popped, this won't happen -- so we flush
+ the quick stack. It is safest to simply always flush, though,
+ since TREE_SIDE_EFFECTS doesn't capture COMPONENT_REF, and for
+ the latter we may need to strip conversions. */
+ flush_quick_stack ();
}
/* Pop a type from the type stack.