This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch: FYI: merge flush-quick-stack patch


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]