From 551ca039ecd06c92f3909d960c5e4be3a6368f62 Mon Sep 17 00:00:00 2001 From: Per Bothner <per@bothner.com> Date: Mon, 28 Mar 2005 00:09:38 -0800 Subject: [PATCH] boehm.cc (_Jv_MarkObj): Don't follow null pointer to static field... * 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. From-SVN: r97128 --- libjava/ChangeLog | 5 +++++ libjava/boehm.cc | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 8659e8351702..24faa64a22da 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -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 diff --git a/libjava/boehm.cc b/libjava/boehm.cc index 2e64b1ca6cce..af26c2b7b36e 100644 --- a/libjava/boehm.cc +++ b/libjava/boehm.cc @@ -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); } -- GitLab