# HG changeset patch # User Doug Simon # Date 1375694684 -7200 # Node ID 4c0f7b396be637506c8487c125de67819aab1a7e # Parent 19648527ec725576a78244894073b0f017f075a1 added receiver null check in canonicalization of java.lang.Class macro nodes diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetComponentTypeNode.java --- 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; } diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetModifiersNode.java --- 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; } diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassGetSuperclassNode.java --- 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; } diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsArrayNode.java --- 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; } diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInstanceNode.java --- 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; } diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsInterfaceNode.java --- 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; } diff -r 19648527ec72 -r 4c0f7b396be6 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ClassIsPrimitiveNode.java --- 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; }