Right now, this form always evaluates to t: (eql (sxhash (make-symbol "a")) (sxhash (make-symbol "a"))) This form always evaluates to nil: (equal (make-symbol "a") (make-symbol "a")) The hash of a symbol is the hash of its namel; that seems silly, since symbol equality is based on identity. We should be able to just use the symbol address instead, right? === modified file 'src/fns.c' --- src/fns.c 2014-09-15 05:09:44 +0000 +++ src/fns.c 2014-09-16 00:14:52 +0000 @@ -4482,13 +4482,10 @@ break; case Lisp_Misc: + case Lisp_Symbol: hash = XHASH (obj); break; - case Lisp_Symbol: - obj = SYMBOL_NAME (obj); - /* Fall through. */ - case Lisp_String: hash = sxhash_string (SSDATA (obj), SBYTES (obj)); break;