changeset 11713:972f2e2c797a

Fix a bug in the escape analysis of pi nodes.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Thu, 19 Sep 2013 04:27:31 +0200
parents 0d16339188ef
children cb81a0f3407c
files graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Thu Sep 19 04:11:20 2013 +0200
+++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/PiNode.java	Thu Sep 19 04:27:31 2013 +0200
@@ -70,6 +70,14 @@
     public void virtualize(VirtualizerTool tool) {
         State state = tool.getObjectState(object);
         if (state != null && state.getState() == EscapeState.Virtual) {
+            ResolvedJavaType virtualObjectType = state.getVirtualObject().type();
+            if (this.kind() == Kind.Object) {
+                ObjectStamp myStamp = ((ObjectStamp) this.stamp());
+                ResolvedJavaType myType = myStamp.type();
+                if (!myType.isAssignableFrom(virtualObjectType)) {
+                    return;
+                }
+            }
             tool.replaceWithVirtual(state.getVirtualObject());
         }
     }