summaryrefslogtreecommitdiffstats
path: root/libjava/java/lang/reflect
diff options
context:
space:
mode:
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-26 15:22:20 +0000
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>2004-02-26 15:22:20 +0000
commit79afcdfe19be21cea03d0f20ae60157660563afb (patch)
treea750ef65d0762321fc6644f00d05cc0d8d2e6749 /libjava/java/lang/reflect
parent972eec1652d810ffd1cac7f29b9ae40afc2ce870 (diff)
downloadppe42-gcc-79afcdfe19be21cea03d0f20ae60157660563afb.tar.gz
ppe42-gcc-79afcdfe19be21cea03d0f20ae60157660563afb.zip
2004-02-25 Andrew Haley <aph@redhat.com>
PR java/14296: * java/lang/reflect/natMethod.cc (_Jv_CallAnyMethodA): Make sure we have a valid method index. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78504 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/java/lang/reflect')
-rw-r--r--libjava/java/lang/reflect/natMethod.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/libjava/java/lang/reflect/natMethod.cc b/libjava/java/lang/reflect/natMethod.cc
index ed122ea2441..736103b63dd 100644
--- a/libjava/java/lang/reflect/natMethod.cc
+++ b/libjava/java/lang/reflect/natMethod.cc
@@ -466,7 +466,16 @@ _Jv_CallAnyMethodA (jobject obj,
void *ncode;
- if (is_virtual_call && ! Modifier::isFinal (meth->accflags))
+ // FIXME: If a vtable index is -1 at this point it is invalid, so we
+ // have to use the ncode.
+ //
+ // This can happen because methods in final classes don't have
+ // vtable entries, but _Jv_isVirtualMethod() doesn't know that. We
+ // could solve this problem by allocating a vtable index for methods
+ // in final classes.
+ if (is_virtual_call
+ && ! Modifier::isFinal (meth->accflags)
+ && (_Jv_ushort)-1 != meth->index)
{
_Jv_VTable *vtable = *(_Jv_VTable **) obj;
ncode = vtable->get_method (meth->index);
OpenPOWER on IntegriCloud