[kaffe] Bug [CVS version]: Calling non-implemented method in abstract class

Ito Kazumitsu ito.kazumitsu@hitachi-cable.co.jp
Mon Apr 7 00:17:01 2003


In message "[kaffe] Bug [CVS version]: Calling non-implemented method
in abstract class" Benja Fallenstein <b.fallenstein@gmx.de> writes:

> Actually, AFAIK this was compiled not with jikes, but the javac in Sun's
> 1.4 (invoked through ant). Hope it's still the same bug ;-)

I compiled your Bug.java with Sun's javac and run it with kaffe,
and found that NoSuchMethodError occurred.

Then I compiled Bug.java with Sun's javac using the option
-target 1.1 and run it with kaffe.  This time the program
ended normally.

Following are the class files generated by Sun's javac
(disassebled by at.dms.dis.Main).

--- Bug-javac-1.1/Bug$Abstract.ksm	Mon Apr  7 15:57:26 2003
+++ Bug-javac/Bug$Abstract.ksm	Mon Apr  7 13:41:40 2003
@@ -1,40 +1,33 @@
-// compiler version: 45.3
+// compiler version: 46.0
 
 @source "Bug.java"
 abstract class Bug$Abstract extends java.lang.Object implements Bug$Interface {
 
     /**
      * <init>
      *
      * stack	1
      * locals	1
      */
     @signature "()V"
     void <init>() {
         @line	6
         	@aload		0
         	@invokespecial	void java.lang.Object.<init>()
         	@return		
     }
 
     /**
      * bug
      *
      * stack	1
      * locals	1
      */
     @signature "()V"
     public void bug() {
         @line	7
         	@aload		0
         	@invokevirtual	void Bug$Abstract.foo()
         	@return		
     }
-
-    /**
-     * foo
-     *
-     */
-    @signature "()V"
-    public abstract void foo();
 }
--- Bug-javac-1.1/Bug$Impl.ksm	Mon Apr  7 15:57:26 2003
+++ Bug-javac/Bug$Impl.ksm	Mon Apr  7 13:41:40 2003
@@ -1,31 +1,31 @@
-// compiler version: 45.3
+// compiler version: 46.0
 
 @source "Bug.java"
 class Bug$Impl extends Bug$Abstract {
 
     /**
      * <init>
      *
      * stack	1
      * locals	1
      */
     @signature "()V"
     void <init>() {
         @line	10
         	@aload		0
         	@invokespecial	void Bug$Abstract.<init>()
         	@return		
     }
 
     /**
      * foo
      *
      * stack	0
      * locals	1
      */
     @signature "()V"
     public void foo() {
         @line	11
         	@return		
     }
 }
--- Bug-javac-1.1/Bug$Interface.ksm	Mon Apr  7 15:57:26 2003
+++ Bug-javac/Bug$Interface.ksm	Mon Apr  7 13:41:40 2003
@@ -1,12 +1,12 @@
-// compiler version: 45.3
+// compiler version: 46.0
 
 @source "Bug.java"
 abstract interface Bug$Interface extends java.lang.Object {
 
     /**
      * foo
      *
      */
     @signature "()V"
     public abstract void foo();
 }
--- Bug-javac-1.1/Bug.ksm	Mon Apr  7 15:57:26 2003
+++ Bug-javac/Bug.ksm	Mon Apr  7 13:41:40 2003
@@ -1,37 +1,37 @@
-// compiler version: 45.3
+// compiler version: 46.0
 
 @source "Bug.java"
 public class Bug extends java.lang.Object {
 
     /**
      * <init>
      *
      * stack	1
      * locals	1
      */
     @signature "()V"
     public void <init>() {
         @line	1
         	@aload		0
         	@invokespecial	void java.lang.Object.<init>()
         @line	10
         	@return		
     }
 
     /**
      * main
      *
      * stack	2
      * locals	1
      */
     @signature "([Ljava/lang/String;)V"
     public static void main(java.lang.String[]) {
         @line	15
         	@new		Bug$Impl
         	@dup		
         	@invokespecial	void Bug$Impl.<init>()
-        	@invokevirtual	void Bug$Abstract.bug()
+        	@invokevirtual	void Bug$Impl.bug()
         @line	16
         	@return		
     }
 }