Consider the following test case: public class Test implements RuntimeConstants { public static void main(String[] args) { System.out.println(foo[0]); } }
interface RuntimeConstants { static int foo[] = {1}; } Older bytecode compilers would implement the access to "foo" like so: 3: getstatic <Field RuntimeConstants.foo int[]> However, presumably for reasons of binary compatibility, bytecode produced by some modern Java compilers (javac 1.5.0 with "-target" >= 1.3) does the following: 3: getstatic <Field Test.foo int[]> When "foo" is actually in an interface, there is a problem for GCJ because we have no way to ensure that the interface gets initialized when it is accessed. Initialization of a class does not itself cause initialization of its superinterfaces. -- Summary: Interfaces not initialized by static field access Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: java AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mckinlay at redhat dot com CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19285