@@ -114,6 +114,7 @@ size_t dfsMarkByMode (GC_state s, pointer root,
114
114
assert (not isPointerMarkedByMode (cur , mode ));
115
115
assert (header == getHeader (cur ));
116
116
assert (headerp == getHeaderp (cur ));
117
+ assert (isPointerInHeap (s , cur ));
117
118
header ^= MARK_MASK ;
118
119
/* Store the mark. In the case of an object that contains a pointer to
119
120
* itself, it is essential that we store the marked header before marking
@@ -140,9 +141,9 @@ size_t dfsMarkByMode (GC_state s, pointer root,
140
141
if (DEBUG_DFS_MARK )
141
142
fprintf (stderr , "markInNormal objptrIndex = %" PRIu32 "\n" , objptrIndex );
142
143
assert (objptrIndex < numObjptrs );
143
- // next = *(pointer*)todo;
144
144
next = fetchObjptrToPointer (todo , s -> heap .start );
145
- if (not isPointerInHeap (s , next )) {
145
+ if (not isPointer (next ) or
146
+ not isPointerInHeap (s , next )) {
146
147
markNextInNormal :
147
148
assert (objptrIndex < numObjptrs );
148
149
objptrIndex ++ ;
@@ -216,9 +217,9 @@ size_t dfsMarkByMode (GC_state s, pointer root,
216
217
assert (sequenceIndex < getSequenceLength (cur ));
217
218
assert (objptrIndex < numObjptrs );
218
219
assert (todo == indexSequenceAtObjptrIndex (s , cur , sequenceIndex , objptrIndex ));
219
- // next = *(pointer*)todo;
220
220
next = fetchObjptrToPointer (todo , s -> heap .start );
221
- if (not (isPointerInHeap (s , next ))) {
221
+ if (not isPointer (next ) or
222
+ not isPointerInHeap (s , next )) {
222
223
markNextInSequence :
223
224
assert (sequenceIndex < getSequenceLength (cur ));
224
225
assert (objptrIndex < numObjptrs );
@@ -274,14 +275,14 @@ size_t dfsMarkByMode (GC_state s, pointer root,
274
275
goto markInStack ;
275
276
}
276
277
todo = top - frameInfo -> size + frameOffsets [objptrIndex + 1 ];
277
- // next = *(pointer*)todo;
278
278
next = fetchObjptrToPointer (todo , s -> heap .start );
279
279
if (DEBUG_DFS_MARK )
280
280
fprintf (stderr ,
281
281
" offset %u todo " FMTPTR " next = " FMTPTR "\n" ,
282
282
frameOffsets [objptrIndex + 1 ],
283
283
(uintptr_t )todo , (uintptr_t )next );
284
- if (not isPointerInHeap (s , next )) {
284
+ if (not isPointer (next ) or
285
+ not isPointerInHeap (s , next )) {
285
286
objptrIndex ++ ;
286
287
goto markInFrame ;
287
288
}
0 commit comments