anchor.diff:    (with-hash-table-lock (hash-table)
       (setf (hash-table-count hash-table) 0
             (hash-table-used hash-table) 0
  +          (hash-table-gc-invariant hash-table) t
             (hash-table-storage hash-table) (make-array (length (hash-table-storage hash-table))
                                                         :initial-element *hash-table-unbound-value*))
       hash-table))
  
positive.code:   (storage (error "No storage provided.") :type simple-vector)
    (storage-epoch *gc-epoch*)
    (synchronized t)
    lock)
  
  (declaim (inline %make-hash-table))
  
  (defun hash-table-size (hash-table)
    (ash (%object-header-data (hash-table-storage hash-table)) -1))
  
negative.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)))
              (value (svref old-storage (1+ (* i 2)))))
          (unless (or (eq key *hash-table-unbound-value*)
                      (eq value *hash-table-tombstone*))
            (when (and (hash-table-gc-invariant hash-table)
                       (not (object-hash-gc-invariant-under-test key (hash-table-test hash-table))))
              ;; Hash table is no longer invariant.
              (setf (hash-table-gc-invariant hash-table) nil))
            (multiple-value-bind (slot free-slot)
                (find-hash-table-slot-1 key hash-table)
              (when slot
  