# HG changeset patch
# User roland
# Date 1506520357 -7200
# Wed Sep 27 15:52:37 2017 +0200
# Node ID c307975d0800f8da5cc8e82cd8f1fdadbd745357
# Parent ab0c101fa16e4cd97ac8ceff4f5ff72e2f4d5776
[backport] fix TCK crash with shenandoah
diff --git a/src/share/vm/opto/shenandoahSupport.cpp b/src/share/vm/opto/shenandoahSupport.cpp
--- openjdk/hotspot/src/share/vm/opto/shenandoahSupport.cpp
+++ openjdk/hotspot/src/share/vm/opto/shenandoahSupport.cpp
@@ -472,9 +472,11 @@
Node* input = in(Memory);
if (input->Opcode() == Op_ShenandoahWBMemProj) {
Node* wb = input->in(0);
- if (wb->is_top()) return NULL; // Dead path.
+ const Type* in_type = phase->type(wb);
+ // is_top() test not sufficient here: we can come here after CCP
+ // in a dead branch of the graph that has not yet been removed.
+ if (in_type == Type::TOP) return NULL; // Dead path.
assert(wb->Opcode() == Op_ShenandoahWriteBarrier, "expect write barrier");
- const Type* in_type = phase->type(wb);
if (is_independent(in_type, _type)) {
if (phase->is_IterGVN()) {
phase->is_IterGVN()->rehash_node_delayed(wb);