changeset 22689:87c6d0fe96e9

more accurate position for EnsureVirtual exception
author Lukas Stadler <lukas.stadler@oracle.com>
date Wed, 23 Sep 2015 13:09:38 +0200
parents 93859a908b32
children fd2a8e6da876
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/EnsureVirtualizedNode.java
diffstat 1 files changed, 10 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/EnsureVirtualizedNode.java	Wed Sep 23 11:35:57 2015 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/virtual/EnsureVirtualizedNode.java	Wed Sep 23 13:09:38 2015 +0200
@@ -28,6 +28,7 @@
 import com.oracle.graal.graph.NodeClass;
 import com.oracle.graal.graph.VerificationError;
 import com.oracle.graal.nodeinfo.NodeInfo;
+import com.oracle.graal.nodes.AbstractEndNode;
 import com.oracle.graal.nodes.FixedWithNextNode;
 import com.oracle.graal.nodes.ValueNode;
 import com.oracle.graal.nodes.spi.Lowerable;
@@ -71,6 +72,14 @@
 
     public static void ensureVirtualFailure(Node location, Stamp stamp) {
         Throwable exception = new VerificationError("Object should not be materialized (stamp=%s):", stamp);
-        throw GraphUtil.approxSourceException(location, exception);
+        Node pos;
+        if (location instanceof FixedWithNextNode) {
+            pos = ((FixedWithNextNode) location).next();
+        } else if (location instanceof AbstractEndNode) {
+            pos = ((AbstractEndNode) location).merge();
+        } else {
+            pos = location;
+        }
+        throw GraphUtil.approxSourceException(pos, exception);
     }
 }