8173699: Crash during deoptimization with "assert(result == __null || result->is_oop()) failed: must be oop"
Ignore return_oop() when dispatching an exception and only try to retrieve the oop when performing re-allocation during a normal deoptimization (if exec_mode == Unpack_deopt). Reviewed-by: kvn, vlivanov
This commit is contained in:
parent
632427880f
commit
b9e2a53841
@ -221,8 +221,9 @@ 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()).
|
||||
// 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();
|
||||
// If the previous frame was popped or if we are dispatching an exception,
|
||||
// we don't have an oop result.
|
||||
bool save_oop_result = chunk->at(0)->scope()->return_oop() && !thread->popframe_forcing_deopt_reexecution() && (exec_mode == Unpack_deopt);
|
||||
Handle return_value;
|
||||
if (save_oop_result) {
|
||||
// Reallocation may trigger GC. If deoptimization happened on return from
|
||||
|
Loading…
x
Reference in New Issue
Block a user