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 <[email protected]>
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 <[email protected]>
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;
}