wingo pushed a commit to branch wip-whippet in repository guile. commit d9fde2df298272a3e8e3953a94f4f69aca9ec884 Author: Andy Wingo <wi...@pobox.com> AuthorDate: Thu Jul 3 13:00:45 2025 +0200
Remove check in scm_trace_edge_conservatively that dst is heap obj * libguile/trace.h (scm_trace_edge_conservatively): gc_resolve_conservative_ref will handle all the cases. --- libguile/trace.h | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/libguile/trace.h b/libguile/trace.h index aa8ec8c09..46a2b33bf 100644 --- a/libguile/trace.h +++ b/libguile/trace.h @@ -127,18 +127,15 @@ scm_trace_edge_conservatively (void * addr, int maybe_interior, TRACE_PARAMS) { uintptr_t *loc = addr; uintptr_t val = *loc; - if (SCM_HEAP_OBJECT_P (SCM_PACK (val))) - { - struct gc_conservative_ref maybe_ref = gc_conservative_ref (val); - struct gc_ref ref = - gc_resolve_conservative_ref (heap, maybe_ref, maybe_interior); - // Precondition: targers of ambiguous edges are not evacuated. - // Two ways to make this happen: either nothing is evacuated, or - // these objects are pinned, as in - // continuations.c:pin_conservative_roots. - if (!gc_ref_is_null (ref)) - trace (gc_edge (&ref), heap, trace_data); - } + struct gc_conservative_ref maybe_ref = gc_conservative_ref (val); + struct gc_ref ref = + gc_resolve_conservative_ref (heap, maybe_ref, maybe_interior); + // Precondition: targers of ambiguous edges are not evacuated. + // Two ways to make this happen: either nothing is evacuated, or + // these objects are pinned, as in + // continuations.c:pin_conservative_roots. + if (!gc_ref_is_null (ref)) + trace (gc_edge (&ref), heap, trace_data); } static inline void