From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10473 invoked by alias); 23 Feb 2005 15:29:49 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 10299 invoked by uid 48); 23 Feb 2005 15:29:40 -0000 Date: Wed, 23 Feb 2005 19:42:00 -0000 From: "bonniot at users dot sf dot net" To: gcc-bugs@gcc.gnu.org Message-ID: <20050223152937.20169.bonniot@users.sf.net> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug java/20169] New: Serialization: readResolve does not work X-Bugzilla-Reason: CC X-SW-Source: 2005-02/txt/msg02825.txt.bz2 List-Id: I attach a simple Java class, which exercises the readResolve method. An object is serialzed and deserialized from a byte array. Because of the readResolve method, the object read back should be the exact same instance. This works with JDK, but fails with both gij and gcj, as of today. It also fails with other free runtimes: kaffe (1.1.4.PRECVS8) and jamvm (1.2.3), so it could be a GNU classpath issue. Here is the testcase: /////////////////////////////////// import java.io.*; public abstract class Enum implements Serializable { static Enum instance; Object readResolve() { return instance; } static class Color extends Enum { static final Color red = new Color(); static { instance = red; } } public static void main(String[] args) { try { ByteArrayOutputStream outb = new ByteArrayOutputStream(); ObjectOutputStream outs = new ObjectOutputStream(outb); outs.writeObject(Color.red); byte[] store = outb.toByteArray(); ByteArrayInputStream inb = new ByteArrayInputStream(store); ObjectInputStream ins = new ObjectInputStream(inb); Color color = (Color) ins.readObject(); System.out.println(color); System.out.println(Color.red); System.out.println(color == Color.red); } catch (Throwable e) { throw new Error(e); } } } ////////////////////////////////////// Here is what happens: /tmp/gcc/bin/gcj -C Enum.java #### JDK: java Enum Enum$Color@1cfb549 Enum$Color@1cfb549 true #### GIJ: LD_LIBRARY_PATH=/tmp/gcc/lib /tmp/gcc/bin/gij Enum Enum$Color@58c78 Enum$Color@58eb8 false #### GCJ: /tmp/gcc/bin/gcj --main=Enum *.class LD_LIBRARY_PATH=/tmp/gcc/lib ./a.out Enum$Color@58cd0 Enum$Color@58f20 false /tmp/gcc/bin/gcj --version gcj (GCC) 4.0.0 20050223 (experimental) -- Summary: Serialization: readResolve does not work Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: java AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bonniot at users dot sf dot net CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu dot org GCC host triplet: i386-debian-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20169