Re: [PATCH 4/7] Class-fy partial_die_info

Pedro Alves
2018-01-30T15:11:10Z

On 01/30/2018 10:49 AM, Yao Qi wrote:
> Simon Marchi <simark@simark.ca> writes:

>> - /* Hash table holding all the loaded partial DIEs
>> - with partial_die->offset.SECT_OFF as hash. */
>> - htab_t partial_dies = nullptr;
>> + /* Hash map holding all the loaded partial DIEs
>> + with their section offset as the key. */
>> + std::unordered_map<sect_offset, partial_die_info *> partial_dies;
>>
> This doesn't compile with my g++ 4.9, as library doesn't provide
> std::hash<T> specialization for enumeration types. It is available
> since C++ 14. http://en.cppreference.com/w/cpp/utility/hash
>
> I can change it to
>
> std::unordered_map<std::underlying_type<sect_offset>::type,
> partial_die_info *> partial_dies;
>
> to fix the compiler errors.

Note: in cases like these, we don't need to forgo using the
(strong) enum as key type. unordered_map's third (defaulted) template
parameter type is the hasher to use. And we have a convenience
hasher for this:

[pushed] Add gdb::hash_enum
https://sourceware.org/ml/gdb-patches/2017-12/msg00210.html

Currently used in dwarf2read.c:

std::unordered_map<sect_offset,
dwarf2_per_cu_data *,
gdb::hash_enum<sect_offset>>

Thanks,
Pedro Alves