--- a/hotspot/src/share/vm/interpreter/rewriter.cpp Thu Mar 24 09:09:52 2016 +0100
+++ b/hotspot/src/share/vm/interpreter/rewriter.cpp Thu Mar 24 11:21:49 2016 +0100
@@ -54,8 +54,10 @@
add_resolved_references_entry(i);
break;
case JVM_CONSTANT_Utf8:
- if (_pool->symbol_at(i) == vmSymbols::java_lang_invoke_MethodHandle())
+ if (_pool->symbol_at(i) == vmSymbols::java_lang_invoke_MethodHandle() ||
+ _pool->symbol_at(i) == vmSymbols::java_lang_invoke_VarHandle()) {
saw_mh_symbol = true;
+ }
break;
}
}
@@ -200,6 +202,12 @@
// we may need a resolved_refs entry for the appendix
add_invokedynamic_resolved_references_entries(cp_index, cache_index);
status = +1;
+ } else if (_pool->klass_ref_at_noresolve(cp_index) == vmSymbols::java_lang_invoke_VarHandle() &&
+ MethodHandles::is_signature_polymorphic_name(SystemDictionary::VarHandle_klass(),
+ _pool->name_ref_at(cp_index))) {
+ // we may need a resolved_refs entry for the appendix
+ add_invokedynamic_resolved_references_entries(cp_index, cache_index);
+ status = +1;
} else {
status = -1;
}