https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93383
Bug ID: 93383
Summary: ICE on accessing field of a structure which is
non-type template parameter, -std=c++2a
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nikita.provotorov.main at gmail dot com
Target Milestone: ---
Snippet of code which causes GCC crash:
template <int N>
struct fixed_string {
char content[N] = {};
constexpr fixed_string(const char (&)[N]) noexcept {}
};
template <int N> fixed_string(const char (&)[N]) -> fixed_string<N>;
template<fixed_string Str>
struct bar
{};
template<fixed_string Str>
struct foo
{
using type = bar<Str.content>;
};
Exact compiler version: 10.0.0 20200111
Used compiler flags: -Wall -Wextra -std=c++2a
Godbolt reference: https://godbolt.org/z/tAnFxP
Compiler output:
internal compiler error: Segmentation fault
18 | using type = bar<Str.content>;
| ^
0xc12a5f crash_signal
../../source/gcc/toplev.c:328
0x5fed33 resolve_args(vec<tree_node*, va_gc, vl_embed>*, int)
../../source/gcc/cp/call.c:4429
0x70e69f do_class_deduction
../../source/gcc/cp/pt.c:28566
0x70e69f do_auto_deduction(tree_node*, tree_node*, tree_node*, int,
auto_deduction_context, tree_node*, int)
../../source/gcc/cp/pt.c:28699
0x70faf2 convert_template_argument
../../source/gcc/cp/pt.c:8325
0x72261f convert_template_argument
../../source/gcc/cp/pt.c:8098
0x72261f coerce_template_parms
../../source/gcc/cp/pt.c:8829
0x72640a lookup_template_class_1
../../source/gcc/cp/pt.c:9666
0x72768c lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*,
int, int)
../../source/gcc/cp/pt.c:10038
0x74291d finish_template_type(tree_node*, tree_node*, int)
../../source/gcc/cp/semantics.c:3405
0x6eb83d cp_parser_template_id
../../source/gcc/cp/parser.c:16659
0x6ebaaa cp_parser_class_name
../../source/gcc/cp/parser.c:23564
0x6e89c1 cp_parser_qualifying_entity
../../source/gcc/cp/parser.c:6727
0x6e89c1 cp_parser_nested_name_specifier_opt
../../source/gcc/cp/parser.c:6410
0x6efc2f cp_parser_simple_type_specifier
../../source/gcc/cp/parser.c:18054
0x6d6bfd cp_parser_type_specifier
../../source/gcc/cp/parser.c:17712
0x6ea094 cp_parser_type_specifier_seq
../../source/gcc/cp/parser.c:22271
0x6e4444 cp_parser_type_id_1
../../source/gcc/cp/parser.c:22100
0x6e5608 cp_parser_type_id
../../source/gcc/cp/parser.c:22179
0x6e5608 cp_parser_alias_declaration
../../source/gcc/cp/parser.c:19927