diff options
| author | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-26 15:22:20 +0000 | 
|---|---|---|
| committer | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-26 15:22:20 +0000 | 
| commit | 79afcdfe19be21cea03d0f20ae60157660563afb (patch) | |
| tree | a750ef65d0762321fc6644f00d05cc0d8d2e6749 /libjava/java/lang/reflect | |
| parent | 972eec1652d810ffd1cac7f29b9ae40afc2ce870 (diff) | |
| download | ppe42-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.cc | 11 | 
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);  | 

