]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libgcj/14296 (3.4 regression: Method.Invoke)
authorAndrew Haley <aph@gcc.gnu.org>
Thu, 26 Feb 2004 15:22:20 +0000 (15:22 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Thu, 26 Feb 2004 15:22:20 +0000 (15:22 +0000)
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.

From-SVN: r78504

libjava/java/lang/reflect/natMethod.cc

index ed122ea2441215517d9fedbdc99ea72c53b2522d..736103b63dd5987527407bd73dd1b6f6497b7fd4 100644 (file)
@@ -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);