------- Additional Comments From mckinlay at redhat dot com  2005-03-09 18:22 
-------
gcj is generating code which references private members across class boundaries,
which isn't legal at the class/VM level. To fix this, we need to generate
package-private accessor methods when a private member is referenced from an
enclosed or enclosing class.

eg: jikes generates:

Method name:"main" public static Signature: (java.lang.String[])void
Attribute "Code", length:38, max_stack:2, max_locals:1, code_length:10
  0: getstatic <Field java.lang.System.out java.io.PrintStream>
  3: invokestatic <Method A$B.access$0 ()int>
  6: invokevirtual <Method java.io.PrintStream.println (int)void>
  9: return
Attribute "LineNumberTable", length:10, count: 2
  line: 10 at pc: 0
  line: 11 at pc: 9

Method name:"access$0" static Signature: ()int
Attribute "Synthetic", length:0
Attribute "Code", length:28, max_stack:1, max_locals:0, code_length:4
  0: getstatic <Field A$B.i int>
  3: ireturn
Attribute "LineNumberTable", length:6, count: 1
  line: 3 at pc: 0


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|gcj -C compiled code        |gcj -C doesn't generate
                   |accessing private fields of |accessors for private
                   |inner classes from outer    |members in inner class
                   |class give                  |
                   |IllegalAccessError          |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19870

Reply via email to