--- old/src/share/vm/classfile/verifier.cpp 2012-06-01 13:27:39.422757000 -0400 +++ new/src/share/vm/classfile/verifier.cpp 2012-06-01 13:27:39.249306000 -0400 @@ -1738,6 +1738,9 @@ int target = bci + default_offset; stackmap_table->check_jump_target(current_frame, target, CHECK_VERIFY(this)); for (int i = 0; i < keys; i++) { + // Because check_jump_target() may safepoint, the bytecode could have + // moved, which means 'aligned_bcp' is no good and needs to be recalculated. + aligned_bcp = (address)round_to((intptr_t)(bcs->bcp() + 1), jintSize); target = bci + (jint)Bytes::get_Java_u4(aligned_bcp+(3+i*delta)*jintSize); stackmap_table->check_jump_target( current_frame, target, CHECK_VERIFY(this));