--- old/src/cpu/x86/vm/stubGenerator_x86_64.cpp 2017-06-20 16:28:05.274114607 -0400 +++ new/src/cpu/x86/vm/stubGenerator_x86_64.cpp 2017-06-20 16:28:04.654111532 -0400 @@ -995,7 +995,7 @@ StubCodeMark mark(this, "StubRoutines", "verify_oop"); address start = __ pc(); - Label exit, error; + Label exit, error, in_Java_heap; __ pushf(); __ incrementl(ExternalAddress((address) StubRoutines::verify_oop_count_addr())); @@ -1029,7 +1029,14 @@ __ andptr(c_rarg2, c_rarg3); __ movptr(c_rarg3, (intptr_t) Universe::verify_oop_bits()); __ cmpptr(c_rarg2, c_rarg3); - __ jcc(Assembler::notZero, error); + __ jcc(Assembler::zero, in_Java_heap); + // Not in Java heap, but could be valid if it's a bufferable value type + __ load_klass(c_rarg2, rax); + __ movbool(c_rarg2, Address(c_rarg2, InstanceKlass::extra_flags_offset())); + __ andptr(c_rarg2, InstanceKlass::_extra_is_bufferable); + __ testbool(c_rarg2); + __ jcc(Assembler::zero, error); + __ bind(in_Java_heap); // set r12 to heapbase for load_klass() __ reinit_heapbase();