# HG changeset patch # User Doug Simon # Date 1435075830 -7200 # Node ID 312ecf78fb2d6ce44c34ac9eda6e30cc7d8f6896 # Parent bc502be71702c508aab3ebc5887f561630d9be60 compute lock depth for MonitorIdNodes correctly when inlining during parsing diff -r bc502be71702 -r 312ecf78fb2d graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Tue Jun 23 08:34:21 2015 -0700 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/BytecodeParser.java Tue Jun 23 18:10:30 2015 +0200 @@ -1649,13 +1649,13 @@ } synchronizedEpilogue(BytecodeFrame.AFTER_BCI, x, kind); - if (frameState.lockDepth() != 0) { + if (frameState.lockDepth(false) != 0) { throw bailout("unbalanced monitors"); } } protected void genMonitorEnter(ValueNode x, int bci) { - MonitorIdNode monitorId = graph.add(new MonitorIdNode(frameState.lockDepth())); + MonitorIdNode monitorId = graph.add(new MonitorIdNode(frameState.lockDepth(true))); MonitorEnterNode monitorEnter = append(new MonitorEnterNode(x, monitorId)); frameState.pushLock(x, monitorId); monitorEnter.setStateAfter(createFrameState(bci, monitorEnter)); diff -r bc502be71702 -r 312ecf78fb2d graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java --- a/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Tue Jun 23 08:34:21 2015 -0700 +++ b/graal/com.oracle.graal.java/src/com/oracle/graal/java/FrameStateBuilder.java Tue Jun 23 18:10:30 2015 +0200 @@ -534,9 +534,13 @@ /** * @return the current lock depth */ - public int lockDepth() { - assert lockedObjects.length == monitorIds.length; - return lockedObjects.length; + public int lockDepth(boolean includeParents) { + int depth = lockedObjects.length; + assert depth == monitorIds.length; + if (includeParents && parser.getParent() != null) { + depth += parser.getParent().frameState.lockDepth(true); + } + return depth; } public boolean contains(ValueNode value) {