https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84355
Bug ID: 84355
Summary: [7/8 Regression] ICE with failing template argument
deduction
Product: gcc
Version: 8.0
Status: UNCONFIRMED
Keywords: ice-on-invalid-code
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: reichelt at gcc dot gnu.org
Target Milestone: ---
The following invalid code snippet (compiled with "-std=c++1z")
trigges an ICE since GCC 7.1.0:
====================================
template<typename T> struct A
{
template<int> struct B
{
B(T);
};
A() { B b(0); }
};
A<int> a;
====================================
bug.cc: In substitution of 'template<int <anonymous> > B(T)->
A<T>::B<<enumerator> > [with int <anonymous> = <missing>]':
bug.cc:8:11: required from 'A<T>::A() [with T = int]'
bug.cc:11:8: required from here
bug.cc:8:11: internal compiler error: in unify, at cp/pt.c:20924
A() { B b(0); }
^
0x63ad48 unify
../../gcc/gcc/cp/pt.c:20924
0x97e293 unify_one_argument
../../gcc/gcc/cp/pt.c:19528
0x981ce4 type_unification_real
../../gcc/gcc/cp/pt.c:19648
0x984345 fn_type_unification(tree_node*, tree_node*, tree_node*, tree_node*
const*, unsigned int, tree_node*, unification_kind_t, int, bool, bool)
../../gcc/gcc/cp/pt.c:19033
0x825def add_template_candidate_real
../../gcc/gcc/cp/call.c:3176
0x826800 add_template_candidate
../../gcc/gcc/cp/call.c:3255
0x826800 add_candidates
../../gcc/gcc/cp/call.c:5514
0x826c21 add_candidates
../../gcc/gcc/cp/call.c:4190
0x826c21 perform_overload_resolution
../../gcc/gcc/cp/call.c:4198
0x828ca2 build_new_function_call(tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
../../gcc/gcc/cp/call.c:4271
0x95fcb0 do_class_deduction
../../gcc/gcc/cp/pt.c:25925
0x95fcb0 do_auto_deduction(tree_node*, tree_node*, tree_node*, int,
auto_deduction_context, tree_node*, int)
../../gcc/gcc/cp/pt.c:25991
0x8989c3 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
../../gcc/gcc/cp/decl.c:6820
0x96a4db tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
../../gcc/gcc/cp/pt.c:16203
0x965eb1 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
../../gcc/gcc/cp/pt.c:16336
0x9666c1 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
../../gcc/gcc/cp/pt.c:16059
0x965eb1 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
../../gcc/gcc/cp/pt.c:16336
0x965148 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool)
../../gcc/gcc/cp/pt.c:16044
0x965148 instantiate_decl(tree_node*, bool, bool)
../../gcc/gcc/cp/pt.c:23398
0x98f79b instantiate_pending_templates(int)
../../gcc/gcc/cp/pt.c:23514
Please submit a full bug report, [etc.]