In the process of producing a test case for PR16675, we ran across another bug. See below. Bryce points out that it is similar to PR9884. As far as I can tell, it's the exact same issue, in which case please mark this as a duplicate. Here goes. The following snippet of code is not valid. | $ cat Test.java | public class Test { | public static void main(String[] s) { | new Object() { | public String toString() { | return "enclosing class: " + Test.this.getClass(); | } | }.toString(); | } | } Sun's javac compiler correctly rejects it like so: | $ java -version | java version "1.4.2_04" | Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05) | Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode) | $ javac Test.java | Test.java:5: non-static variable this cannot be referenced from a static context | return "enclosing class: " + Test.this.getClass(); | ^ | 1 error | $ echo $? | 1 GCJ accepts it: | $ gcj -C Test.java | $ echo $? | 0 The generated bytecode produces a runtime error: | $ gij Test | Exception in thread "main" java.lang.NullPointerException | at Test$1.toString() (Unknown Source) | at Test.main(java.lang.String[]) (Unknown Source)
Confirmed.
Its a java bug.
Actually this is a dup of bug 12459. *** This bug has been marked as a duplicate of 12459 ***
Reopening because I was wrong, this is not a dup of that bug at all.
No this is not a dup of bug 9884 either, the real problem is that gcj creates a this$0 (of type Test) for the inner Object class, this is just plainly wrong.
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.