https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105859
Bug ID: 105859 Summary: ICE in instantiate_decl Product: gcc Version: 12.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: sam at gentoo dot org Target Milestone: --- Originally reported downstream in Gentoo (https://bugs.gentoo.org/849791) by Toralf Förster (toralf). Noticed when building dev-games/wfmath-1.0.2. (Ionen in the downstream bug mentions 11.3.0 is fine, but it fails for me with 11.3.1 20220602 too.) Reproducer: ``` template <int = 3> struct Vector { friend Vector Cross(const Vector &, const Vector &); Vector &rotate(const int &); }; template <> Vector<> &Vector<>::rotate(const int &) { Vector __trans_tmp_8 = Cross(__trans_tmp_8, *this); } Vector<> Cross(const Vector<> &, const Vector<> &) {} ``` Seems to not require any specific flags: ``` $ g++ foo.ii foo.ii:3:53: warning: friend declaration ‘Vector<<anonymous> > Cross(const Vector<<anonymous> >&, const Vector<<anonymous> >&)’ declares a non-template function [-Wnon-template-friend] 3 | friend Vector Cross(const Vector &, const Vector &); | ^ foo.ii:3:53: note: (if this is not what you intended, make sure the function template has already been declared and add ‘<>’ after the function name here) foo.ii: In member function ‘Vector<<anonymous> >& Vector<<anonymous> >::rotate(const int&) [with int <anonymous> = 3]’: foo.ii:8:1: warning: no return statement in function returning non-void [-Wreturn-type] 8 | } | ^ foo.ii: In function ‘Vector<> Cross(const Vector<>&, const Vector<>&)’: foo.ii:9:53: warning: no return statement in function returning non-void [-Wreturn-type] 9 | Vector<> Cross(const Vector<> &, const Vector<> &) {} | ^ foo.ii: At global scope: foo.ii:7:31: internal compiler error: Segmentation fault 7 | Vector __trans_tmp_8 = Cross(__trans_tmp_8, *this); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~ 0xd06f86 crash_signal /usr/src/debug/sys-devel/gcc-12.1.1_p20220604/gcc-12-20220604/gcc/toplev.cc:322 0x163c55e instantiate_decl(tree_node*, bool, bool) /usr/src/debug/sys-devel/gcc-12.1.1_p20220604/gcc-12-20220604/gcc/cp/pt.cc:26488 0x130a940 instantiate_pending_templates(int) /usr/src/debug/sys-devel/gcc-12.1.1_p20220604/gcc-12-20220604/gcc/cp/pt.cc:26809 0x1303070 c_parse_final_cleanups() /usr/src/debug/sys-devel/gcc-12.1.1_p20220604/gcc-12-20220604/gcc/cp/decl2.cc:5128 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://bugs.gentoo.org/> for instructions. ``` ``` $ g++ --version g++ (Gentoo Hardened 12.1.1_p20220604 p7) 12.1.1 20220604 Copyright (C) 2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ```