--- old/src/share/vm/opto/macroArrayCopy.cpp 2015-01-14 10:19:27.314783128 +0100 +++ new/src/share/vm/opto/macroArrayCopy.cpp 2015-01-14 10:19:27.137212198 +0100 @@ -519,7 +519,7 @@ // Test S[] against D[], not S against D, because (probably) // the secondary supertype cache is less busy for S[] than S. // This usually only matters when D is an interface. - Node* not_subtype_ctrl = ac->is_arraycopy_validated() ? top() : + Node* not_subtype_ctrl = (ac->is_arraycopy_validated() || ac->is_copyof_validated() || ac->is_copyofrange_validated()) ? top() : Phase::gen_subtype_check(src_klass, dest_klass, ctrl, mem, &_igvn); // Plug failing path into checked_oop_disjoint_arraycopy if (not_subtype_ctrl != top()) {