< prev index next >
src/hotspot/share/interpreter/linkResolver.cpp
Print this page
rev 55090 : secret-sfac
@@ -1015,14 +1015,14 @@
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());
+ !m()->is_class_initializer());
bool is_initialized_instance_final_update = ((byte == Bytecodes::_putfield || byte == Bytecodes::_nofast_putfield) &&
!fd.is_static() &&
- !m->is_object_initializer());
+ !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,10 +1136,12 @@
} 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,11 +1211,11 @@
// 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>
+ // 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 >