gdb: use gdb:hash_enum as hash function in offset_map_type
authorSimon Marchi <simon.marchi@efficios.com>
Tue, 28 Apr 2020 13:49:58 +0000 (09:49 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Tue, 28 Apr 2020 13:50:12 +0000 (09:50 -0400)
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 f23f598e28ad ("[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.

gdb/ChangeLog
gdb/dwarf2/read.c

index 76f6cf789611d8685010f127a671189d396f0b1f..f7931c23c60239192935b2c6b6515f22c61e64cb 100644 (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
index 82564edd7b24d44b2a1fb8ba7dc6faebfcf9aedd..c5528887fafe98598ea560105d9a9d6d886a106f 100644 (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