# HG changeset patch # User Mick Jordan # Date 1375811453 25200 # Node ID 679ba643aa7130b7f1863b01b33a92083b51c0df # Parent 7244c8366d4401b43babe7f33f44948c729e2e92 CR-917 fix for ExceptionObjectNode diff -r 7244c8366d44 -r 679ba643aa71 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Aug 06 17:30:47 2013 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/java/ExceptionObjectNode.java Tue Aug 06 10:50:53 2013 -0700 @@ -22,8 +22,11 @@ */ package com.oracle.graal.nodes.java; +import java.util.*; + import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.graph.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*; @@ -67,7 +70,22 @@ } LoadExceptionObjectNode loadException = graph().add(new LoadExceptionObjectNode(stamp())); loadException.setStateAfter(stateAfter()); + List guardedNodes = new ArrayList<>(); + for (Node usage : usages().snapshot()) { + if (usage instanceof GuardedNode) { + // can't replace the guard with LoadExceptionObjectNode as it is not a GuardingNode + // so temporarily change it to remove the GuardedNode from usages + GuardedNode guardedNode = (GuardedNode) usage; + guardedNode.setGuard(graph().add(new BeginNode())); + guardedNodes.add(guardedNode); + } + } replaceAtUsages(loadException); + for (GuardedNode guardedNode : guardedNodes) { + BeginNode dummyGuard = (BeginNode) guardedNode.getGuard(); + guardedNode.setGuard(this); + graph().removeFixed(dummyGuard); + } graph().addAfterFixed(this, loadException); setStateAfter(null); setStamp(StampFactory.forVoid());