src/share/vm/runtime/deoptimization.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/runtime/deoptimization.cpp

src/share/vm/runtime/deoptimization.cpp

Print this page
rev 6941 : 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:

*** 189,199 **** // runtime calls (for example, used to allocate new objects/arrays // on slow code path) and any other calls generated in compiled code. // 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(); Handle return_value; if (save_oop_result) { // Reallocation may trigger GC. If deoptimization happened on return from // call which returns oop we need to save it since it is not in oopmap. oop result = deoptee.saved_oop_result(&map); --- 189,200 ---- // runtime calls (for example, used to allocate new objects/arrays // on slow code path) and any other calls generated in compiled code. // 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()). ! // If we the previous 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 // call which returns oop we need to save it since it is not in oopmap. oop result = deoptee.saved_oop_result(&map);
src/share/vm/runtime/deoptimization.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File