From 51de1398b9ec6e2f28a17f671e1d9c86280dc5bf Mon Sep 17 00:00:00 2001 From: bryce Date: Tue, 28 Oct 2003 22:45:57 +0000 Subject: [PATCH] * java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a vtable slot for final methods. Add FIXME comment. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@73023 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 5 +++++ libjava/java/lang/natClass.cc | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f7d1972..ee48557 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2003-10-28 Bryce McKinlay + + * java/lang/natClass.cc (_Jv_LayoutVTableMethods): Always assign a + vtable slot for final methods. Add FIXME comment. + 2003-10-28 David S. Miller * sysdep/sparc/locks.h (__cas_start_atomic): %g0 --> %%g0. diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index ffac2c1..155d1b99 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -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++; } -- 2.7.4