# HG changeset patch # User roland # Date 1409153838 -7200 # Node ID f565c16d55137186cbdfc12b12064a0c32ed5e4b # Parent b446202ac8248d94fc6d4ec6b7b88059dabe6fbf 8055946: assert(result == NULL || result->is_oop()) failed: must be oop Summary: caller of popped frame doesn't have valid result during deoptimization Reviewed-by: kvn diff -r b446202ac824 -r f565c16d5513 hotspot/src/share/vm/runtime/deoptimization.cpp --- a/hotspot/src/share/vm/runtime/deoptimization.cpp Fri Aug 29 16:32:29 2014 +0200 +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp Wed Aug 27 17:37:18 2014 +0200 @@ -191,7 +191,8 @@ // It is not guaranteed that we can get such information here only // by analyzing bytecode in deoptimized frames. This is why this flag // is set during method compilation (see Compile::Process_OopMap_Node()). - bool save_oop_result = chunk->at(0)->scope()->return_oop(); + // If the previous frame was popped, we don't have a result. + bool save_oop_result = chunk->at(0)->scope()->return_oop() && !thread->popframe_forcing_deopt_reexecution(); Handle return_value; if (save_oop_result) { // Reallocation may trigger GC. If deoptimization happened on return from