--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/TypeSwitchNode.java 2017-03-20 17:40:56.000000000 -0700 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes/src/org/graalvm/compiler/nodes/java/TypeSwitchNode.java 2017-03-20 17:40:56.000000000 -0700 @@ -27,6 +27,9 @@ import org.graalvm.compiler.core.common.type.AbstractPointerStamp; import org.graalvm.compiler.core.common.type.ObjectStamp; +import org.graalvm.compiler.core.common.type.Stamp; +import org.graalvm.compiler.core.common.type.StampFactory; +import org.graalvm.compiler.core.common.type.TypeReference; import org.graalvm.compiler.graph.NodeClass; import org.graalvm.compiler.graph.spi.Simplifiable; import org.graalvm.compiler.graph.spi.SimplifierTool; @@ -197,4 +200,21 @@ } } } + + @Override + public Stamp getValueStampForSuccessor(AbstractBeginNode beginNode) { + Stamp result = null; + if (beginNode != defaultSuccessor()) { + for (int i = 0; i < keyCount(); i++) { + if (keySuccessor(i) == beginNode) { + if (result == null) { + result = StampFactory.objectNonNull(TypeReference.createExactTrusted(typeAt(i))); + } else { + result = result.meet(StampFactory.objectNonNull(TypeReference.createExactTrusted(typeAt(i)))); + } + } + } + } + return result; + } }