diff src/share/vm/opto/library_call.cpp @ 17990:00c8a1255912

8033626: assert(ex_map->jvms()->same_calls_as(_exceptions->jvms())) failed: all collected exceptions must come from the same place Reviewed-by: kvn, roland
author vlivanov
date Tue, 17 Jun 2014 09:02:30 +0000
parents dbf0d88d867d
children 52b4284cb496 922c87c9aed4
line wrap: on
line diff
--- a/src/share/vm/opto/library_call.cpp	Fri Jun 13 15:04:38 2014 -0700
+++ b/src/share/vm/opto/library_call.cpp	Tue Jun 17 09:02:30 2014 +0000
@@ -4576,7 +4576,10 @@
       // It's an instance, and it passed the slow-path tests.
       PreserveJVMState pjvms(this);
       Node* obj_size  = NULL;
-      Node* alloc_obj = new_instance(obj_klass, NULL, &obj_size);
+      // Need to deoptimize on exception from allocation since Object.clone intrinsic
+      // is reexecuted if deoptimization occurs and there could be problems when merging
+      // exception state between multiple Object.clone versions (reexecute=true vs reexecute=false).
+      Node* alloc_obj = new_instance(obj_klass, NULL, &obj_size, /*deoptimize_on_exception=*/true);
 
       copy_to_clone(obj, alloc_obj, obj_size, false, !use_ReduceInitialCardMarks());