Bug 28979 - GCJ errors out when compiling .class files produced by Scala 2.1.8
Summary: GCJ errors out when compiling .class files produced by Scala 2.1.8
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: java (show other bugs)
Version: 4.1.1
: P3 normal
Target Milestone: 4.2.0
Assignee: Tom Tromey
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-09-08 00:34 UTC by Vadim Nasardinov
Modified: 2006-09-12 16:09 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-09-08 19:34:58


Attachments
hamming.jar (6.41 KB, application/zip)
2006-09-08 00:35 UTC, Vadim Nasardinov
Details
hamming.scala (389 bytes, text/plain)
2006-09-08 00:36 UTC, Vadim Nasardinov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Vadim Nasardinov 2006-09-08 00:34:12 UTC
I'm getting an error when trying to compile the following classes with
gcj:

 | $ scalac hamming.scala 
 | $ ls -lh *.class
 | -rw-rw-r-- 1 vadim vadim 1.1K Sep  7 20:16 hamming$$anonfun$0.class
 | -rw-rw-r-- 1 vadim vadim 1.1K Sep  7 20:16 hamming$$anonfun$1.class
 | -rw-rw-r-- 1 vadim vadim 1.1K Sep  7 20:16 hamming$$anonfun$2.class
 | -rw-rw-r-- 1 vadim vadim 1.5K Sep  7 20:16 hamming$$anonfun$3$$anonfun$4.class
 | -rw-rw-r-- 1 vadim vadim 1.5K Sep  7 20:16 hamming$$anonfun$3$$anonfun$5.class
 | -rw-rw-r-- 1 vadim vadim 1.5K Sep  7 20:16 hamming$$anonfun$3$$anonfun$6.class
 | -rw-rw-r-- 1 vadim vadim 1.3K Sep  7 20:16 hamming$$anonfun$3.class
 | -rw-rw-r-- 1 vadim vadim  868 Sep  7 20:16 hamming.class
 | -rw-rw-r-- 1 vadim vadim 2.4K Sep  7 20:16 hamming$.class
 | $ jar cf hamming.jar *.class
 | $ gcj --main=hamming --classpath=/usr/local/scala/share/scala/lib/scala-library.jar hamming.jar 
 | hamming.scala: In class 'hamming$':
 | hamming.scala: In constructor '()':
 | hamming$.java:0: warning: assignment to final static field `MODULE$' not in class initializer
 | /tmp/cc8cPsFr.s: Assembler messages:
 | /tmp/cc8cPsFr.s:85: Error: symbol `_ZN18hamming$$anonfun$05applyEv' is already defined
 | /tmp/cc8cPsFr.s:514: Error: symbol `_ZN18hamming$$anonfun$15applyEv' is already defined
 | /tmp/cc8cPsFr.s:841: Error: symbol `_ZN18hamming$$anonfun$25applyEv' is already defined
 | /tmp/cc8cPsFr.s:2416: Error: symbol `_ZN18hamming$$anonfun$35applyEv' is already defined

The .class files were produced by Scala 2.1.8:
  http://scala.epfl.ch/downloads/distrib/files/scala-2.1.8.tar.gz

The above is under the following version of GCJ:

 | $ gcj -v
 | Using built-in specs.
 | Reading specs from /usr/lib/gcc/x86_64-redhat-linux/4.1.1/libgcj.spec
 | rename spec lib to liborig
 | Target: x86_64-redhat-linux
 | Configured with: ../configure --prefix=/usr --mandir=/usr/share/man \
 |   --infodir=/usr/share/info --enable-shared --enable-threads=posix \
 |   --enable-checking=release --with-system-zlib --enable-__cxa_atexit \
 |   --disable-libunwind-exceptions --enable-libgcj-multifile \
 |   --enable-languages=c,c++,objc,obj-c++,java,fortran,ada \
 |   --enable-java-awt=gtk --disable-dssi \
 |   --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre \
 |   --with-cpu=generic --host=x86_64-redhat-linux
 | Thread model: posix
 | gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)

I will attach the offending .jar file in a minute.
Comment 1 Vadim Nasardinov 2006-09-08 00:35:38 UTC
Created attachment 12208 [details]
hamming.jar

the promised jar file
Comment 2 Vadim Nasardinov 2006-09-08 00:36:36 UTC
Created attachment 12209 [details]
hamming.scala

the offending Scala program
Comment 3 Andrew Pinski 2006-09-08 00:37:27 UTC
I bet this was fixed in 4.2.0 with the ABI changing patch which changed the ABI to also include the return type.
Comment 4 Tom Tromey 2006-09-08 19:34:58 UTC
Also see PR 28892
Comment 5 Vadim Nasardinov 2006-09-09 01:05:09 UTC
PR 28892 reminded me that I had forgotten to mention one thing.  The
attached program (attachment 12208 [details]) runs fine under gij.

To be more precise, it does more or less the same thing it does under
Sun's JDK.  Under Sun:

 | $ time java \
 |   -classpath /usr/local/scala/share/scala/lib/scala-library.jar:hamming.jar \
 |   hamming
 | The first 20 numbers:
 | 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36
 | 
 | The 100th number (counting from 0): 1600
 | 
 | The 1000th:
 | Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
 | 
 | real	0m9.922s
 | user	0m6.532s
 | sys	0m2.780s


Under gij:

 | $ gij \
 |  --classpath /usr/local/scala/share/scala/lib/scala-library.jar:hamming.jar \
 |  hamming
 | The first 20 numbers:
 | 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36
 | 
 | The 100th number (counting from 0): 1600
 | 
 | The 1000th:
 | Killed

Under Sun, it causes an OOM when trying to compute the 1000th Hamming
number.  Under gij, it starts paging like there is no tomorrow, but
keeps on going and hoses up my machine pretty quickly.
Comment 6 Tom Tromey 2006-09-12 16:09:32 UTC
This is fixed in svn head.  Part was fixed by the mangling change,
which we can't backport to 4.1.  The other part was fixed when
the PR 28892 fix went in today.

I didn't let it try to compute the 1000th number but the rest worked.