This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]