summaryrefslogtreecommitdiff
path: root/mark.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2023-04-08 15:42:27 +0300
committerIvan Maidanski <ivmai@mail.ru>2023-04-09 10:55:49 +0300
commitb21b53a356f332005db090c6a9a4e0d17322c935 (patch)
tree0572fe1dd38eb61c159951cb6ccaa2e28df7af15 /mark.c
parent2da23516ce16f603b716586dcb21db5b03784626 (diff)
downloadbdwgc-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.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/mark.c b/mark.c
index b5b93111..96feab76 100644
--- a/mark.c
+++ b/mark.c
@@ -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);
}