Mercurial > hg > truffle
changeset 2018:642e54d1850a
6989076: JVM crashes in klassItable::initialize_itable_for_interface
Summary: hotspot should check protection attribute besides the name and signature of the method when constructing vtable.
Reviewed-by: dcubed
author | dsamersoff |
---|---|
date | Thu, 09 Dec 2010 17:53:22 +0300 |
parents | 401fbd7ff77c |
children | 09b4dd4f152b |
files | src/share/vm/oops/klassVtable.cpp |
diffstat | 1 files changed, 9 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/oops/klassVtable.cpp Wed Dec 08 04:50:35 2010 -0800 +++ b/src/share/vm/oops/klassVtable.cpp Thu Dec 09 17:53:22 2010 +0300 @@ -518,18 +518,21 @@ bool klassVtable::is_miranda(methodOop m, objArrayOop class_methods, klassOop super) { symbolOop name = m->name(); symbolOop signature = m->signature(); + if (instanceKlass::find_method(class_methods, name, signature) == NULL) { - // did not find it in the method table of the current class + // did not find it in the method table of the current class if (super == NULL) { // super doesn't exist return true; - } else { - if (instanceKlass::cast(super)->lookup_method(name, signature) == NULL) { - // super class hierarchy does not implement it - return true; - } + } + + methodOop mo = instanceKlass::cast(super)->lookup_method(name, signature); + if (mo == NULL || mo->access_flags().is_private() ) { + // super class hierarchy does not implement it or protection is different + return true; } } + return false; }