# HG changeset patch # User Gilles Duboscq # Date 1356009105 -3600 # Node ID eea2ffb2efe7a9b6759a47472af5e7f8608273b1 # Parent 3964f3d4eb18dd4efe898f3692b2e8e6f8de7719 Fix to StructuredGraph.removeSplitPropagate for when a loop gets killed in the process diff -r 3964f3d4eb18 -r eea2ffb2efe7 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Thu Dec 20 12:06:58 2012 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/StructuredGraph.java Thu Dec 20 14:11:45 2012 +0100 @@ -254,18 +254,17 @@ assert node != null; assert node.usages().isEmpty(); assert survivingSuccessor != null; - for (Node successor : node.successors().snapshot()) { - successor.replaceAtPredecessor(null); - if (successor != null && successor != survivingSuccessor && successor.isAlive()) { - GraphUtil.killCFG((BeginNode) successor); + List snapshot = node.successors().snapshot(); + node.clearSuccessors(); + node.replaceAtPredecessor(survivingSuccessor); + node.safeDelete(); + for (Node successor : snapshot) { + if (successor != null && successor.isAlive()) { + if (successor != survivingSuccessor) { + GraphUtil.killCFG((BeginNode) successor); + } } } - if (survivingSuccessor.isAlive()) { - node.replaceAtPredecessor(survivingSuccessor); - node.safeDelete(); - } else { - assert node.isDeleted() : node + " " + survivingSuccessor; - } } public void replaceSplit(ControlSplitNode node, Node replacement, BeginNode survivingSuccessor) {