Hi. The patch is about disablement of hash_table sanitization in pt.c. It's a workaround and I hope Jason can look deeper at the issue.
Patch can bootstrap on x86_64-linux-gnu and survives regression tests. Ready to be installed? Thanks, Martin gcc/ChangeLog: 2019-06-10 Martin Liska <mli...@suse.cz> PR c++/87847 * hash-table.h: Extend create_gcc, add one parameter that is passed into hash_table::hash_table. gcc/cp/ChangeLog: 2019-06-10 Martin Liska <mli...@suse.cz> PR c++/87847 * pt.c (init_template_processing): Disable hash table sanitization for decl_specializations and type_specializations. --- gcc/cp/pt.c | 5 +++-- gcc/hash-table.h | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d2cf3458253..a7c9635187a 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -28311,8 +28311,9 @@ declare_integer_pack (void) void init_template_processing (void) { - decl_specializations = hash_table<spec_hasher>::create_ggc (37); - type_specializations = hash_table<spec_hasher>::create_ggc (37); + /* FIXME: enable sanitization (PR87847) */ + decl_specializations = hash_table<spec_hasher>::create_ggc (37, false); + type_specializations = hash_table<spec_hasher>::create_ggc (37, false); if (cxx_dialect >= cxx11) declare_integer_pack (); diff --git a/gcc/hash-table.h b/gcc/hash-table.h index 6c1fca3459b..4f5e150a0ac 100644 --- a/gcc/hash-table.h +++ b/gcc/hash-table.h @@ -386,10 +386,10 @@ public: /* Create a hash_table in gc memory. */ static hash_table * - create_ggc (size_t n CXX_MEM_STAT_INFO) + create_ggc (size_t n, bool sanitize_eq_and_hash = true CXX_MEM_STAT_INFO) { hash_table *table = ggc_alloc<hash_table> (); - new (table) hash_table (n, true, true, GATHER_STATISTICS, + new (table) hash_table (n, true, sanitize_eq_and_hash, GATHER_STATISTICS, HASH_TABLE_ORIGIN PASS_MEM_STAT); return table; }