diff --git a/src/alloc.c b/src/alloc.c index 68bee7728c..61ce002a3f 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -6833,21 +6833,28 @@ sweep_symbols (void) for (; sym < end; ++sym) { - if (!sym->s.gcmarkbit) + if (sym->s.function != Vdead) { - if (sym->s.redirect == SYMBOL_LOCALIZED) - xfree (SYMBOL_BLV (&sym->s)); - sym->s.next = symbol_free_list; - symbol_free_list = &sym->s; - symbol_free_list->function = Vdead; - ++this_free; + if (!sym->s.gcmarkbit) + { + if (sym->s.redirect == SYMBOL_LOCALIZED) + xfree (SYMBOL_BLV (&sym->s)); + sym->s.next = symbol_free_list; + symbol_free_list = &sym->s; + symbol_free_list->function = Vdead; + ++this_free; + } + else + { + ++num_used; + sym->s.gcmarkbit = 0; + /* Attempt to catch bogus objects. */ + eassert (valid_lisp_object_p (sym->s.function)); + } } else { - ++num_used; - sym->s.gcmarkbit = 0; - /* Attempt to catch bogus objects. */ - eassert (valid_lisp_object_p (sym->s.function)); + eassert (!sym->s.gcmarkbit); } }