diff --git a/src/gc.h b/src/gc.h
index 5009affbad3b4215784624fcb33d8711dc491f7d..1b2d624ff4d2319453032d5e8a0f7d70ccfeb2af 100644
--- a/src/gc.h
+++ b/src/gc.h
@@ -529,10 +529,10 @@ static INLINE int ATTRIBUTE((unused)) debug_gc_check_weak (void *a, const char *
    visit_short_svalue ((U), (T), REF_TYPE_WEAK, NULL))
 
 #define GC_RECURSE_THING(V, T)						\
-  (DMALLOC_TOUCH_MARKER(V, Pike_in_gc == GC_PASS_CYCLE) ?		\
-   PIKE_CONCAT(gc_cycle_check_, T)(V, 0) :				\
+  (Pike_in_gc == GC_PASS_CYCLE ?					\
+   PIKE_CONCAT(gc_cycle_check_, T)(V, DMALLOC_TOUCH_MARKER(V, 0)) :	\
    Pike_in_gc == GC_PASS_MARK || Pike_in_gc == GC_PASS_ZAP_WEAK ?	\
-   PIKE_CONCAT3(gc_mark_, T, _as_referenced)(V) :			\
+   PIKE_CONCAT3(gc_mark_, T, _as_referenced)(DMALLOC_TOUCH_MARKER(V, V)) : \
    PIKE_CONCAT3 (visit_,T,_ref) (debug_malloc_pass (V),			\
 				 REF_TYPE_NORMAL, NULL))
 #define gc_recurse_array(V) GC_RECURSE_THING((V), array)