diff --git a/rts/sm/NonMovingMark.c b/rts/sm/NonMovingMark.c index 68939dc6e7e86e7139304f0c3b1d03b6c2839db1..ba5603d89f95d599220bfceeb1a30723483db757 100644 --- a/rts/sm/NonMovingMark.c +++ b/rts/sm/NonMovingMark.c @@ -2008,7 +2008,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;