--- old/src/share/vm/ci/bcEscapeAnalyzer.cpp 2017-06-16 14:34:20.673928422 +0200 +++ new/src/share/vm/ci/bcEscapeAnalyzer.cpp 2017-06-16 14:34:20.301928439 +0200 @@ -553,7 +553,6 @@ set_modified(arr, OFFSET_ANY, type2size[T_LONG]*HeapWordSize); break; } - case Bytecodes::_vastore: case Bytecodes::_aastore: { set_global_escape(state.apop()); @@ -562,6 +561,17 @@ set_modified(arr, OFFSET_ANY, type2size[T_OBJECT]*HeapWordSize); break; } + case Bytecodes::_vastore: + { + set_global_escape(state.apop()); + state.spop(); + ArgumentMap arr = state.apop(); + // If the array is flattened, a larger part of it is modified than + // the size of a reference. However, if OFFSET_ANY is given as + // parameter to set_modified(), size is not taken into account. + set_modified(arr, OFFSET_ANY, type2size[T_VALUETYPE]*HeapWordSize); + break; + } case Bytecodes::_pop: state.raw_pop(); break;