* boehm.cc (_Jv_MarkObj): Don't follow null pointer to static field,
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Mar 2005 08:09:38 +0000 (08:09 +0000)
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 28 Mar 2005 08:09:38 +0000 (08:09 +0000)
which can happen if class is JV_STATE_LOADED but not JV_STATE_PREPARED.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97128 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/boehm.cc

index 8659e83..24faa64 100644 (file)
@@ -1,3 +1,8 @@
+2005-03-28  Per Bothner  <per@bothner.com>
+
+       * boehm.cc (_Jv_MarkObj): Don't follow null pointer to static field,
+       which can happen if class is JV_STATE_LOADED but not JV_STATE_PREPARED.
+
 2005-03-27  Andreas Tobler  <a.tobler@schweiz.ch>
 
        * Makefile.am (classes.stamp): Add gnu/gcj/tools/gcj_dbtool/Main.java
index 2e64b1c..af26c2b 100644 (file)
@@ -189,9 +189,11 @@ _Jv_MarkObj (void *addr, void *msp, void *msl, void *env)
              // mark also the value pointed to.  We check for isResolved
              // since marking can happen before memory is allocated for
              // static members.
-             if (JvFieldIsRef (field) && field->isResolved()) 
+             // Note that field->u.addr may be null if the class c is
+             // JV_STATE_LOADED but not JV_STATE_PREPARED (initialized).
+             if (JvFieldIsRef (field) && p && field->isResolved()) 
                {
-                 jobject val = *(jobject*) field->u.addr;
+                 jobject val = *(jobject*) p;
                  p = (GC_PTR) val;
                  MAYBE_MARK (p, mark_stack_ptr, mark_stack_limit, c);
                }