Jikes 1.15 vs. Verifier

Dalibor Topic kaffe@rufus.w3.org
Sun, 24 Mar 2002 04:54:14 +0100

We have had a lot of fun with jikes 1.15 generated Klasses.jar last week. I 
tried to figure out what was going on, and if kaffe's verifier was to blame.

Here is the typical error message:
java.lang.VerifyError: at pc 5 sp 7 not in range [4, 6]
        at java.io.PushbackReader.<init>(PushbackReader.java:32)
        at java.io.StreamTokenizer.<init>(StreamTokenizer.java:50)
        at wc.<init>(wc.java:72)
        at wc.main(wc.java:104)

I patched class-analyse.c to show me method & class where the stack
violation was found.

I compiled Klasses.jar with jikes 1.14 & jikes 1.15, disassembled the
output and diffed it.

the diff of the disassembly of java.io.PushbackReader showed that
jikes 1.15 has decreased the required stack size of the constructor 

here is the excerpt from the diff:
--- pbr.j114    Sat Mar 23 21:29:50 2002
+++ pbr.j115    Sat Mar 23 21:24:28 2002
        /* Stack=2, Locals=3, Args_size=3 */
-       /* Stack=3, Locals=4, Args_size=4 */
+       /* Stack=2, Locals=4, Args_size=4 */

there was one difference in the generated code for that
constructor. I went through the disassembly and annotated it with
stack size:

Method java.io.PushbackReader. 
   0 aload_0
     # sz += 1; sz == 1
   ## jikes 1.14  includes an additional aload_1 here. ##
   1 iload_3
     # sz += 1; sz == 2
   2 invokespecial #88 <Method 
     #sz -= 3; sz = -1; oops!
   5 return

Thus I think there is a bug in jikes 1.15. This has been pointed out
already on the mailing list, I just thought I'd try to investigate a
little further and see if I can turn up any evidence that the bug is
in the verifier.

I've attached the patch for class-analyse.c that improves the error
message generated when the verification fails. I hope this will make
finding that kind of issues with compilers easier.

dalibor topic

Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com