# HG changeset patch # User Gilles Duboscq # Date 1364381513 -3600 # Node ID ecb2446232ac67671a0cb25170b7c8158dd8fea2 # Parent ebf95eed9eef69b9dd7c378810754802ebfaf107 Safer bailout for JSR+OSR diff -r ebf95eed9eef -r ecb2446232ac graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/phases/OnStackReplacementPhase.java --- 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"); diff -r ebf95eed9eef -r ecb2446232ac graal/com.oracle.graal.java/src/com/oracle/graal/java/GraphBuilderPhase.java --- 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);