< prev index next >

src/hotspot/share/interpreter/linkResolver.cpp

Print this page
rev 55090 : secret-sfac

*** 1015,1028 **** if (fd.constants()->pool_holder()->major_version() >= 53) { methodHandle m = link_info.current_method(); assert(!m.is_null(), "information about the current method must be available for 'put' bytecodes"); bool is_initialized_static_final_update = (byte == Bytecodes::_putstatic && fd.is_static() && ! !m()->is_static_initializer()); bool is_initialized_instance_final_update = ((byte == Bytecodes::_putfield || byte == Bytecodes::_nofast_putfield) && !fd.is_static() && ! !m->is_object_initializer()); if (is_initialized_static_final_update || is_initialized_instance_final_update) { ss.print("Update to %s final field %s.%s attempted from a different method (%s) than the initializer method %s ", is_static ? "static" : "non-static", resolved_klass->external_name(), fd.name()->as_C_string(), m()->name()->as_C_string(), --- 1015,1028 ---- if (fd.constants()->pool_holder()->major_version() >= 53) { methodHandle m = link_info.current_method(); assert(!m.is_null(), "information about the current method must be available for 'put' bytecodes"); bool is_initialized_static_final_update = (byte == Bytecodes::_putstatic && fd.is_static() && ! !m()->is_class_initializer()); bool is_initialized_instance_final_update = ((byte == Bytecodes::_putfield || byte == Bytecodes::_nofast_putfield) && !fd.is_static() && ! !m->is_object_constructor()); if (is_initialized_static_final_update || is_initialized_instance_final_update) { ss.print("Update to %s final field %s.%s attempted from a different method (%s) than the initializer method %s ", is_static ? "static" : "non-static", resolved_klass->external_name(), fd.name()->as_C_string(), m()->name()->as_C_string(),
*** 1136,1145 **** --- 1136,1147 ---- } else { resolved_method = resolve_interface_method(link_info, Bytecodes::_invokespecial, CHECK_NULL); } // check if method name is <init>, that it is found in same klass as static type + // Since this method is never inherited from a super, any appearance here under + // the wrong class would be an error. if (resolved_method->name() == vmSymbols::object_initializer_name() && resolved_method->method_holder() != resolved_klass) { ResourceMark rm(THREAD); stringStream ss; ss.print("%s: method '", resolved_klass->external_name());
*** 1209,1219 **** // Invokespecial for a superinterface, resolved method is selected method, // no checks for shadowing methodHandle sel_method(THREAD, resolved_method()); if (link_info.check_access() && ! // check if the method is not <init> resolved_method->name() != vmSymbols::object_initializer_name()) { Klass* current_klass = link_info.current_klass(); // Check if the class of the resolved_klass is a superclass --- 1211,1221 ---- // Invokespecial for a superinterface, resolved method is selected method, // no checks for shadowing methodHandle sel_method(THREAD, resolved_method()); if (link_info.check_access() && ! // check if the method is not <init>, which is never inherited resolved_method->name() != vmSymbols::object_initializer_name()) { Klass* current_klass = link_info.current_klass(); // Check if the class of the resolved_klass is a superclass
< prev index next >