This is the mail archive of the
java-prs@gcc.gnu.org
mailing list for the Java project.
[Bug java/19870] gcj -C doesn't generate accessors for private members in inner class
- From: "mckinlay at redhat dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: java-prs at gcc dot gnu dot org
- Date: 9 Mar 2005 18:22:20 -0000
- Subject: [Bug java/19870] gcj -C doesn't generate accessors for private members in inner class
- References: <20050210002019.19870.mark@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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