# HG changeset patch # User roland # Date 1409153838 -7200 # Node ID b186a900f63afadfa9c58b3acfbbdb0de9191da5 # Parent be56d800c9463498b2faa3055b0a546846c010b8 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 be56d800c946 -r b186a900f63a src/share/vm/runtime/deoptimization.cpp --- a/src/share/vm/runtime/deoptimization.cpp Mon Aug 11 15:09:04 2014 +0200 +++ b/src/share/vm/runtime/deoptimization.cpp Wed Aug 27 17:37:18 2014 +0200 @@ -228,7 +228,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