8055946: assert(result == NULL || result->is_oop()) failed: must be oop

Caller of popped frame doesn't have valid result during deoptimization

Reviewed-by: kvn
This commit is contained in:
Roland Westrelin 2014-08-27 17:37:18 +02:00
parent fa27000f3c
commit 9369af8c06

View file

@ -191,7 +191,8 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread
// 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