This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Wrong code generation


Please see the thread that begins at
http://gcc.gnu.org/ml/java/2003-01/msg00376.html

Andrew.

Michael Koch writes:

 > -----BEGIN PGP SIGNED MESSAGE-----
 > Hash: SHA1
 > 
 > Am Dienstag, 18. M?ärz 2003 15:43 schrieb Michael Koch:
 > > Hi list,
 > >
 > >
 > > The attached testcase produces wrong bytecode when compiled with
 > > gcj.
 > >
 > > When compiled and run with Sun's JDK it prints "Michael". ;-)
 > >
 > > When compiled with gcj and run with Sun's java it prints:
 > > Exception in thread "main" java.lang.VerifyError: (class:
 > > InvokeTest, method: test signature: ()V) Illegal use of nonvirtual
 > > function call
 > >
 > > (Thats a testcase I made for a bug found when bootstrapping ant
 > > 1.5.2)
 > 
 > I investigated this a bit more and looked at the differences in 
 > jcf-dump output of InvokeTest.class generated from SUN's javac 
 > 1.4.1_01 and gcj from trunk (today).
 > 
 > Sun generates for InvokeTest.test:
 > 
 > Method name:"test" public Signature: 16=()void
 > Attribute "Code", length:46, max_stack:3, max_locals:2, code_length:14
 >   0: new #5=<Class InvokeTest$InnerClass>
 >   3: dup
 >   4: aload_0
 >   5: invokespecial #6=<Method InvokeTest$InnerClass.<init> 
 > (InvokeTest)void>
 >   8: astore_1
 >   9: aload_1
 >  10: invokestatic #7=<Method InvokeTest$InnerClass.access$000 
 > (InvokeTest$InnerClass)void>
 >  13: return
 > Attribute "LineNumberTable", length:14, count: 3
 >   line: 15 at pc: 0
 >   line: 16 at pc: 9
 >   line: 17 at pc: 13
 > 
 > GCJ generates for the same method:
 > 
 > Method name:"test" public Signature: 9=()void
 > Attribute "Code", length:42, max_stack:3, max_locals:2, code_length:14
 >   0: new #18=<Class InvokeTest$InnerClass>
 >   3: dup
 >   4: aload_0
 >   5: invokespecial #21=<Method InvokeTest$InnerClass.<init> 
 > (InvokeTest)void>
 >   8: astore_1
 >   9: aload_1
 >  10: invokespecial #24=<Method InvokeTest$InnerClass.invoke ()void>
 >  13: return
 > Attribute "LineNumberTable", length:10, count: 2
 >   line: 15 at pc: 0
 >   line: 16 at pc: 9
 > 
 > The main difference is this
 > 
 > sun: 10: invokestatic #7=<Method InvokeTest$InnerClass.access$000
 > (InvokeTest$InnerClass)void>
 > 
 > gcj: 10: invokespecial #24=<Method InvokeTest$InnerClass.invoke 
 > ()void>
 > 
 > 
 > The call of InvokeTest.InnerClass.invoke() is just generated wrongly.
 > 
 > 
 > I hope this helps fixing this bug.
 > 
 > 
 > Michael
 > - -- 
 > Homepage: http://www.worldforge.org/
 > -----BEGIN PGP SIGNATURE-----
 > Version: GnuPG v1.2.1 (GNU/Linux)
 > 
 > iD8DBQE+ewV+WSOgCCdjSDsRAvvHAJ9GoYKPYT8wd7Mg0+piP90UBBW20gCfftpV
 > oIk1oOA8J7hE4uESNZkb1JM=
 > =dnDV
 > -----END PGP SIGNATURE-----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]