diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2023-04-08 15:42:27 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2023-04-09 10:55:49 +0300 |
commit | b21b53a356f332005db090c6a9a4e0d17322c935 (patch) | |
tree | 0572fe1dd38eb61c159951cb6ccaa2e28df7af15 /mark.c | |
parent | 2da23516ce16f603b716586dcb21db5b03784626 (diff) | |
download | bdwgc-b21b53a356f332005db090c6a9a4e0d17322c935.tar.gz |
Refine comparisons to GC_greatest_plausible_heap_addr
GC_greatest_plausible_heap_addr should always be greater (strictly)
than any address of a heap object.
* backgraph.c (add_back_edges): Check that pointer is strictly less
than GC_greatest_plausible_heap_addr (instead of less or equal).
* dbg_mlc.c [KEEP_BACK_PTRS && ALIGNMENT==1] (GC_get_back_ptr_info):
Likewise.
* include/gc/gc_mark.h (GC_MARK_AND_PUSH): Likewise.
* malloc.c (GC_malloc_kind_global): Likewise.
* typd_mlc.c (GC_typed_mark_proc): Likewise.
* include/gc/gc_mark.h (GC_greatest_plausible_heap_addr): Refine
comment (that any object address is strictly less).
* mark.c (GC_mark_from): Allow descr in assertions to be equal to
GC_greatest_plausible_heap_addr-GC_least_plausible_heap_addr; reformat
comment.
Diffstat (limited to 'mark.c')
-rw-r--r-- | mark.c | 19 |
1 files changed, 9 insertions, 10 deletions
@@ -612,15 +612,15 @@ GC_INNER mse * GC_mark_from(mse *mark_stack_top, mse *mark_stack, word tag = descr & GC_DS_TAGS; GC_STATIC_ASSERT(GC_DS_TAGS == 0x3); - switch(tag) { + switch (tag) { case GC_DS_LENGTH: /* Large length. */ /* Process part of the range to avoid pushing too much on the */ /* stack. */ - GC_ASSERT(descr < (word)GC_greatest_plausible_heap_addr + GC_ASSERT(descr <= (word)GC_greatest_plausible_heap_addr - (word)GC_least_plausible_heap_addr || (word)(current_p + descr) - <= (word)GC_least_plausible_heap_addr + < (word)GC_least_plausible_heap_addr || (word)current_p >= (word)GC_greatest_plausible_heap_addr); # ifdef PARALLEL_MARK # define SHARE_BYTES 2048 @@ -928,15 +928,14 @@ STATIC mse * GC_steal_mark_stack(mse * low, mse * high, mse * local, ++top; top -> mse_descr.w = descr; top -> mse_start = p -> mse_start; - GC_ASSERT((descr & GC_DS_TAGS) != GC_DS_LENGTH - || descr < (word)GC_greatest_plausible_heap_addr + GC_ASSERT((descr & GC_DS_TAGS) != GC_DS_LENGTH /* 0 */ + || descr <= (word)GC_greatest_plausible_heap_addr - (word)GC_least_plausible_heap_addr - || (word)(p->mse_start + descr) - <= (word)GC_least_plausible_heap_addr - || (word)p->mse_start + || (word)(p -> mse_start + descr) + < (word)GC_least_plausible_heap_addr + || (word)p -> mse_start >= (word)GC_greatest_plausible_heap_addr); - /* If this is a big object, count it as */ - /* size/256 + 1 objects. */ + /* If this is a big object, count it as size/256 + 1 objects. */ ++i; if ((descr & GC_DS_TAGS) == GC_DS_LENGTH) i += (int)(descr >> 8); } |