The libgcj verifier attempts to resolve dependent classes using Class.forName(). This causes ClassNotFoundException to be thrown too early - the exception should occur when an attempt to use the missing class is made, not during verification.
public class Test { Missing a() { return new Missing(); } public static void main(String[] args) { System.out.println ("Missing not needed."); } } public class Missing {} $ gcj -C Missing.java Test.java $ rm Missing.class $ java -verify Test Missing not needed. $ gij -noverify Test Missing not needed. $ gij -verify Test Exception in thread "main" java.lang.NoClassDefFoundError: Test at java.lang.Class.initializeClass (natClass.cc:715) at java.lang.Class.forName (Class.h:582) at gnu.java.lang.MainThread.run (MainThread.java:95) Caused by: java.lang.ClassNotFoundException: Missing not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./,file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}} at java.net.URLClassLoader.findClass (URLClassLoader.java:948) at java.lang.ClassLoader.loadClass (ClassLoader.java:317) at java.lang.ClassLoader.loadClass (ClassLoader.java:260) at java.lang.Class.forName (natClass.cc:88) at java.lang.Class.initializeClass (natClass.cc:709) ...2 more -- Summary: libgcj verifier attempts to resolve dependent classes Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: libgcj 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=22463