https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117351
Bug ID: 117351
Summary: ICE while reporting invalid template error
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ak at gcc dot gnu.org
Target Milestone: ---
While trying to reduce another problem I hit this:
foo.cc:
template <_Lp> struct __shared_ptr_access {
template <typename>
using __esft_base_t decltype(__enable_shared_from_this_base());
template <typename _Yp> __esft_base_t<_Yp>
cc1plus foo.cc
gu.cc:1:11: error: ‘_Lp’ has not been declared
1 | template <_Lp> struct __shared_ptr_access {
| ^~~
gu.cc:3:23: error: expected ‘=’ before ‘decltype’ [-Wtemplate-body]
3 | using __esft_base_t decltype(__enable_shared_from_this_base());
| ^~~~~~~~
gu.cc:3:32: error: there are no arguments to ‘__enable_shared_from_this_base’
that depend on a template parameter, so a declaration of
‘__enable_shared_from_this_base’ must be available [-Wtemplate-body]
3 | using __esft_base_t decltype(__enable_shared_from_this_base());
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gu.cc:3:32: note: (if you use ‘-fpermissive’, G++ will accept your code, but
allowing the use of an undeclared name is deprecated)
gu.cc:3:32: error: there are no arguments to ‘__enable_shared_from_this_base’
that depend on a template parameter, so a declaration of
‘__enable_shared_from_this_base’ must be available [-Wtemplate-body]
gu.cc: In substitution of ‘template<<typeprefixerror><anonymous> >
template<class> using __shared_ptr_access<<anonymous> >::__esft_base_t =
decltype (__enable_shared_from_this_base()) [with <template-parameter-2-1> =
_Yp; <typeprefixerror><anonymous> = <expression error>]’:
gu.cc:4:44: required from here
4 | template <typename _Yp> __esft_base_t<_Yp>
| ^
gu.cc:3:62: error: ‘__enable_shared_from_this_base’ was not declared in this
scope
3 | using __esft_base_t decltype(__enable_shared_from_this_base());
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
gu.cc:4:44: internal compiler error: Segmentation fault
4 | template <typename _Yp> __esft_base_t<_Yp>
| ^
0x27adb7f internal_error(char const*, ...)
../../gcc/gcc/diagnostic-global-context.cc:518
0x135ed66 crash_signal
../../gcc/gcc/toplev.cc:323
0x9fe1b7 tree_class_check(tree_node*, tree_code_class, char const*, int, char
const*)
../../gcc/gcc/tree.h:3797
0x9fe1b7 pop_nested_class()
../../gcc/gcc/cp/class.cc:8636
0xc322d9 instantiate_template(tree_node*, tree_node*, int)
../../gcc/gcc/cp/pt.cc:22304
0xc33c8a instantiate_alias_template(tree_node*, tree_node*, int) [clone
.part.0] [clone .lto_priv.0]
../../gcc/gcc/cp/pt.cc:22400
0xc07640 instantiate_alias_template
../../gcc/gcc/cp/pt.cc:22378
0xc07640 lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int)
../../gcc/gcc/cp/pt.cc:10177
0xc4c037 finish_template_type(tree_node*, tree_node*, int)
../../gcc/gcc/cp/semantics.cc:4144
0xb92ced cp_parser_template_id
../../gcc/gcc/cp/parser.cc:19301
0xb92f65 cp_parser_class_name
../../gcc/gcc/cp/parser.cc:26973
0xb97d12 cp_parser_qualifying_entity
../../gcc/gcc/cp/parser.cc:7438
0xb97d12 cp_parser_nested_name_specifier_opt
../../gcc/gcc/cp/parser.cc:7124
0xbacdb4 cp_parser_constructor_declarator_p
../../gcc/gcc/cp/parser.cc:32800
0xbacdb4 cp_parser_decl_specifier_seq
../../gcc/gcc/cp/parser.cc:16872
0xbb7068 cp_parser_single_declaration
../../gcc/gcc/cp/parser.cc:33467
0xbb7662 cp_parser_template_declaration_after_parameters
../../gcc/gcc/cp/parser.cc:33228
0xbb7662 cp_parser_explicit_template_declaration
../../gcc/gcc/cp/parser.cc:33398
0xb86e10 cp_parser_member_specification_opt
../../gcc/gcc/cp/parser.cc:28187
0xb86e10 cp_parser_class_specifier
../../gcc/gcc/cp/parser.cc:27166
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.