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), |