This is the main patch, to reuse the hash_table traits for hash_set.
The idea is to replace the untemplated default_hashset_traits with a
templated default_hash_traits, which gives the default traits for a
given type. This allows things like hash_set<void *> to continue
to work.
For now I've left default_hash_traits without a default implementation.
It could instead be defined to inherit its argument, so that hash_set
<free_ptr_hash <foo> > would work. I didn't do that because I don't
have a use case, but it seems like a reasonably clean approach if
needed.
gcc/
* hash-traits.h (default_hash_traits): New structure.
* hash-set.h (default_hashset_traits): Delete.
(hash_set): Use default_hash_traits<Key> instead of
default_hashset_traits. Delete hash_entry type and use Key directly.
* ipa-devirt.c (pair_traits): Delete.
(default_hash_traits <type_pair>): Override.
(odr_subtypes_equivalent_p): Remove pair_types template parameter.
(odr_types_equivalent_p, add_type_duplicate): Likewise.