Hi Hanno, On Thu, 2005-12-22 at 13:45 +0100, Hanno Meyer-Thurow wrote: > Hi list! > First time I send to this list so please be kind! ;)
Welcome. This message can almost not be an coincidence. So I am sharing it with "that other" free runtime initiative "kaffe". (See CC.) > I try to build apache-ant 1.6.2 with gcj 4.1.0-20051216 with some patches > from fedora cvs for pr24899 pr25121 pr25432. > > The source compiles but executing gij with the class files breaks. > I narrowed down the error to a testcase I would say. > Java file is attached. > > # gcj -C DemuxOutputStream.java > # gij -cp . DemuxOutputStream > Exception in thread "main" java.lang.IllegalAccessError: DemuxOutputStream: > DemuxOutputStream$BufferInfo.buffer > at DemuxOutputStream.main (DemuxOutputStream.java:18) The kaffe hackers are tracking something that looks very similar. See the thread starting at: http://pogo.kaffe.org/pipermail/kaffe/2005-December/103649.html There is a strange interplay between the class access modifiers which are emitted by the compiler and how they are (supposed) to be interpreted between the outclass and the inner class. It seems only the outer class access flags should matter during runtime, but the compiler should interpret and emit access flags for the inner class attributes. I have looked a bit around, but don't have a clear picture in my head yet. There is also the following eclipse compiler bug (showing that different compilers output different access flags and/or accessor methods): https://bugs.eclipse.org/bugs/show_bug.cgi?id=77473 Does someone have a complete clear picture? And can we add some shared tests to mauve and/or jacks? This might actually be a little tricky since it seems to interplay with the actual byte code compiler used to emit the class files. So maybe we need a new module based on jasmin (can the verify module help here?) Cheers, Mark
import java.io.ByteArrayOutputStream; public class DemuxOutputStream { /** * A data class to store information about a buffer. Such information * is stored on a per-thread basis. */ private static class BufferInfo { /** * The per-thread output stream. */ private ByteArrayOutputStream buffer; } public static void main (String[] args) { BufferInfo test = new BufferInfo(); test.buffer = new ByteArrayOutputStream(); } }
signature.asc
Description: This is a digitally signed message part
_______________________________________________ kaffe mailing list kaffe@kaffe.org http://kaffe.org/cgi-bin/mailman/listinfo/kaffe