changeset 11202:4c0f7b396be6

added receiver null check in canonicalization of java.lang.Class macro nodes
author Doug Simon <doug.simon@oracle.com>
date Mon, 05 Aug 2013 11:24:44 +0200
parents 19648527ec72
children 8ab76b7c6ff6
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java
diffstat 7 files changed, 31 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -46,8 +46,10 @@
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
             Class c = (Class) javaClass.asConstant().asObject();
-            Class componentType = c.getComponentType();
-            return ConstantNode.forObject(componentType, tool.runtime(), graph());
+            if (c != null) {
+                Class componentType = c.getComponentType();
+                return ConstantNode.forObject(componentType, tool.runtime(), graph());
+            }
         }
         return this;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -46,7 +46,9 @@
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
             Class c = (Class) javaClass.asConstant().asObject();
-            return ConstantNode.forInt(c.getModifiers(), graph());
+            if (c != null) {
+                return ConstantNode.forInt(c.getModifiers(), graph());
+            }
         }
         return this;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -46,8 +46,10 @@
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
             Class c = (Class) javaClass.asConstant().asObject();
-            Class superclass = c.getSuperclass();
-            return ConstantNode.forObject(superclass, tool.runtime(), graph());
+            if (c != null) {
+                Class superclass = c.getSuperclass();
+                return ConstantNode.forObject(superclass, tool.runtime(), graph());
+            }
         }
         return this;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -46,7 +46,9 @@
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
             Class c = (Class) javaClass.asConstant().asObject();
-            return ConstantNode.forBoolean(c.isArray(), graph());
+            if (c != null) {
+                return ConstantNode.forBoolean(c.isArray(), graph());
+            }
         }
         return this;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -54,16 +54,18 @@
         if (javaClass.isConstant()) {
             ValueNode object = getObject();
             Class c = (Class) javaClass.asConstant().asObject();
-            if (c.isPrimitive()) {
-                return ConstantNode.forBoolean(false, graph());
+            if (c != null) {
+                if (c.isPrimitive()) {
+                    return ConstantNode.forBoolean(false, graph());
+                }
+                if (object.isConstant()) {
+                    Object o = object.asConstant().asObject();
+                    return ConstantNode.forBoolean(o != null && c.isInstance(o), graph());
+                }
+                HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) HotSpotResolvedObjectType.fromClass(c);
+                InstanceOfNode instanceOf = graph().unique(new InstanceOfNode(type, object, null));
+                return graph().unique(new ConditionalNode(instanceOf, ConstantNode.forBoolean(true, graph()), ConstantNode.forBoolean(false, graph())));
             }
-            if (object.isConstant()) {
-                Object o = object.asConstant().asObject();
-                return ConstantNode.forBoolean(o != null && c.isInstance(o), graph());
-            }
-            HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) HotSpotResolvedObjectType.fromClass(c);
-            InstanceOfNode instanceOf = graph().unique(new InstanceOfNode(type, object, null));
-            return graph().unique(new ConditionalNode(instanceOf, ConstantNode.forBoolean(true, graph()), ConstantNode.forBoolean(false, graph())));
         }
         return this;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -46,7 +46,9 @@
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
             Class c = (Class) javaClass.asConstant().asObject();
-            return ConstantNode.forBoolean(c.isInterface(), graph());
+            if (c != null) {
+                return ConstantNode.forBoolean(c.isInterface(), graph());
+            }
         }
         return this;
     }
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java	Mon Aug 05 10:44:46 2013 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java	Mon Aug 05 11:24:44 2013 +0200
@@ -46,7 +46,9 @@
         ValueNode javaClass = getJavaClass();
         if (javaClass.isConstant()) {
             Class c = (Class) javaClass.asConstant().asObject();
-            return ConstantNode.forBoolean(c.isPrimitive(), graph());
+            if (c != null) {
+                return ConstantNode.forBoolean(c.isPrimitive(), graph());
+            }
         }
         return this;
     }