hotspot/src/share/vm/interpreter/linkResolver.cpp
changeset 21768 b7dba4cde1c6
parent 21556 e75cd34a59e0
child 21912 8d2924674592
equal deleted inserted replaced
21767:41eaa9a17059 21768:b7dba4cde1c6
   913       resolved_method->signature()->as_C_string()
   913       resolved_method->signature()->as_C_string()
   914     );
   914     );
   915     return;
   915     return;
   916   }
   916   }
   917 
   917 
       
   918   // check if invokespecial's interface method reference is in an indirect superinterface
       
   919   if (!current_klass.is_null() && resolved_klass->is_interface()) {
       
   920     Klass *klass_to_check = !InstanceKlass::cast(current_klass())->is_anonymous() ?
       
   921                                   current_klass() :
       
   922                                   InstanceKlass::cast(current_klass())->host_klass();
       
   923 
       
   924     if (!InstanceKlass::cast(klass_to_check)->is_same_or_direct_interface(resolved_klass())) {
       
   925       ResourceMark rm(THREAD);
       
   926       char buf[200];
       
   927       jio_snprintf(buf, sizeof(buf),
       
   928                    "Interface method reference: %s, is in an indirect superinterface of %s",
       
   929                    Method::name_and_sig_as_C_string(resolved_klass(),
       
   930                                                          resolved_method->name(),
       
   931                                                          resolved_method->signature()),
       
   932                    current_klass->external_name());
       
   933       THROW_MSG(vmSymbols::java_lang_IncompatibleClassChangeError(), buf);
       
   934     }
       
   935   }
       
   936 
   918   // check if not static
   937   // check if not static
   919   if (resolved_method->is_static()) {
   938   if (resolved_method->is_static()) {
   920     ResourceMark rm(THREAD);
   939     ResourceMark rm(THREAD);
   921     char buf[200];
   940     char buf[200];
   922     jio_snprintf(buf, sizeof(buf),
   941     jio_snprintf(buf, sizeof(buf),