This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Patch: FYI: merge flush-quick-stack patch
- From: Tom Tromey <tromey at redhat dot com>
- To: Java Patch List <java-patches at gcc dot gnu dot org>
- Cc: Gcc Patch List <gcc-patches at gcc dot gnu dot org>
- Date: 12 Sep 2006 13:44:45 -0600
- Subject: Patch: FYI: merge flush-quick-stack patch
- Reply-to: tromey at redhat dot com
I'm checking this in on the trunk.
This merges over a fix that has been on the ecj branch for a while.
Recently the eclipse compiler has started generating bytecode like:
13: checkcast #17=<Class CD>
16: pop
In this situation we still have to emit an explicit _Jv_CheckCast
call. This patch ensures that by always flushing the quick stack.
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* expr.c (push_value): Always flush quick stack.
Index: expr.c
===================================================================
--- expr.c (revision 116902)
+++ expr.c (working copy)
@@ -301,6 +301,13 @@
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.