https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88146
Bug ID: 88146 Summary: ice in tsubst_copy, at cp/pt.c:16014 Product: gcc Version: 8.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++ code: template < typename a, a b > struct c { static constexpr a d = b; }; template < typename > auto aa(0); template < typename... > struct ac; template < typename e > using f = typename e::g; template < typename > struct ay { using g = void; }; template < typename az, typename ba > struct ay< ac< az, ba > > { using g = b a; }; template < typename... h > using bc = f< ay< ac< h... > > >; template < bool... > using bd = c< bool, true >; template < typename... > using be = bd<>; template < typename > using bt = int; enum bu { bw }; template < typename > struct bx; template < typename by, bu = bx< by >::d > struct bz; template < typename e > struct cb { e d; }; template < typename cd > using cf = cd; template < typename i > struct chain { using g = i; }; template < typename i > class cm : f< chain< i > > { using cn = f< chain< i > >; cn::cn; }; namespace co { template < typename > struct cp { template < typename... h > c onstexpr cp(...) noexcept(be< h... >::d); }; template < typename... > using cq = cp< int >; } using co::cq; template < typename... > using cr = cm< cq<> >; struct ct : cr<> { using cn = cr<>; cn::cn; }; struct cu { template < typename cv > static auto cw(cv cx) -> decltype(cx.cw( )); }; template < typename > struct cy; struct cz { template < typename cd, typename = decltype(cd().begin()) > void da(cd, int); template < typename cd > auto operator()(cd j) -> decltype(da(j, 2)); }; struct db { template < typename e > using dc = decltype(cb< cz >::d(e())); }; struct dd : db { template < typename e > using cf = cf< dc< e > >; }; template < typename cv > using de = dd::cf< cv >; c< bu, bw > k; template < typename > struct bx : bc< c< bool, true >, decltype(k) > {}; template < typename df > using dg = bt< decltype(cu::cw(df())) >; template < typename df > using dh = cy< dg< df > >; template < typename df, int > struct di { template < typename ao = df > dh< a o > begin(); }; template < typename > struct dl : ct { ct::ct; }; struct dm : dl< int > { dl::dl; }; struct dn : dm { using cn = dm; cn::cn; }; template < typename > using l = dn; struct m; template < typename, bu n > struct bz : di< m, n > { template < typename ao > static ao begin_cursor_(ao) noexcept(noexcept(l< ao >{0})); template < type name ao = m > auto cw() noexcept(decltype(begin_cursor_(aa< ao >))()) -> declt ype(0); }; struct m : bz< int > {}; template < typename, typename p, typename > using o = c< bu, p::d >; template < typename r > using s = o< r, bx< de< r > >, bc<> >; di< int, s< m >::d >; recent gcc trunk does this: bug484.cc:35:42: internal compiler error: in tsubst_copy, at cp/pt.c:16014 35 | struct dn : dm { using cn = dm; cn::cn; }; | ^~ 0x6420b0 tsubst_copy ../../trunk/gcc/cp/pt.c:16014 0x9b07fb tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../trunk/gcc/cp/pt.c:19363 0x9bbb48 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../trunk/gcc/cp/pt.c:18058 This bug seems to have occurred sometime before revision 265318.