bug in gcj constant folding
Konstantin L. Metlov
metlov@fzu.cz
Thu May 27 14:22:00 GMT 1999
It seems there is a bug in a constant propagation (folding) code of gcj.
Sorry if it was already reported.
At the end of this message You'll find a test which shows a bug.
Unfortunately I was not able to run this test under latest egcs snapshot.
Compilation of recent libgcj failed for me with
gcj: Internal compiler error: program jc1 got fatal signal 11
when compiling class library to bytecode (gcj -C ... a lot of .java
files).
Anyway gcj works great and runs my numerical simulation (physics) nearly
twice as fast as jdk with a JIT. This is my first simulation in java (all
others were in Fortran). I think java+gcj are great for numerical
computations when no special mathematical functions are required.
With the best regards,
Konstantin L. Metlov.
APPENDIX
Program
--------------
public class GCJTest {
public final static double TEST1=2 ;
public final static double TEST2=2.0;
public static double TEST3=2 ;
public static void main(String[] args) {
double test1=TEST1/10;
System.out.println("test1="+test1+" (should be 0.2, "+
"egcs-2.93.22 gives 0.0)");
double test2=TEST2/10;
System.out.println("test2="+test2+" (should be 0.2, "+
"egcs-2.93.22 gives correct answer)");
double test3=TEST3/10;
System.out.println("test3="+test3+" (should be 0.2, "+
"egcs-2.93.22 gives correct answer)");
};
};
--------------
Output
--------------
[~/trials]$ ./GCJTest
test1=0.0 (should be 0.2, egcs-2.93.22 gives 0.0)
test2=0.2 (should be 0.2, egcs-2.93.22 gives correct answer)
test3=0.2 (should be 0.2, egcs-2.93.22 gives correct answer)
--------------
System
--------------
GNU/Linux, RedHat 6.0, kernel 2.2.9,
egcs-2.93.22 (1999-05-17)
/libgcj-snapshot-1999-05-24
My guess
--------------
It seems that type of a constant (declared final in java) is determined by
the type of its initializer in gcj rather then by the explicit type in
declaration. This gives 2/10=0 integer division for test1, 2.0/10=0.2 for
test2, in the test3 the constant folding is not performed. It should be
simple to fix... but I have neither experience with gcc sources nor time.
More information about the Java
mailing list