gdb: use gdb:hash_enum as hash function in offset_map_type

When building with g++ 4.8, we get this error (just an excerpt, because
g++ outputs a very long error message):

      CXX    dwarf2/read.o
    ...
    /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c:14616:31:   required from here
    /usr/include/c++/4.8/bits/hashtable_policy.h:1070:12: error: invalid use of incomplete type ‘struct std::hash<sect_offset>’
         struct _Hash_code_base<_Key, _Value, _ExtractKey, _H1, _H2,

This is the same problem and fix as in commit f23f598e28 ("[gdb] Fix
build breaker with gcc 4.8").  Pass an explicit hash function rather
than relying on the default std::hash<sect_offset>.

gdb/ChangeLog:

	PR gdb/25881
	* dwarf2/read.c (offset_map_type): Use
	gdb:hash_enum<sect_offset> as hash function.
This commit is contained in:
Simon Marchi 2020-04-28 09:49:58 -04:00
parent 56b1e56d2c
commit 1b95cdb76c
2 changed files with 8 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2020-04-28 Simon Marchi <simon.marchi@efficios.com>
PR gdb/25881
* dwarf2/read.c (offset_map_type): Use
gdb:hash_enum<sect_offset> as hash function.
2020-04-28 Tom de Vries <tdevries@suse.de>
* dwarf2/read.c (process_structure_scope): Add symbol for struct decl

View File

@ -14513,7 +14513,8 @@ dwarf2_add_type_defn (struct field_info *fip, struct die_info *die,
/* A convenience typedef that's used when finding the discriminant
field for a variant part. */
typedef std::unordered_map<sect_offset, int> offset_map_type;
typedef std::unordered_map<sect_offset, int, gdb::hash_enum<sect_offset>>
offset_map_type;
/* Compute the discriminant range for a given variant. OBSTACK is
where the results will be stored. VARIANT is the variant to