https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92339
Bug ID: 92339
Summary: ice at cp/typeck.c:1510
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: dcb314 at hotmail dot com
Target Milestone: ---
For this C++ source code:
class a {
template <typename b, b a::*> struct c { c(a *); };
int m_fn1();
unsigned long d;
using e = c<unsigned long, &a::d>;
};
int a::m_fn1() { e(this); }
compiled with recent gcc trunk, does this:
bug557.cc: In instantiation of ‘struct a::c<long unsigned int, &a::d>’:
bug557.cc:7:24: required from here
bug557.cc:2:44: internal compiler error: canonical types differ for identical
types ‘a::c<long unsigned int, &a::d>’ and ‘a::c<long unsigned int, &a::d>’
2 | template <typename b, b a::*> struct c { c(a *); };
| ^
0xad8236 comptypes(tree_node*, tree_node*, int)
../../trunk/gcc/cp/typeck.c:1510
0x9ce571 push_scope(tree_node*)
../../trunk/gcc/cp/name-lookup.c:4063
0x9c01d5 synthesized_method_walk
../../trunk/gcc/cp/method.c:1652
0x9c1f16 implicitly_declare_fn(special_function_kind, tree_node*, bool,
tree_node*, tree_node*)
../../trunk/gcc/cp/method.c:2046
The problem seems to start sometime between revision 277600 and
277650.