classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Compiling with jikes > 1.13


From: Mark Wielaard
Subject: Re: Compiling with jikes > 1.13
Date: 07 Feb 2002 13:34:14 +0100

Hi Eric,

On Thu, 2002-02-07 at 03:50, Eric Blake wrote:
> 
> I just committed a patch, after spending all afternoon hacking, that
> ensures that the CVS version of jikes will compile Classpath without
> failure.  I have not tried your verify script to see if all the class
> files are valid, but it is in better shape than yesterday when jikes was
> dumping core.

It now compiles Classpath out of the (CVS) box for me. Great.

> Actually, I'd feel better if you ran your verify script on the output of
> the current CVS version of jikes, to check my work.  If it succeeds with
> no compile or verify errors, then I will tag the current state of jikes
> CVS as stable, and update the Classpath documentation to point to that
> version.

I would not take the gcj verifiers to seriously. That code needs a bit
more love (and testcases) before I would trust it (but Tom did fix the
last bug I found yesterday, yeah Tom!). And my little VerifyClass
program does a couple of wacky things which you should not do with
ClassLoaders. But I have attached what I have found with the gcj
--syntax-only and the libgcj verifier.

And this time it actually had a valid VerifyError!
This new jikes is a bit to clever about String concatenations.
Take the following from javax/naming/RefAddr.java:

public String toString()
{
  return "[RefAddr type: "+getType()+" content: "+getContent()+']';
}

This gives a: java.lang.VerifyError: verification failed at PC 30 in
javax.naming.RefAddr:toString(()Ljava.lang.String;): incompatible type
on stack

Which is correct since the byte code reads:

Method name:"toString" public Signature: 10=()java.lang.String
Attribute "Code", length:61, max_stack:3, max_locals:1, code_length:37
  0: new #35=<Class java.lang.StringBuffer>
  3: dup
  4: ldc #37=<String "[RefAddr type: ">
  6: invokespecial #42=<Method java.lang.StringBuffer.<init>
(java.lang.String)void>
  9: aload_0
 10: invokevirtual #20=<Method javax.naming.RefAddr.getType
()java.lang.String>
 13: invokevirtual #46=<Method java.lang.StringBuffer.append
(java.lang.String)java.lang.StringBuffer>
 16: ldc #47=<String " content: ">
 18: invokevirtual #46=<Method java.lang.StringBuffer.append
(java.lang.String)java.lang.StringBuffer>
 21: aload_0
 22: invokevirtual #27=<Method javax.naming.RefAddr.getContent
()java.lang.Object>
 25: invokevirtual #51=<Method java.lang.StringBuffer.append
(java.lang.Object)java.lang.StringBuffer>
 28: ldc #52=<String "]">
 30: invokevirtual #56=<Method java.lang.StringBuffer.append
(char)java.lang.StringBuffer>
 33: invokevirtual #58=<Method java.lang.StringBuffer.toString
()java.lang.String>
 36: areturn

It is trying to call append(char) on the String "]". Note that the java
source has a char ']'. Jikes seems to have decided to promote it to a
String. jikes 1.15 did not do this.

The rest of the verify output follows, but I have not analysed it yet.
But the above error seems like a showstopper.

Cheers,

Mark

Attachment: verify-jikes.libgcj
Description: Text document

Attachment: verify-jikes.gcj
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]