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

Reply via email to