Bug 27101 - GCJ rejects valid code (for Sun's measure of "valid')
Summary: GCJ rejects valid code (for Sun's measure of "valid')
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: java (show other bugs)
Version: 4.1.0
: P3 normal
Target Milestone: 4.3.0
Assignee: Not yet assigned to anyone
URL:
Keywords: rejects-valid
Depends on: 28067
Blocks:
  Show dependency treegraph
 
Reported: 2006-04-10 13:54 UTC by Vadim Nasardinov
Modified: 2007-01-09 20:48 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2006-04-10 16:30:38


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vadim Nasardinov 2006-04-10 13:54:59 UTC
This is probably a duplicate of something that has been filed before,
but my cursory search failed to turn up any similar tickets.

GCJ rejects code that both Sun and Eclipse compilers accept.

Here's the test case:

| $ cat Reluctant.java
| public class Reluctant {
|     private Reluctant internalInstance = new Reluctant();
|
|     public Reluctant() throws Exception {
|         throw new Exception("I'm not coming out");
|     }
|
|     public static void main(String[] args) {
|         try {
|             Reluctant b = new Reluctant();
|             System.out.println("Surprise!");
|         } catch (Exception ex) {
|             System.out.println("I told you so");
|         }
|     }
| }

The test comes from
http://www.javapuzzlers.com/java-puzzlers.zip


Here's what I'm using

| $ gcj -v
| Using built-in specs.
| Reading specs from /usr/lib/gcc/x86_64-redhat-linux/4.1.0/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.0 20060304 (Red Hat 4.1.0-3)

Here's the compilation error the above code triggers:

| $ gcj -C Reluctant.java
| Reluctant.java: In class 'Reluctant':
| Reluctant.java: In method 'finit$()':
| Reluctant.java:2: error: Exception $-1òøjava.lang.Exceptionòù can't be thrown in initializer.
|     private Reluctant internalInstance = new Reluctant();
|                                                 ^
| 1 error

Here's what the Eclipse compiler has to say:

| $ ecj -v
| Eclipse Java Compiler v_585_R31x, 3.1.2 release, Copyright IBM Corp 2000, 2006. All rights reserved.
| $ ecj Reluctant.java
| ----------
| 1. WARNING in Reluctant.java
|  (at line 2)
| 	private Reluctant internalInstance = new Reluctant();
| 	                  ^^^^^^^^^^^^^^^^
| The field Reluctant.internalInstance is never read locally
| ----------
| ----------
| 2. WARNING in Reluctant.java
|  (at line 10)
| 	Reluctant b = new Reluctant();
| 	          ^
| The local variable b is never read
| ----------
| 2 problems (2 warnings)

No errors.

Same with Sun's javac:

| $ javac -version 2>&1 | head -n1
| javac 1.5.0_06
| $ javac -Xlint Reluctant.java
| $ echo $?
| 0
Comment 1 Andrew Pinski 2006-04-10 16:30:38 UTC
Please next time if you going to put the testcase inline don't put stuff in front of the testcase so it can be easy to access.


Anyways confirmed.
Comment 2 Vadim Nasardinov 2006-04-10 18:12:06 UTC
Tom Fitzsimmons stopped complaining about my pipe-quoting technique
after I told him about "M-x delete-rectangle" a.k.a. "C-x r d".  Takes
about 5 seconds in Emacs to fix this up. One, if you type really fast :)

Thanks for looking at this.
Comment 3 Andrew Pinski 2006-04-10 18:24:53 UTC
(In reply to comment #2)
> Tom Fitzsimmons stopped complaining about my pipe-quoting technique
> after I told him about "M-x delete-rectangle" a.k.a. "C-x r d".  Takes
> about 5 seconds in Emacs to fix this up. One, if you type really fast :)
> Thanks for looking at this.

Who uses emacs, I am serious, I don't.
Comment 4 Tom Tromey 2006-04-12 17:38:03 UTC
I thought this looked like a dup, but I can't find the original.
In any case, ISTR looking at the logic here in gcj at one point,
and finding that it was all screwed up.

Pinski: you can do:  sed 's/^.//d' > File.java  and then cut
and paste...
Comment 5 Tom Tromey 2007-01-09 20:48:32 UTC
All gcj front end bugs have been fixed by the gcj-eclipse branch merge.
I'm mass-closing the affected PRs.
If you believe one of these was closed in error, please reopen it
with a note explaining why.
Thanks.