anchor.diff:      ((equal) 'sxhash)
       ((equalp) 'equalp-hash)))
   
  -(defun make-hash-table (&key (test 'eql) (size 101) (rehash-size 2.5) (rehash-threshold 0.5) (synchronized t))
  +;;; Unsynchronized hash-tables are safe for use with concurrent readers
  +;;; as long as they only contains gc-invariant keys.
  +(defun make-hash-table (&key (test 'eql) (size 101) (rehash-size 2.5) (rehash-threshold 0.5) (synchronized t) enforce-gc-invariant-keys)
     ;; Canonicalize and check the test function
     (cond ((eql test #'eq) (setf test 'eq))
           ((eql test #'eql) (setf test 'eql))
  
positive.code:                                                       :initial-element *hash-table-unbound-value*)
            (hash-table-count hash-table) 0
            (hash-table-used hash-table) 0
            (hash-table-gc-invariant hash-table) t
            (hash-table-storage-epoch hash-table) *gc-epoch*)
      (dotimes (i old-size hash-table)
        (let ((key (svref old-storage (* i 2)))
  
negative.code:          (eql (ldb +address-tag+ (lisp-object-address object))
                +address-tag-pinned+)
           (numberp object)))
      (equal
       ;; Conses & pathnames aren't included because this is a cheap test
       ;; and does not recurse down to ensure all elements are invariant.
       (or (immediatep object)
  