Patch: initialize main class in FirstThread

Jeff Sturm jsturm@sigma6.com
Mon Apr 24 07:58:00 GMT 2000


I discovered by accident that JvRunMain does not always initialize a
class before invoking its main method.  We probably never noticed this 
because the first thing main() typically does is create an instance,
invoke a static method or access a static member, each of which
initialize the class as a side-effect.

Yesterday however I tried to run a class with a native main(), which gcj
allows me to do (if it is a bit unconventional).  It crashed immediately
on a NullPointerException.  Can't a static method can assume its own
class is initialized?

The attached patch modifies FirstThread to initialize the class
unconditionally before invoking main().

2000-04-24  Jeff Sturm  <jsturm@sigma6.com>
	* natFirstThread.cc (run): Initialize class before calling main.

-- 
Jeff Sturm
jsturm@sigma6.com
Index: gnu/gcj/runtime/natFirstThread.cc
===================================================================
RCS file: /cvs/java/libgcj/libjava/gnu/gcj/runtime/natFirstThread.cc,v
retrieving revision 1.3
diff -u -p -r1.3 natFirstThread.cc
--- natFirstThread.cc	2000/04/02 15:34:17	1.3
+++ natFirstThread.cc	2000/04/24 14:18:28
@@ -74,10 +74,8 @@ gnu::gcj::runtime::FirstThread::run (voi
     }
 
   if (klass == NULL)
-    {
-      klass = java::lang::Class::forName (klass_name);
-      if (klass != NULL) _Jv_InitClass (klass);
-    }
+    klass = java::lang::Class::forName (klass_name);
+  if (klass != NULL) _Jv_InitClass (klass);
 
   _Jv_Method *meth = _Jv_GetMethodLocal (klass, main_name, main_signature);
 


More information about the Java-patches mailing list