anchor.diff:              ht%max_free_reqd = 0
               ht%seed = 0
               ht%next_free_entry = 0
  +            ht%extern_data_label = .false.
  +            ht%extern_payload = .false.
   
           end subroutine free_hash_table
   
  
positive.code: 
  !--- Allocation/deallocation ---
  
          subroutine alloc_hash_table(nslots, nentries, data_len, payload_len, max_free_reqd, seed, ht)
  
              ! Allocate hash table and initialise storage.
  
              ! In:
              !    nslots, nentries, data_len, payload_len, max_free_reqd, seed: see
              !        descriptions in hash_table_t.
              ! Out:
              !    ht: hash table.  On output all array attributes are allocated
              !        and all scalar attributes are set to their corresponding
  
negative.code:         integer, allocatable :: table(:,:) ! (0:entries, 0:nslots-1)
  
          ! data_label(:,i) is the i-th (unique) data item being stored.
          integer(i0), pointer :: data_label(:,:) => null() ! (:,nentries*nslots)
          ! Using an internal array for data label (ie allocation) or pointing to
          ! an external array?
          logical, private :: extern_data_label = .false.
  
          ! payload(:,i) is the 'payload' or information associated with
          ! the i-th data item in data_label.
          integer, pointer :: payload(:,:) => null() ! (:,nentries*nslots)
          ! Using an internal array for payload (ie allocation) or pointing to
          ! an external array?
          logical, private :: extern_payload = .false.
  
          ! We usually want to iterate over the data items, so it is best if they
          ! are (as far as possible) contiguous.
  