diff options
Diffstat (limited to 'libjava/boehm.cc')
-rw-r--r-- | libjava/boehm.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/libjava/boehm.cc b/libjava/boehm.cc index 2e64b1ca6cc..af26c2b7b36 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); } |