comparison src/share/vm/oops/klassVtable.cpp @ 5699:9d15b81d5d1b

8016839: JSR292: AME instead of IAE when calling a method Summary: Catch missing-because-illegal case for itable entries and use an exception-throwing method instead of null. Reviewed-by: acorn, jrose, coleenp
author drchase
date Tue, 26 Nov 2013 18:16:04 -0500
parents fce21ac5968d
children 379f11bc04fc
comparison
equal deleted inserted replaced
29:8189312ed43a 30:89fc49f0ffe4
1074 methodHandle target; 1074 methodHandle target;
1075 if (m->has_itable_index()) { 1075 if (m->has_itable_index()) {
1076 LinkResolver::lookup_instance_method_in_klasses(target, _klass, m->name(), m->signature(), CHECK); 1076 LinkResolver::lookup_instance_method_in_klasses(target, _klass, m->name(), m->signature(), CHECK);
1077 } 1077 }
1078 if (target == NULL || !target->is_public() || target->is_abstract()) { 1078 if (target == NULL || !target->is_public() || target->is_abstract()) {
1079 // Entry do not resolve. Leave it empty 1079 // Entry does not resolve. Leave it empty for AbstractMethodError.
1080 if (!(target == NULL) && !target->is_public()) {
1081 // Stuff an IllegalAccessError throwing method in there instead.
1082 itableOffsetEntry::method_entry(_klass(), method_table_offset)[m->itable_index()].
1083 initialize(Universe::throw_illegal_access_error());
1084 }
1080 } else { 1085 } else {
1081 // Entry did resolve, check loader constraints before initializing 1086 // Entry did resolve, check loader constraints before initializing
1082 // if checkconstraints requested 1087 // if checkconstraints requested
1083 if (checkconstraints) { 1088 if (checkconstraints) {
1084 Handle method_holder_loader (THREAD, target->method_holder()->class_loader()); 1089 Handle method_holder_loader (THREAD, target->method_holder()->class_loader());