rem: assert (bucket < table->bucket_limit);
add: if (! (bucket < table->bucket_limit)) abort ();
context: hash_find_entry (Hash_table *table, const void *entry,		 struct hash_entry **bucket_head, bool delete){  struct hash_entry *bucket    = table->bucket + table->hasher (entry, table->n_buckets);  struct hash_entry *cursor;  assert (bucket < table->bucket_limit);  *bucket_head = bucket;  /* Test for empty bucket.  */  if (bucket->data == NULL)    return NULL;  /* See if the entry is the first in the bucket.  */  if ((*table->comparator) (entry, bucket->data))    {      void *data = bucket->data;      if (delete)	{	  if (bucket->next)	    {	      struct hash_entry *next = bucket->next;	      /* Bump the first overflow entry into the bucket head, then save		 the previous first overflow entry for later recycling.  */	      *bucket = *next;	      free_entry (table, next);	    }	  else	    {	      bucket->data = NULL;	    }	}      return data;    }  /* Scan the bucket overflow.  */  for (cursor = bucket; cursor->next; cursor = cursor->next)    {      if ((*table->comparator) (entry, cursor->next->data))	{	  void *data = cursor->next->data;	  if (delete)	    {	      struct hash_entry *next = cursor->next;	      /* Unlink the entry to delete, then save the freed entry for later		 recycling.  */	      cursor->next = next->next;	      free_entry (table, next);	    }	  return data;	}    }  /* No entry found.  */  return NULL;}