[Bug c++/98551] New: [11 Regression] ICE in replace_result_decl, at cp/constexpr.c:2150
doko at debian dot org
gcc-bugzilla@gcc.gnu.org
Tue Jan 5 22:09:12 GMT 2021
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98551
Bug ID: 98551
Summary: [11 Regression] ICE in replace_result_decl, at
cp/constexpr.c:2150
Product: gcc
Version: 11.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: doko at debian dot org
Target Milestone: ---
seen with trunk 20210102, building the verdigris package.
$ cat tutorial.ii
template <typename> struct integer_sequence;
template <long... _Idx> using index_sequence = integer_sequence<long, _Idx...>;
struct QNonConstOverload {
template <typename R, typename T>
constexpr auto operator()(R(T::*ptr)) -> decltype(ptr) {
return ptr;
}
};
template <typename...> QNonConstOverload qOverload;
struct make_index_sequence_helper {
using result = index_sequence<>;
};
template <int> using make_index_sequence = make_index_sequence_helper::result;
template <int N> using StaticStringArray = const char[N];
template <int N, typename = make_index_sequence<N>> struct StaticString;
template <int N, long... I> struct StaticString<N, index_sequence<I...>> {
constexpr StaticString(StaticStringArray<N>);
};
struct {
} W_EmptyFlag;
template <typename F, int NameLength> struct MetaMethodInfo {
F func;
StaticString<NameLength> paramTypes;
};
template <typename F, int N, typename ParamTypes>
constexpr MetaMethodInfo<F, N> makeMetaSlotInfo(F f, StaticStringArray<N>
&name,
ParamTypes) {
return {f, name};
}
class SlotTutorial {
using W_ThisType = SlotTutorial;
void overload() {
MetaMethodInfo<void (SlotTutorial::*)(), 9> __trans_tmp_3 =
makeMetaSlotInfo(qOverload<>(&W_ThisType::overload), "overload",
W_EmptyFlag)
}
};
$ g++ -c -O0 -std=gnu++14 -Wall tutorial.ii
tutorial.ii: In member function ‘void SlotTutorial::overload()’:
tutorial.ii:34:37: in ‘constexpr’ expansion of
‘qOverload<>.QNonConstOverload::operator()<void(),
SlotTutorial>(&SlotTutorial::overload)’
tutorial.ii:35:37: internal compiler error: in replace_result_decl, at
cp/constexpr.c:2150
35 | W_EmptyFlag)
| ^
0x810fad replace_result_decl
../../src/gcc/cp/constexpr.c:2150
0x810fad cxx_eval_call_expression
../../src/gcc/cp/constexpr.c:2792
0x137c484 cxx_eval_constant_expression
../../src/gcc/cp/constexpr.c:6117
0x1496170 cxx_bind_parameters_in_call
../../src/gcc/cp/constexpr.c:1594
0x1496170 cxx_eval_call_expression
../../src/gcc/cp/constexpr.c:2533
0x137c484 cxx_eval_constant_expression
../../src/gcc/cp/constexpr.c:6117
0x1378d10 cxx_eval_outermost_constant_expr
../../src/gcc/cp/constexpr.c:7126
0x1385bd5 maybe_constant_value(tree_node*, tree_node*, bool)
../../src/gcc/cp/constexpr.c:7397
0x1385518 cp_fully_fold(tree_node*)
../../src/gcc/cp/cp-gimplify.c:2155
0x13583b0 cp_fully_fold_init(tree_node*)
../../src/gcc/cp/cp-gimplify.c:2176
0x13583b0 store_init_value(tree_node*, tree_node*, vec<tree_node*, va_gc,
vl_embed>**, int)
../../src/gcc/cp/typeck2.c:803
0x133ec91 check_initializer
../../src/gcc/cp/decl.c:7028
0x132e912 cp_finish_decl(tree_node*, tree_node*, bool, tree_node*, int)
../../src/gcc/cp/decl.c:7946
0x12f4415 cp_parser_init_declarator
../../src/gcc/cp/parser.c:21798
0x12ed5ae cp_parser_simple_declaration
../../src/gcc/cp/parser.c:14378
0x1398990 cp_parser_declaration_statement
../../src/gcc/cp/parser.c:13522
0x1355413 cp_parser_statement
../../src/gcc/cp/parser.c:11746
0x13515a5 cp_parser_statement_seq_opt
../../src/gcc/cp/parser.c:12112
0x13515a5 cp_parser_compound_statement
../../src/gcc/cp/parser.c:12062
0x134f2f7 cp_parser_function_body
../../src/gcc/cp/parser.c:23987
Please submit a full bug report,
with preprocessed source if appropriate.
More information about the Gcc-bugs
mailing list