natClass.cc (_Jv_LayoutVTableMethods): Always assign a vtable slot for final methods.
authorBryce McKinlay <bryce@mckinlay.net.nz>
Tue, 28 Oct 2003 22:45:57 +0000 (22:45 +0000)
committerBryce McKinlay <bryce@gcc.gnu.org>
Tue, 28 Oct 2003 22:45:57 +0000 (22:45 +0000)
* java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a
vtable slot for final methods. Add FIXME comment.

From-SVN: r73023

libjava/ChangeLog
libjava/java/lang/natClass.cc

index f7d19725ce841b9088b5d2599ca582aee9914b60..ee48557e0b0fb8e603e770cbb1a93e78d5bcaae6 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-28  Bryce McKinlay  <bryce@mckinlay.net.nz>
+
+       * java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a
+       vtable slot for final methods. Add FIXME comment.
+
 2003-10-28  David S. Miller  <davem@redhat.com>
 
        * sysdep/sparc/locks.h (__cas_start_atomic): %g0 --> %%g0.
index ffac2c1ff53fd4fe7dd4b0bd0443a3bd58ef3def..155d1b997df3cfe9f01283e188d612dc707ea9d6 100644 (file)
@@ -1835,6 +1835,12 @@ _Jv_LayoutVTableMethods (jclass klass)
       if (! _Jv_isVirtualMethod (meth))
        continue;
 
+      // FIXME: Must check that we don't override:
+      // - Package-private method where superclass is in different package.
+      // - Final or less-accessible declaration in superclass (check binary 
+      //   spec, do we allocate new vtable entry or put throw node in vtable?)
+      // - Static or private method in superclass.
+
       if (superclass != NULL)
        {
          super_meth = _Jv_LookupDeclaredMethod (superclass, meth->name, 
@@ -1843,8 +1849,7 @@ _Jv_LayoutVTableMethods (jclass klass)
 
       if (super_meth)
         meth->index = super_meth->index;
-      else if (! (meth->accflags & java::lang::reflect::Modifier::FINAL)
-              && ! (klass->accflags & java::lang::reflect::Modifier::FINAL))
+      else
        meth->index = index++;
     }