8193323: Crash in "failed dependencies, but counter didn't change" with enabled UseJVMCICompiler
authordlong
Wed, 13 Dec 2017 20:35:09 -0800
changeset 48400 8604408bc26e
parent 48399 cf7792800ba9
child 48401 be065f758154
8193323: Crash in "failed dependencies, but counter didn't change" with enabled UseJVMCICompiler Reviewed-by: kvn
src/hotspot/share/compiler/compileBroker.cpp
src/hotspot/share/jvmci/jvmciCompilerToVM.cpp
--- a/src/hotspot/share/compiler/compileBroker.cpp	Wed Dec 13 23:06:59 2017 +0100
+++ b/src/hotspot/share/compiler/compileBroker.cpp	Wed Dec 13 20:35:09 2017 -0800
@@ -1852,17 +1852,23 @@
     TraceTime t1("compilation", &time);
     EventCompilation event;
 
-    JVMCIEnv env(task, system_dictionary_modification_counter);
-    methodHandle method(thread, target_handle);
-    jvmci->compile_method(method, osr_bci, &env);
-
-    post_compile(thread, task, event, task->code() != NULL, NULL);
+    // Skip redefined methods
+    if (target_handle->is_old()) {
+        failure_reason = "redefined method";
+        retry_message = "not retryable";
+        compilable = ciEnv::MethodCompilable_never;
+    } else {
+        JVMCIEnv env(task, system_dictionary_modification_counter);
+        methodHandle method(thread, target_handle);
+        jvmci->compile_method(method, osr_bci, &env);
 
-    failure_reason = env.failure_reason();
-    if (!env.retryable()) {
-      retry_message = "not retryable";
-      compilable = ciEnv::MethodCompilable_not_at_tier;
+        failure_reason = env.failure_reason();
+        if (!env.retryable()) {
+          retry_message = "not retryable";
+          compilable = ciEnv::MethodCompilable_not_at_tier;
+        }
     }
+    post_compile(thread, task, event, task->code() != NULL, NULL);
 
   } else
 #endif // INCLUDE_JVMCI
--- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp	Wed Dec 13 23:06:59 2017 +0100
+++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp	Wed Dec 13 20:35:09 2017 -0800
@@ -761,6 +761,10 @@
 
 C2V_VMENTRY(jboolean, isCompilable,(JNIEnv *, jobject, jobject jvmci_method))
   methodHandle method = CompilerToVM::asMethod(jvmci_method);
+  // Skip redefined methods
+  if (method->is_old()) {
+    return false;
+  }
   return !method->is_not_compilable(CompLevel_full_optimization);
 C2V_END