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
--- 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