--- old/src/share/vm/interpreter/interpreterRuntime.cpp 2017-06-16 14:34:20.849928413 +0200 +++ new/src/share/vm/interpreter/interpreterRuntime.cpp 2017-06-16 14:34:20.525928428 +0200 @@ -396,6 +396,10 @@ IRT_ENTRY(void, InterpreterRuntime::value_array_store(JavaThread* thread, arrayOopDesc* array, int index, void* val)) Klass* klass = array->klass(); assert(klass->is_valueArray_klass() || klass->is_objArray_klass(), "expected value or object array oop"); + + if (ArrayKlass::cast(klass)->element_klass() != ((oop)val)->klass()) { + THROW(vmSymbols::java_lang_ArrayStoreException()); + } if (klass->is_objArray_klass()) { ((objArrayOop) array)->obj_at_put(index, (oop)val); }