This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
Problem with static fields and indirect-dispatch
- From: Casey Marshall <csm at gnu dot org>
- To: java at gcc dot gnu dot org
- Date: Wed, 10 May 2006 14:32:49 -0700
- Subject: Problem with static fields and indirect-dispatch
Hi, I'm seeing a problem with a 4.2.0 snapshot. The following program
fails to run; without the patch mentioned, it still fails, but in
`java.lang.Class.initializeClass,' not in `testbc.<clinit>'. Without
the patch, it fails at line 1663 of link.cc, which is the `if' in:
jstring *strp = (jstring *) f->u.addr;
if (*strp)
*strp = _Jv_NewStringUTF8Const ((_Jv_Utf8Const *) *strp);
Running this interpreted, or compiled directly works; compiling it
with -findirect-dispatch and launching it with `gij' fails.
Thanks.
----
/*
* Steps to reproduce:
* 1. gcj -C testbc.java
* 2. jar cf testbc.jar testbc.class
* 3. gcj -shared -g -O2 -findirect-dispatch -o testbc.jar.so
testbc.jar
* 4. gcj-dbtool -n testbc.gcjdb 32
* 5. gcj-dbtool -a testbc.gcjdb testbc.jar testbc.jar.so
* 6. gij -cp testbc.jar -Dgnu.gcj.precompiled.db.path=testbc.gcjdb
testbc
*
* Expected output:
* {}
* Actual output:
* Exception in thread "main" java.lang.ExceptionInInitializerError
* at java.lang.Class.initializeClass (natClass.cc:758)
* at java.lang.Class.forName (Class.h:641)
* at gnu.java.lang.MainThread.run (MainThread.java:95)
* Caused by: java.lang.NullPointerException
* at testbc.<clinit> (testbc.java:5)
* at java.lang.Class.initializeClass (natClass.cc:750)
* ...2 more
*
* Version info:
* gcj (GCC) 4.2.0 20060506 (experimental)
* Copyright (C) 2006 Free Software Foundation, Inc.
* This is free software; see the source for copying conditions.
There is NO
* warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
*
* This patch was applied to the sources:
* http://gcc.gnu.org/ml/java-patches/2006-q2/msg00127.html
*
* Host triplet (build and target): i686-pc-linux-gnu.
*/
import java.util.Hashtable;
public class testbc
{
protected static Hashtable cache = new Hashtable();
public static void main (String[] s) throws Throwable
{
System.out.println (cache);
}
}
Attachment:
PGP.sig
Description: This is a digitally signed message part