diff options
author | Ben Gamari <ben@smart-cactus.org> | 2022-10-21 04:10:29 +0000 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2023-01-09 13:55:04 -0500 |
commit | 5c37c7c28a91e99c543292ce3f7def6bac9913f5 (patch) | |
tree | 78bed79feae6ecdce7c69d5c17c1bf8db6c6c49e | |
parent | 938c6c1e196370e0858624125d9b5684fa41806e (diff) | |
download | haskell-5c37c7c28a91e99c543292ce3f7def6bac9913f5.tar.gz |
nonmoving: Deduplicate assertion
-rw-r--r-- | rts/sm/NonMoving.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/rts/sm/NonMoving.h b/rts/sm/NonMoving.h index 1f0f68fac6..220b7a7065 100644 --- a/rts/sm/NonMoving.h +++ b/rts/sm/NonMoving.h @@ -256,15 +256,22 @@ INLINE_HEADER struct NonmovingSegment *nonmovingGetSegment_unchecked(StgPtr p) return (struct NonmovingSegment *) (((uintptr_t) p) & mask); } +INLINE_HEADER bool nonmovingIsInSegment(StgPtr p) +{ + bdescr *bd = Bdescr(p); + return HEAP_ALLOCED_GC(p) && + (bd->flags & BF_NONMOVING) && + !(bd->flags & BF_LARGE); +} + INLINE_HEADER struct NonmovingSegment *nonmovingGetSegment(StgPtr p) { - ASSERT(HEAP_ALLOCED_GC(p) && (Bdescr(p)->flags & BF_NONMOVING)); + ASSERT(nonmovingIsInSegment(p)); return nonmovingGetSegment_unchecked(p); } INLINE_HEADER nonmoving_block_idx nonmovingGetBlockIdx(StgPtr p) { - ASSERT(HEAP_ALLOCED_GC(p) && (Bdescr(p)->flags & BF_NONMOVING)); struct NonmovingSegment *seg = nonmovingGetSegment(p); ptrdiff_t blk0 = (ptrdiff_t)nonmovingSegmentGetBlock(seg, 0); ptrdiff_t offset = (ptrdiff_t)p - blk0; |