diff -r 13588c901957 -r 9cf78a70fa4f src/hotspot/share/opto/arraycopynode.cpp --- a/src/hotspot/share/opto/arraycopynode.cpp Thu Oct 17 20:27:44 2019 +0100 +++ b/src/hotspot/share/opto/arraycopynode.cpp Thu Oct 17 20:53:35 2019 +0100 @@ -136,7 +136,7 @@ // array must be too. assert((get_length_if_constant(phase) == -1) == !ary_src->size()->is_con() || - phase->is_IterGVN(), "inconsistent"); + phase->is_IterGVN() || StressReflectiveCode, "inconsistent"); if (ary_src->size()->is_con()) { return ary_src->size()->get_con(); @@ -268,8 +268,8 @@ BasicType src_elem = ary_src->klass()->as_array_klass()->element_type()->basic_type(); BasicType dest_elem = ary_dest->klass()->as_array_klass()->element_type()->basic_type(); - if (src_elem == T_ARRAY) src_elem = T_OBJECT; - if (dest_elem == T_ARRAY) dest_elem = T_OBJECT; + if (is_reference_type(src_elem)) src_elem = T_OBJECT; + if (is_reference_type(dest_elem)) dest_elem = T_OBJECT; if (src_elem != dest_elem || dest_elem == T_VOID) { // We don't know if arguments are arrays of the same type @@ -328,7 +328,7 @@ assert(phase->type(src->in(AddPNode::Offset))->is_intptr_t()->get_con() == phase->type(dest->in(AddPNode::Offset))->is_intptr_t()->get_con(), "same start offset?"); BasicType elem = ary_src->klass()->as_array_klass()->element_type()->basic_type(); - if (elem == T_ARRAY) elem = T_OBJECT; + if (is_reference_type(elem)) elem = T_OBJECT; BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); if (bs->array_copy_requires_gc_barriers(true, elem, true, BarrierSetC2::Optimization)) {