changeset 8524:ecb2446232ac

Safer bailout for JSR+OSR
author Gilles Duboscq <duboscq@ssw.jku.at>
date Wed, 27 Mar 2013 11:51:53 +0100
parents ebf95eed9eef
children 54f0a88e4523
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java
diffstat 2 files changed, 4 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java	Wed Mar 27 14:03:03 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java	Wed Mar 27 11:51:53 2013 +0100
@@ -82,8 +82,7 @@
                 throw new BailoutException("No OnStackReplacementNode generated");
             }
             if (osrNodes.count() > 1) {
-                // this can happen with JSR inlining
-                throw new BailoutException("Multiple OnStackReplacementNodes generated");
+                throw new GraalInternalError("Multiple OnStackReplacementNodes generated");
             }
             if (osr.stateAfter().locksSize() != 0) {
                 throw new BailoutException("OSR with locks not supported");
--- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Wed Mar 27 14:03:03 2013 +0100
+++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java	Wed Mar 27 11:51:53 2013 +0100
@@ -1688,6 +1688,9 @@
             traceState();
             traceInstruction(bci, opcode, bci == block.startBci);
             if (bci == entryBCI) {
+                if (block.jsrScope != JsrScope.EMPTY_SCOPE) {
+                    throw new BailoutException("OSR into a JSR scope is not supported");
+                }
                 EntryMarkerNode x = currentGraph.add(new EntryMarkerNode());
                 append(x);
                 frameState.insertProxies(x);