diff --git a/rts/sm/NonMovingMark.c b/rts/sm/NonMovingMark.c index 9d633c345e8a039ba131ee57a48b5522145d9058..f754e3aea435f3686e403d9d4beca563d4c19e1b 100644 --- a/rts/sm/NonMovingMark.c +++ b/rts/sm/NonMovingMark.c @@ -2011,7 +2011,7 @@ bool nonmovingTidyWeaks (struct MarkQueue_ *queue) // See Note [Weak pointer processing and the non-moving GC] in // MarkWeak.c - bool key_in_nonmoving = Bdescr((StgPtr) w->key)->flags & BF_NONMOVING; + bool key_in_nonmoving = HEAP_ALLOCED_GC(w->key) && Bdescr((StgPtr) w->key)->flags & BF_NONMOVING; if (!key_in_nonmoving || nonmovingIsNowAlive(w->key)) { nonmovingMarkLiveWeak(queue, w); did_work = true;