--- old/src/share/vm/opto/escape.cpp 2017-03-16 19:06:16.000000000 +0300 +++ new/src/share/vm/opto/escape.cpp 2017-03-16 19:06:15.000000000 +0300 @@ -2302,8 +2302,16 @@ // | | // AddP ( base == address ) // + // case #9. Mixed unsafe access + // {instance} + // | + // CheckCastPP (raw) + // top | + // \ | + // AddP ( base == top ) + // Node *base = addp->in(AddPNode::Base); - if (base->uncast()->is_top()) { // The AddP case #3 and #6. + if (base->uncast()->is_top()) { // The AddP case #3, #6, and #9. base = addp->in(AddPNode::Address); while (base->is_AddP()) { // Case #6 (unsafe access) may have several chained AddP nodes. @@ -2313,7 +2321,7 @@ if (base->Opcode() == Op_CheckCastPP && base->bottom_type()->isa_rawptr() && _igvn->type(base->in(1))->isa_oopptr()) { - base = base->in(1); + base = base->in(1); // Case #9 } else { Node* uncast_base = base->uncast(); int opcode = uncast_base->Opcode();