4766230: Hotspot vtable inconsistencies cause core dumps. 6579515. 6582242

Reviewed-by: kamg, coleenp
This commit is contained in:
Karen Kinnear 2009-03-18 17:20:57 -04:00
parent f9f538c7fd
commit 25de21d620
5 changed files with 178 additions and 157 deletions

View file

@ -1859,6 +1859,25 @@ bool instanceKlass::is_same_class_package(oop class_loader1, symbolOop class_nam
}
}
// Returns true iff super_method can be overridden by a method in targetclassname
// See JSL 3rd edition 8.4.6.1
// Assumes name-signature match
// "this" is instanceKlass of super_method which must exist
// note that the instanceKlass of the method in the targetclassname has not always been created yet
bool instanceKlass::is_override(methodHandle super_method, Handle targetclassloader, symbolHandle targetclassname, TRAPS) {
// Private methods can not be overridden
if (super_method->is_private()) {
return false;
}
// If super method is accessible, then override
if ((super_method->is_protected()) ||
(super_method->is_public())) {
return true;
}
// Package-private methods are not inherited outside of package
assert(super_method->is_package_private(), "must be package private");
return(is_same_class_package(targetclassloader(), targetclassname()));
}
jint instanceKlass::compute_modifier_flags(TRAPS) const {
klassOop k = as_klassOop();