# HG changeset patch # User Thomas Wuerthinger # Date 1425897189 -3600 # Node ID 95d0385ec788340ef5ec26862b914b9711754da2 # Parent 055a095424a7ed6844ca34c024ed26fe7191c20f Correctly handle corner case in AbstractBeginNode#removeProxies. diff -r 055a095424a7 -r 95d0385ec788 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Mon Mar 09 01:24:00 2015 +0100 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/Node.java Mon Mar 09 11:33:09 2015 +0100 @@ -345,6 +345,13 @@ return this.usage0 == null; } + /** + * Checks whether this node has usages. + */ + public final boolean hasUsages() { + return this.usage0 != null; + } + void reverseUsageOrder() { List snapshot = this.usages().snapshot(); for (Node n : snapshot) { diff -r 055a095424a7 -r 95d0385ec788 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java Mon Mar 09 01:24:00 2015 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/AbstractBeginNode.java Mon Mar 09 11:33:09 2015 +0100 @@ -94,10 +94,19 @@ } public void removeProxies() { - for (ProxyNode vpn : proxies().snapshot()) { - // can not use graph.replaceFloating because vpn.value may be null during killCFG - vpn.replaceAtUsages(vpn.value()); - vpn.safeDelete(); + if (this.hasUsages()) { + outer: while (true) { + for (ProxyNode vpn : proxies().snapshot()) { + ValueNode value = vpn.value(); + vpn.replaceAtUsages(value); + vpn.safeDelete(); + if (value == this) { + // Guard proxy could have this input as value. + continue outer; + } + } + break; + } } }