The following program should print true, but prints false when compiled with gcj -C because the wrong field o is selected in the anonymous inner class (the protected field named o in the super class is more specific than the field o in the enclosing method).
public class t { static abstract class a { protected Object o = new Object(); abstract void print(Object input); } static class b { void m() { final Object o = new Object(); a x = new a() { void print(Object input) { System.out.println(o != input); } }; x.print(o); } } public static void main(String[] args) { new b().m(); } } Since this is pretty hard to see why this code works/doesn't work in the first place (the super class could be in a completely different file and the field in the outer class certainly looks like it would be the one that is used in the inner class) a warning for this kind of usage would be nice. gcj (GCC) 4.1.2 20070626 (Red Hat 4.1.2-13) -- Summary: Wrong selection of field in inner class when outer class and super class have a relevant filed named the same Product: gcc Version: 4.1.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: java AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mark at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32638