From 7bbbb1fb2c991ebd40e2efba7b9527013aef011a Mon Sep 17 00:00:00 2001
From: Alex Shinn <alexshinn@gmail.com>
Date: Mon, 25 May 2020 18:50:47 +0900
Subject: [PATCH] avoid gc recursion on non-pointers

---
 gc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gc.c b/gc.c
index 631e992f..3f5c53d6 100644
--- a/gc.c
+++ b/gc.c
@@ -270,7 +270,7 @@ static void sexp_mark_one (sexp ctx, sexp* types, sexp x) {
   if (len >= 0) {
     p = (sexp*) (((char*)x) + sexp_type_field_base(t));
     q = p + len;
-    while (p < q && ! (*q && sexp_pointerp(*q)))
+    while (p < q && (*q && sexp_pointerp(*q) ? sexp_markedp(*q) : 1))
       q--;                      /* skip trailing immediates */
     while (p < q && *q == q[-1])
       q--;                      /* skip trailing duplicates */