8055946: assert(result == NULL || result->is_oop()) failed: must be oop
authorroland
Wed, 27 Aug 2014 17:37:18 +0200
changeset 26436 f565c16d5513
parent 26435 b446202ac824
child 26437 b6e75523f59b
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
hotspot/src/share/vm/runtime/deoptimization.cpp
--- 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