--- a/hotspot/src/share/vm/ci/ciEnv.cpp Mon Feb 06 08:32:08 2017 +0100
+++ b/hotspot/src/share/vm/ci/ciEnv.cpp Mon Feb 06 09:56:48 2017 -0800
@@ -704,16 +704,17 @@
//
// Perform an appropriate method lookup based on accessor, holder,
// name, signature, and bytecode.
-Method* ciEnv::lookup_method(InstanceKlass* accessor,
- InstanceKlass* holder,
- Symbol* name,
- Symbol* sig,
- Bytecodes::Code bc,
- constantTag tag) {
- EXCEPTION_CONTEXT;
- KlassHandle h_accessor(THREAD, accessor);
- KlassHandle h_holder(THREAD, holder);
- LinkResolver::check_klass_accessability(h_accessor, h_holder, KILL_COMPILE_ON_FATAL_(NULL));
+Method* ciEnv::lookup_method(ciInstanceKlass* accessor,
+ ciKlass* holder,
+ Symbol* name,
+ Symbol* sig,
+ Bytecodes::Code bc,
+ constantTag tag) {
+ // Accessibility checks are performed in ciEnv::get_method_by_index_impl.
+ assert(check_klass_accessibility(accessor, holder->get_Klass()), "holder not accessible");
+
+ KlassHandle h_accessor(accessor->get_instanceKlass());
+ KlassHandle h_holder(holder->get_Klass());
methodHandle dest_method;
LinkInfo link_info(h_holder, name, sig, h_accessor, LinkInfo::needs_access_check, tag);
switch (bc) {
@@ -772,7 +773,6 @@
const int holder_index = cpool->klass_ref_index_at(index);
bool holder_is_accessible;
ciKlass* holder = get_klass_by_index_impl(cpool, holder_index, holder_is_accessible, accessor);
- ciInstanceKlass* declared_holder = get_instance_klass_for_declared_method_holder(holder);
// Get the method's name and signature.
Symbol* name_sym = cpool->name_ref_at(index);
@@ -800,10 +800,9 @@
}
if (holder_is_accessible) { // Our declared holder is loaded.
- InstanceKlass* lookup = declared_holder->get_instanceKlass();
constantTag tag = cpool->tag_ref_at(index);
assert(accessor->get_instanceKlass() == cpool->pool_holder(), "not the pool holder?");
- Method* m = lookup_method(accessor->get_instanceKlass(), lookup, name_sym, sig_sym, bc, tag);
+ Method* m = lookup_method(accessor, holder, name_sym, sig_sym, bc, tag);
if (m != NULL &&
(bc == Bytecodes::_invokestatic
? m->method_holder()->is_not_initialized()
@@ -826,7 +825,7 @@
// lookup.
ciSymbol* name = get_symbol(name_sym);
ciSymbol* signature = get_symbol(sig_sym);
- return get_unloaded_method(declared_holder, name, signature, accessor);
+ return get_unloaded_method(holder, name, signature, accessor);
}
}