# HG changeset patch # User Thomas Wuerthinger # Date 1309964535 -7200 # Node ID 132aa6f2bbc01dde2646bccbce24fb5c87f6e84e # Parent 462c89186179d9b4c09033db444c1fd8721a323d Fixed rethrow exception frame state (again.. and this time added some useful assertions). diff -r 462c89186179 -r 132aa6f2bbc0 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Wed Jul 06 16:43:19 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/phases/GraphBuilderPhase.java Wed Jul 06 17:02:15 2011 +0200 @@ -1250,6 +1250,7 @@ } else if (block instanceof DeoptBlock) { createDeoptBlock((DeoptBlock) block); } else { + frameState.setRethrowException(false); iterateBytecodesForBlock(block); } } diff -r 462c89186179 -r 132aa6f2bbc0 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java Wed Jul 06 16:43:19 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameState.java Wed Jul 06 17:02:15 2011 +0200 @@ -49,7 +49,7 @@ protected final int locksSize; - private final boolean rethrowException; + private boolean rethrowException; private static final int SUCCESSOR_COUNT = 0; @@ -573,4 +573,9 @@ public Node copy(Graph into) { return new FrameState(method, bci, localsSize, stackSize, locksSize, rethrowException, into); } + + @Override + public void setRethrowException(boolean b) { + rethrowException = b; + } } diff -r 462c89186179 -r 132aa6f2bbc0 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateAccess.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateAccess.java Wed Jul 06 16:43:19 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateAccess.java Wed Jul 06 17:02:15 2011 +0200 @@ -34,6 +34,8 @@ int locksSize(); + boolean rethrowException(); + Value valueAt(int i); Value localAt(int i); @@ -44,6 +46,8 @@ void setValueAt(int j, Value v); + void setRethrowException(boolean b); + Value outerFrameState(); FrameState duplicateWithException(int bci, Value exceptionObject); diff -r 462c89186179 -r 132aa6f2bbc0 graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateBuilder.java --- a/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateBuilder.java Wed Jul 06 16:43:19 2011 +0200 +++ b/graal/com.oracle.max.graal.compiler/src/com/oracle/max/graal/compiler/value/FrameStateBuilder.java Wed Jul 06 17:02:15 2011 +0200 @@ -515,4 +515,14 @@ frameState.setOuterFrameState(outerFrameState()); return frameState; } + + @Override + public boolean rethrowException() { + return rethrowException; + } + + @Override + public void setRethrowException(boolean b) { + rethrowException = b; + } } diff -r 462c89186179 -r 132aa6f2bbc0 src/share/vm/runtime/deoptimization.cpp --- a/src/share/vm/runtime/deoptimization.cpp Wed Jul 06 16:43:19 2011 +0200 +++ b/src/share/vm/runtime/deoptimization.cpp Wed Jul 06 17:02:15 2011 +0200 @@ -1247,6 +1247,7 @@ tty->print_cr("Exception to be rethrown in the interpreter for method %s::%s at bci %d", instanceKlass::cast(trap_method->method_holder())->name()->as_C_string(), trap_method->name()->as_C_string(), trap_bci); } GrowableArray* expressions = trap_scope->expressions(); + guarantee(expressions != NULL, "must have exception to throw"); ScopeValue* topOfStack = expressions->top(); Handle topOfStackObj = cvf->create_stack_value(topOfStack)->get_obj(); THREAD->set_pending_exception(topOfStackObj(), NULL, 0);