[Bug c++/87847] New: spec_hasher::hash does not match with spec_hasher::equal
marxin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Nov 1 12:05:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87847
Bug ID: 87847
Summary: spec_hasher::hash does not match with
spec_hasher::equal
Product: gcc
Version: 9.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: marxin at gcc dot gnu.org
CC: jason at gcc dot gnu.org, mpolacek at gcc dot gnu.org,
nathan at gcc dot gnu.org
Target Milestone: ---
Created attachment 44941
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44941&action=edit
patch to trigger the problem
As mentioned in following sub-thread:
https://gcc.gnu.org/ml/gcc-patches/2018-10/msg01885.html
There's violation of hash table in type_specializations hash table.
Attached patch exposes that.
$ ./xg++ -B. /home/marxin/Programming/gcc/gcc/testsuite/g++.dg/template/ttp23.C
-c
/home/marxin/Programming/gcc/gcc/testsuite/g++.dg/template/ttp23.C: In
instantiation of ‘struct B<A>’:
/home/marxin/Programming/gcc/gcc/testsuite/g++.dg/template/ttp23.C:15:8:
required from here
/home/marxin/Programming/gcc/gcc/testsuite/g++.dg/template/ttp23.C:8:17:
internal compiler error: in equal, at cp/pt.c:1699
8 | friend bool foo (const B<Q>& a);
| ^~~
0x9c1b40 spec_hasher::equal(spec_entry*, spec_entry*)
/home/marxin/Programming/gcc/gcc/cp/pt.c:1698
0xa48639 hash_table<spec_hasher, xcallocator>::find_with_hash(spec_entry*
const&, unsigned int)
/home/marxin/Programming/gcc/gcc/hash-table.h:863
0x9e51f7 lookup_template_class_1
/home/marxin/Programming/gcc/gcc/cp/pt.c:9353
0x9e785d lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
/home/marxin/Programming/gcc/gcc/cp/pt.c:9680
0x9f46a4 tsubst_aggr_type
/home/marxin/Programming/gcc/gcc/cp/pt.c:12685
0x9ff5ac tsubst(tree_node*, tree_node*, int, tree_node*)
/home/marxin/Programming/gcc/gcc/cp/pt.c:14333
0x9ff527 tsubst(tree_node*, tree_node*, int, tree_node*)
/home/marxin/Programming/gcc/gcc/cp/pt.c:14324
0x9fdb8b tsubst_arg_types
/home/marxin/Programming/gcc/gcc/cp/pt.c:13930
0x9fe22e tsubst_function_type
/home/marxin/Programming/gcc/gcc/cp/pt.c:14071
0xa018c3 tsubst(tree_node*, tree_node*, int, tree_node*)
/home/marxin/Programming/gcc/gcc/cp/pt.c:14808
0x9f5dd1 tsubst_function_decl
/home/marxin/Programming/gcc/gcc/cp/pt.c:12949
0x9f927f tsubst_template_decl
/home/marxin/Programming/gcc/gcc/cp/pt.c:13253
0x9fa86b tsubst_decl
/home/marxin/Programming/gcc/gcc/cp/pt.c:13355
0x9febb7 tsubst(tree_node*, tree_node*, int, tree_node*)
/home/marxin/Programming/gcc/gcc/cp/pt.c:14251
0x9e9f42 tsubst_friend_function
/home/marxin/Programming/gcc/gcc/cp/pt.c:10316
0x9ef597 instantiate_class_template_1
/home/marxin/Programming/gcc/gcc/cp/pt.c:11365
0x9ef816 instantiate_class_template(tree_node*)
/home/marxin/Programming/gcc/gcc/cp/pt.c:11430
0xa90c52 complete_type(tree_node*)
/home/marxin/Programming/gcc/gcc/cp/typeck.c:138
0x8ea857 start_decl_1(tree_node*, bool)
/home/marxin/Programming/gcc/gcc/cp/decl.c:5278
0x91285f start_decl(cp_declarator const*, cp_decl_specifier_seq*, int,
tree_node*, tree_node*, tree_node**)
/home/marxin/Programming/gcc/gcc/cp/decl.c:5241
More information about the Gcc-bugs
mailing list